From 7538b4c6201675c566c98b21c8ecddb798a14943 Mon Sep 17 00:00:00 2001 From: Perttu Ahola Date: Sat, 25 Jun 2011 04:25:14 +0300 Subject: New map generator added (and SQLite, messed up the commits at that time...) (import from temporary git repo) --- src/mapblock.h | 125 ++++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 102 insertions(+), 23 deletions(-) (limited to 'src/mapblock.h') diff --git a/src/mapblock.h b/src/mapblock.h index ca36499ac..693bc5190 100644 --- a/src/mapblock.h +++ b/src/mapblock.h @@ -51,6 +51,36 @@ enum{ FACE_LEFT };*/ +enum ModifiedState +{ + // Has not been modified. + MOD_STATE_CLEAN = 0, + MOD_RESERVED1 = 1, + // Has been modified, and will be saved when being unloaded. + MOD_STATE_WRITE_AT_UNLOAD = 2, + MOD_RESERVED3 = 3, + // Has been modified, and will be saved as soon as possible. + MOD_STATE_WRITE_NEEDED = 4, + MOD_RESERVED5 = 5, +}; + +// NOTE: If this is enabled, set MapBlock to be initialized with +// CONTENT_IGNORE. +/*enum BlockGenerationStatus +{ + // Completely non-generated (filled with CONTENT_IGNORE). + BLOCKGEN_UNTOUCHED=0, + // Trees or similar might have been blitted from other blocks to here. + // Otherwise, the block contains CONTENT_IGNORE + BLOCKGEN_FROM_NEIGHBORS=2, + // Has been generated, but some neighbors might put some stuff in here + // when they are generated. + // Does not contain any CONTENT_IGNORE + BLOCKGEN_SELF_GENERATED=4, + // The block and all its neighbors have been generated + BLOCKGEN_FULLY_GENERATED=6 +};*/ + enum { NODECONTAINER_ID_MAPBLOCK, @@ -106,9 +136,10 @@ public: u32 l = MAP_BLOCKSIZE * MAP_BLOCKSIZE * MAP_BLOCKSIZE; data = new MapNode[l]; for(u32 i=0; i= MAP_BLOCKSIZE) throw InvalidPositionException(); if(z < 0 || z >= MAP_BLOCKSIZE) throw InvalidPositionException(); data[z*MAP_BLOCKSIZE*MAP_BLOCKSIZE + y*MAP_BLOCKSIZE + x] = n; - setChangedFlag(); + raiseModified(MOD_STATE_WRITE_NEEDED); } void setNode(v3s16 p, MapNode & n) @@ -290,7 +345,7 @@ public: if(data == NULL) throw InvalidPositionException(); data[z*MAP_BLOCKSIZE*MAP_BLOCKSIZE + y*MAP_BLOCKSIZE + x] = n; - setChangedFlag(); + raiseModified(MOD_STATE_WRITE_NEEDED); } void setNodeNoCheck(v3s16 p, MapNode & n) @@ -376,26 +431,26 @@ public: { m_objects.update(is, version, smgr, daynight_ratio); - setChangedFlag(); + raiseModified(MOD_STATE_WRITE_NEEDED); } void clearObjects() { m_objects.clear(); - setChangedFlag(); + raiseModified(MOD_STATE_WRITE_NEEDED); } void addObject(MapBlockObject *object) throw(ContainerFullException, AlreadyExistsException) { m_objects.add(object); - setChangedFlag(); + raiseModified(MOD_STATE_WRITE_NEEDED); } void removeObject(s16 id) { m_objects.remove(id); - setChangedFlag(); + raiseModified(MOD_STATE_WRITE_NEEDED); } MapBlockObject * getObject(s16 id) { @@ -505,7 +560,7 @@ public: void setTimestamp(u32 time) { m_timestamp = time; - setChangedFlag(); + raiseModified(MOD_STATE_WRITE_AT_UNLOAD); } void setTimestampNoChangedFlag(u32 time) { @@ -515,6 +570,22 @@ public: { return m_timestamp; } + + /* + See m_usage_timer + */ + void resetUsageTimer() + { + m_usage_timer = 0; + } + void incrementUsageTimer(float dtime) + { + m_usage_timer += dtime; + } + u32 getUsageTimer() + { + return m_usage_timer; + } /* Serialization @@ -581,10 +652,10 @@ private: /* - On the server, this is used for telling whether the - block has been changed from the one on disk. + block has been modified from the one on disk. - On the client, this is used for nothing. */ - bool changed; + u32 m_modified; /* When propagating sunlight and the above block doesn't exist, @@ -607,6 +678,8 @@ private: // Whether day and night lighting differs bool m_day_night_differs; + + bool m_generated; // DEPRECATED MapBlockObjectList m_objects; @@ -630,6 +703,12 @@ private: Value BLOCK_TIMESTAMP_UNDEFINED=0xffffffff means there is no timestamp. */ u32 m_timestamp; + + /* + When the block is accessed, this is set to 0. + Map will unload the block when this reaches a timeout. + */ + float m_usage_timer; }; inline bool blockpos_over_limit(v3s16 p) -- cgit v1.2.3