1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-06-27 16:36:03 +00:00

Preliminary "active block" stuff + set up test code to grow grass.

This commit is contained in:
Perttu Ahola 2011-05-22 17:00:09 +03:00
parent af7d50e910
commit 0af5311538
14 changed files with 848 additions and 383 deletions

View file

@ -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);*/
#ifndef SERVER // Only on client
/*
Generates the FastFaces of a node row. This has a
ridiculous amount of parameters because that way they
can be precalculated by the caller.
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
@ -639,14 +619,30 @@ 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)