X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fmapblock.h;h=30e9e38f81e9cc9285995a51012ec4304e51d70e;hb=79799840a23b99aaf7f4af77a94ea4e9efcf5327;hp=6af4070bc59d27ca7f734c31ffc1c9786c1e6447;hpb=01c2b003e1efb839ad246eb939af7fa8336b9ad5;p=dragonfireclient.git diff --git a/src/mapblock.h b/src/mapblock.h index 6af4070bc..30e9e38f8 100644 --- a/src/mapblock.h +++ b/src/mapblock.h @@ -32,6 +32,8 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "mapblockobject.h" #include "voxel.h" #include "nodemetadata.h" +#include "staticobject.h" + // Named by looking towards z+ enum{ @@ -155,8 +157,51 @@ class NodeContainer 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); + } + } +}; + +/* + Mesh making stuff +*/ + +class MapBlock; + +#ifndef SERVER + +struct MeshMakeData +{ + u32 m_daynight_ratio; + NodeModMap m_temp_mods; + VoxelManipulator m_vmanip; + v3s16 m_blockpos; + + /* + Copy central data directly from block, and other data from + parent of block. + */ + void fill(u32 daynight_ratio, MapBlock *block); }; +scene::SMesh* makeMapBlockMesh(MeshMakeData *data); + +#endif + +u8 getFaceLight(u32 daynight_ratio, MapNode n, MapNode n2, + v3s16 face_dir); + +/* + MapBlock itself +*/ + class MapBlock : public NodeContainer { public: @@ -167,7 +212,7 @@ class MapBlock : public NodeContainer { return NODECONTAINER_ID_MAPBLOCK; } - + NodeContainer * getParent() { return m_parent; @@ -380,11 +425,18 @@ class MapBlock : public NodeContainer Graphics-related methods */ - // A quick version with nodes passed as parameters + /*// A quick version with nodes passed as parameters u8 getFaceLight(u32 daynight_ratio, MapNode n, MapNode n2, - v3s16 face_dir); - // A more convenient version + v3s16 face_dir);*/ + /*// A more convenient version u8 getFaceLight(u32 daynight_ratio, v3s16 p, v3s16 face_dir) + { + return getFaceLight(daynight_ratio, + getNodeParentNoEx(p), + getNodeParentNoEx(p + face_dir), + face_dir); + }*/ + u8 getFaceLight2(u32 daynight_ratio, v3s16 p, v3s16 face_dir) { return getFaceLight(daynight_ratio, getNodeParentNoEx(p), @@ -394,14 +446,14 @@ class MapBlock : public NodeContainer #ifndef SERVER // light = 0...255 - static void makeFastFace(TileSpec tile, u8 light, v3f p, + /*static void makeFastFace(TileSpec tile, u8 light, v3f p, v3s16 dir, v3f scale, v3f posRelative_f, - core::array &dest); + core::array &dest);*/ - TileSpec getNodeTile(MapNode mn, v3s16 p, v3s16 face_dir, - NodeModMap &temp_mods); - u8 getNodeContent(v3s16 p, MapNode mn, - NodeModMap &temp_mods); + /*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 @@ -411,7 +463,7 @@ class MapBlock : public NodeContainer 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( + /*void updateFastFaceRow( u32 daynight_ratio, v3f posRelative_f, v3s16 startpos, @@ -421,12 +473,16 @@ class MapBlock : public NodeContainer v3s16 face_dir, v3f face_dir_f, core::array &dest, - NodeModMap &temp_mods); + NodeModMap &temp_mods);*/ /* Thread-safely updates the whole mesh of the mapblock. */ +#if 1 void updateMesh(u32 daynight_ratio); +#endif + + void replaceMesh(scene::SMesh *mesh_new); #endif // !SERVER @@ -545,6 +601,11 @@ class MapBlock : public NodeContainer return m_temp_mods.clear(); } + void copyTempMods(NodeModMap &dst) + { + JMutexAutoLock lock(m_temp_mods_mutex); + m_temp_mods.copy(dst); + } #endif /* @@ -621,14 +682,14 @@ class MapBlock : public NodeContainer #endif NodeMetadataList m_node_metadata; + StaticObjectList m_static_objects; private: /* Private member variables */ - // Parent container (practically the Map) - // Not a MapSector, it is just a structural element. + // NOTE: Lots of things rely on this being the Map NodeContainer *m_parent; // Position in blocks on parent v3s16 m_pos; @@ -668,10 +729,11 @@ class MapBlock : public NodeContainer // Whether day and night lighting differs bool m_day_night_differs; + // TODO: Remove this MapBlockObjectList m_objects; // Object spawning stuff - float m_spawn_timer; + //float m_spawn_timer; #ifndef SERVER // Only on client /*