#include "constants.h"
#include "mapblockobject.h"
#include "voxel.h"
+#include "nodemetadata.h"
+#include "staticobject.h"
+
// Named by looking towards z+
enum{
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:
{
return NODECONTAINER_ID_MAPBLOCK;
}
-
+
NodeContainer * getParent()
{
return m_parent;
return m_lighting_expired;
}
- bool isFullyGenerated()
+ /*bool isFullyGenerated()
{
return !m_not_fully_generated;
}
-
void setFullyGenerated(bool b)
{
setChangedFlag();
m_not_fully_generated = !b;
- }
+ }*/
bool isValid()
{
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),
#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<FastFace> &dest);
+ 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);
+ /*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
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,
v3s16 face_dir,
v3f face_dir_f,
core::array<FastFace> &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
return m_temp_mods.clear();
}
+ void copyTempMods(NodeModMap &dst)
+ {
+ JMutexAutoLock lock(m_temp_mods_mutex);
+ m_temp_mods.copy(dst);
+ }
#endif
/*
JMutex mesh_mutex;
#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;
// Whether day and night lighting differs
bool m_day_night_differs;
- /*
- Whether everything that is mainly located on this block has
- been added to the world.
-
- While this is false, a block can still be changed a bit when
- stuff is added to the neighboring blocks that extends to this
- one.
-
- When this is false on every one of a 3x3x3 chunk of blocks, the
- central one will not be changed by the map generator in the
- future.
-
- TODO: Save in file
- */
- bool m_not_fully_generated;
-
+ // TODO: Remove this
MapBlockObjectList m_objects;
// Object spawning stuff
- float m_spawn_timer;
-
+ //float m_spawn_timer;
+
#ifndef SERVER // Only on client
/*
Set to true if the mesh has been ordered to be updated