|
@@ -42,63 +42,6 @@ class VoxelManipulator;
|
|
|
|
|
|
#define BLOCK_TIMESTAMP_UNDEFINED 0xffffffff
|
|
|
|
|
|
-/*// Named by looking towards z+
|
|
|
-enum{
|
|
|
- FACE_BACK=0,
|
|
|
- FACE_TOP,
|
|
|
- FACE_RIGHT,
|
|
|
- FACE_FRONT,
|
|
|
- FACE_BOTTOM,
|
|
|
- FACE_LEFT
|
|
|
-};*/
|
|
|
-
|
|
|
-// 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
|
|
|
-};*/
|
|
|
-
|
|
|
-#if 0
|
|
|
-enum
|
|
|
-{
|
|
|
- NODECONTAINER_ID_MAPBLOCK,
|
|
|
- NODECONTAINER_ID_MAPSECTOR,
|
|
|
- NODECONTAINER_ID_MAP,
|
|
|
- NODECONTAINER_ID_MAPBLOCKCACHE,
|
|
|
- NODECONTAINER_ID_VOXELMANIPULATOR,
|
|
|
-};
|
|
|
-
|
|
|
-class NodeContainer
|
|
|
-{
|
|
|
-public:
|
|
|
- virtual bool isValidPosition(v3s16 p) = 0;
|
|
|
- virtual MapNode getNode(v3s16 p) = 0;
|
|
|
- virtual void setNode(v3s16 p, MapNode & n) = 0;
|
|
|
- virtual u16 nodeContainerId() const = 0;
|
|
|
-
|
|
|
- MapNode getNodeNoEx(v3s16 p)
|
|
|
- {
|
|
|
- try{
|
|
|
- return getNode(p);
|
|
|
- }
|
|
|
- catch(InvalidPositionException &e){
|
|
|
- return MapNode(CONTENT_IGNORE);
|
|
|
- }
|
|
|
- }
|
|
|
-};
|
|
|
-#endif
|
|
|
-
|
|
|
////
|
|
|
//// MapBlock modified reason flags
|
|
|
////
|
|
@@ -128,7 +71,7 @@ public:
|
|
|
//// MapBlock itself
|
|
|
////
|
|
|
|
|
|
-class MapBlock /*: public NodeContainer*/
|
|
|
+class MapBlock
|
|
|
{
|
|
|
public:
|
|
|
MapBlock(Map *parent, v3s16 pos, IGameDef *gamedef, bool dummy=false);
|
|
@@ -198,7 +141,7 @@ public:
|
|
|
|
|
|
inline bool isDummy()
|
|
|
{
|
|
|
- return (data == NULL);
|
|
|
+ return !data;
|
|
|
}
|
|
|
|
|
|
inline void unDummify()
|
|
@@ -298,7 +241,7 @@ public:
|
|
|
|
|
|
inline bool isValidPosition(s16 x, s16 y, s16 z)
|
|
|
{
|
|
|
- return data != NULL
|
|
|
+ return data
|
|
|
&& x >= 0 && x < MAP_BLOCKSIZE
|
|
|
&& y >= 0 && y < MAP_BLOCKSIZE
|
|
|
&& z >= 0 && z < MAP_BLOCKSIZE;
|
|
@@ -350,7 +293,7 @@ public:
|
|
|
|
|
|
inline MapNode getNodeNoCheck(s16 x, s16 y, s16 z, bool *valid_position)
|
|
|
{
|
|
|
- *valid_position = data != NULL;
|
|
|
+ *valid_position = data != nullptr;
|
|
|
if (!valid_position)
|
|
|
return MapNode(CONTENT_IGNORE);
|
|
|
|
|
@@ -380,7 +323,7 @@ public:
|
|
|
|
|
|
inline void setNodeNoCheck(s16 x, s16 y, s16 z, MapNode & n)
|
|
|
{
|
|
|
- if (data == NULL)
|
|
|
+ if (!data)
|
|
|
throw InvalidPositionException();
|
|
|
|
|
|
data[z * zstride + y * ystride + x] = n;
|
|
@@ -579,7 +522,7 @@ public:
|
|
|
*/
|
|
|
|
|
|
#ifndef SERVER // Only on client
|
|
|
- MapBlockMesh *mesh;
|
|
|
+ MapBlockMesh *mesh = nullptr;
|
|
|
#endif
|
|
|
|
|
|
NodeMetadataList m_node_metadata;
|
|
@@ -615,15 +558,15 @@ private:
|
|
|
If NULL, block is a dummy block.
|
|
|
Dummy blocks are used for caching not-found-on-disk blocks.
|
|
|
*/
|
|
|
- MapNode *data;
|
|
|
+ MapNode *data = nullptr;
|
|
|
|
|
|
/*
|
|
|
- On the server, this is used for telling whether the
|
|
|
block has been modified from the one on disk.
|
|
|
- On the client, this is used for nothing.
|
|
|
*/
|
|
|
- u32 m_modified;
|
|
|
- u32 m_modified_reason;
|
|
|
+ u32 m_modified = MOD_STATE_WRITE_NEEDED;
|
|
|
+ u32 m_modified_reason = MOD_REASON_INITIAL;
|
|
|
|
|
|
/*
|
|
|
When propagating sunlight and the above block doesn't exist,
|
|
@@ -633,7 +576,7 @@ private:
|
|
|
undeground with nothing visible above the ground except
|
|
|
caves.
|
|
|
*/
|
|
|
- bool is_underground;
|
|
|
+ bool is_underground = false;
|
|
|
|
|
|
/*!
|
|
|
* Each bit indicates if light spreading was finished
|
|
@@ -643,33 +586,33 @@ private:
|
|
|
* night X-, night Y-, night Z-, night Z+, night Y+, night X+,
|
|
|
* day X-, day Y-, day Z-, day Z+, day Y+, day X+.
|
|
|
*/
|
|
|
- u16 m_lighting_complete;
|
|
|
+ u16 m_lighting_complete = 0xFFFF;
|
|
|
|
|
|
// Whether day and night lighting differs
|
|
|
- bool m_day_night_differs;
|
|
|
- bool m_day_night_differs_expired;
|
|
|
+ bool m_day_night_differs = false;
|
|
|
+ bool m_day_night_differs_expired = true;
|
|
|
|
|
|
- bool m_generated;
|
|
|
+ bool m_generated = false;
|
|
|
|
|
|
/*
|
|
|
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;
|
|
|
+ u32 m_timestamp = BLOCK_TIMESTAMP_UNDEFINED;
|
|
|
// The on-disk (or to-be on-disk) timestamp value
|
|
|
- u32 m_disk_timestamp;
|
|
|
+ u32 m_disk_timestamp = BLOCK_TIMESTAMP_UNDEFINED;
|
|
|
|
|
|
/*
|
|
|
When the block is accessed, this is set to 0.
|
|
|
Map will unload the block when this reaches a timeout.
|
|
|
*/
|
|
|
- float m_usage_timer;
|
|
|
+ float m_usage_timer = 0;
|
|
|
|
|
|
/*
|
|
|
Reference count; currently used for determining if this block is in
|
|
|
the list of blocks to be drawn.
|
|
|
*/
|
|
|
- int m_refcount;
|
|
|
+ int m_refcount = 0;
|
|
|
};
|
|
|
|
|
|
typedef std::vector<MapBlock*> MapBlockVect;
|