diff options
Diffstat (limited to 'src/mapblock.h')
-rw-r--r-- | src/mapblock.h | 107 |
1 files changed, 53 insertions, 54 deletions
diff --git a/src/mapblock.h b/src/mapblock.h index 30e9e38f8..1eb97353c 100644 --- a/src/mapblock.h +++ b/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);*/ - - /* - Generates the FastFaces of a node row. This has a - ridiculous amount of parameters because that way they - can be precalculated by the caller. +#ifndef SERVER // Only on client - 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 @@ -640,13 +620,29 @@ 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) |