mirror of
https://github.com/luanti-org/luanti.git
synced 2025-06-27 16:36:03 +00:00
Preliminary "active block" stuff + set up test code to grow grass.
This commit is contained in:
parent
af7d50e910
commit
0af5311538
14 changed files with 848 additions and 383 deletions
107
src/mapblock.h
107
src/mapblock.h
|
@ -34,6 +34,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
#include "nodemetadata.h"
|
||||
#include "staticobject.h"
|
||||
|
||||
#define BLOCK_TIMESTAMP_UNDEFINED 0xffffffff
|
||||
|
||||
// Named by looking towards z+
|
||||
enum{
|
||||
|
@ -244,24 +245,28 @@ public:
|
|||
reallocate();
|
||||
}
|
||||
|
||||
bool getChangedFlag()
|
||||
/*
|
||||
This is called internally or externally after the block is
|
||||
modified, so that the block is saved and possibly not deleted from
|
||||
memory.
|
||||
*/
|
||||
void setChangedFlag()
|
||||
{
|
||||
return changed;
|
||||
changed = true;
|
||||
}
|
||||
void resetChangedFlag()
|
||||
{
|
||||
changed = false;
|
||||
}
|
||||
void setChangedFlag()
|
||||
bool getChangedFlag()
|
||||
{
|
||||
changed = true;
|
||||
return changed;
|
||||
}
|
||||
|
||||
bool getIsUnderground()
|
||||
{
|
||||
return is_underground;
|
||||
}
|
||||
|
||||
void setIsUnderground(bool a_is_underground)
|
||||
{
|
||||
is_underground = a_is_underground;
|
||||
|
@ -359,6 +364,15 @@ public:
|
|||
return getNode(p.X, p.Y, p.Z);
|
||||
}
|
||||
|
||||
MapNode getNodeNoEx(v3s16 p)
|
||||
{
|
||||
try{
|
||||
return getNode(p.X, p.Y, p.Z);
|
||||
}catch(InvalidPositionException &e){
|
||||
return MapNode(CONTENT_IGNORE);
|
||||
}
|
||||
}
|
||||
|
||||
void setNode(s16 x, s16 y, s16 z, MapNode & n)
|
||||
{
|
||||
if(data == NULL)
|
||||
|
@ -444,47 +458,19 @@ public:
|
|||
face_dir);
|
||||
}
|
||||
|
||||
#ifndef SERVER
|
||||
// light = 0...255
|
||||
/*static void makeFastFace(TileSpec tile, u8 light, v3f p,
|
||||
v3s16 dir, v3f scale, v3f posRelative_f,
|
||||
core::array<FastFace> &dest);*/
|
||||
|
||||
/*TileSpec getNodeTile(MapNode mn, v3s16 p, v3s16 face_dir,
|
||||
NodeModMap &temp_mods);*/
|
||||
/*u8 getNodeContent(v3s16 p, MapNode mn,
|
||||
NodeModMap &temp_mods);*/
|
||||
#ifndef SERVER // Only on client
|
||||
|
||||
/*
|
||||
Generates the FastFaces of a node row. This has a
|
||||
ridiculous amount of parameters because that way they
|
||||
can be precalculated by the caller.
|
||||
|
||||
translate_dir: unit vector with only one of x, y or z
|
||||
face_dir: unit vector with only one of x, y or z
|
||||
*/
|
||||
/*void updateFastFaceRow(
|
||||
u32 daynight_ratio,
|
||||
v3f posRelative_f,
|
||||
v3s16 startpos,
|
||||
u16 length,
|
||||
v3s16 translate_dir,
|
||||
v3f translate_dir_f,
|
||||
v3s16 face_dir,
|
||||
v3f face_dir_f,
|
||||
core::array<FastFace> &dest,
|
||||
NodeModMap &temp_mods);*/
|
||||
|
||||
#if 1
|
||||
/*
|
||||
Thread-safely updates the whole mesh of the mapblock.
|
||||
NOTE: Prefer generating the mesh separately and then using
|
||||
replaceMesh().
|
||||
*/
|
||||
#if 1
|
||||
void updateMesh(u32 daynight_ratio);
|
||||
#endif
|
||||
|
||||
// Replace the mesh with a new one
|
||||
void replaceMesh(scene::SMesh *mesh_new);
|
||||
|
||||
#endif // !SERVER
|
||||
#endif
|
||||
|
||||
// See comments in mapblock.cpp
|
||||
bool propagateSunlight(core::map<v3s16, bool> & light_sources,
|
||||
|
@ -498,6 +484,7 @@ public:
|
|||
|
||||
/*
|
||||
MapBlockObject stuff
|
||||
DEPRECATED
|
||||
*/
|
||||
|
||||
void serializeObjects(std::ostream &os, u8 version)
|
||||
|
@ -545,13 +532,6 @@ public:
|
|||
*/
|
||||
void stepObjects(float dtime, bool server, u32 daynight_ratio);
|
||||
|
||||
/*void wrapObject(MapBlockObject *object)
|
||||
{
|
||||
m_objects.wrapObject(object);
|
||||
|
||||
setChangedFlag();
|
||||
}*/
|
||||
|
||||
// origin is relative to block
|
||||
void getObjects(v3f origin, f32 max_d,
|
||||
core::array<DistanceSortedObject> &dest)
|
||||
|
@ -564,7 +544,7 @@ public:
|
|||
return m_objects.getCount();
|
||||
}
|
||||
|
||||
#ifndef SERVER
|
||||
#ifndef SERVER // Only on client
|
||||
/*
|
||||
Methods for setting temporary modifications to nodes for
|
||||
drawing
|
||||
|
@ -639,14 +619,30 @@ public:
|
|||
*/
|
||||
s16 getGroundLevel(v2s16 p2d);
|
||||
|
||||
/*
|
||||
Timestamp (see m_timestamp)
|
||||
NOTE: BLOCK_TIMESTAMP_UNDEFINED=0xffffffff means there is no timestamp.
|
||||
*/
|
||||
void setTimestamp(u32 time)
|
||||
{
|
||||
m_timestamp = time;
|
||||
setChangedFlag();
|
||||
}
|
||||
u32 getTimestamp()
|
||||
{
|
||||
return m_timestamp;
|
||||
}
|
||||
|
||||
/*
|
||||
Serialization
|
||||
*/
|
||||
|
||||
// Doesn't write version by itself
|
||||
// These don't write or read version by itself
|
||||
void serialize(std::ostream &os, u8 version);
|
||||
|
||||
void deSerialize(std::istream &is, u8 version);
|
||||
// Used after the basic ones when writing on disk (serverside)
|
||||
void serializeDiskExtra(std::ostream &os, u8 version);
|
||||
void deSerializeDiskExtra(std::istream &is, u8 version);
|
||||
|
||||
private:
|
||||
/*
|
||||
|
@ -676,7 +672,7 @@ public:
|
|||
Public member variables
|
||||
*/
|
||||
|
||||
#ifndef SERVER
|
||||
#ifndef SERVER // Only on client
|
||||
scene::SMesh *mesh;
|
||||
JMutex mesh_mutex;
|
||||
#endif
|
||||
|
@ -729,12 +725,9 @@ private:
|
|||
// Whether day and night lighting differs
|
||||
bool m_day_night_differs;
|
||||
|
||||
// TODO: Remove this
|
||||
// DEPRECATED
|
||||
MapBlockObjectList m_objects;
|
||||
|
||||
// Object spawning stuff
|
||||
//float m_spawn_timer;
|
||||
|
||||
#ifndef SERVER // Only on client
|
||||
/*
|
||||
Set to true if the mesh has been ordered to be updated
|
||||
|
@ -748,6 +741,12 @@ private:
|
|||
NodeModMap m_temp_mods;
|
||||
JMutex m_temp_mods_mutex;
|
||||
#endif
|
||||
|
||||
/*
|
||||
When block is removed from active blocks, this is set to gametime.
|
||||
Value BLOCK_TIMESTAMP_UNDEFINED=0xffffffff means there is no timestamp.
|
||||
*/
|
||||
u32 m_timestamp;
|
||||
};
|
||||
|
||||
inline bool blockpos_over_limit(v3s16 p)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue