- The map
- Players
- Other objects
- - The current time in the game (actually it only contains the brightness)
+ - The current time in the game
- etc.
*/
class Server;
class ActiveBlockModifier;
class ServerActiveObject;
+typedef struct lua_State lua_State;
+class ITextureSource;
+class IGameDef;
class Environment
{
class ServerEnvironment : public Environment
{
public:
- ServerEnvironment(ServerMap *map, Server *server);
+ ServerEnvironment(ServerMap *map, lua_State *L, IGameDef *gamedef);
~ServerEnvironment();
Map & getMap()
- {
- return *m_map;
- }
+ { return *m_map; }
ServerMap & getServerMap()
- {
- return *m_map;
- }
+ { return *m_map; }
- Server * getServer()
+ lua_State* getLua()
+ { return m_lua; }
+
+ IGameDef *getGameDef()
+ { return m_gamedef; }
+
+ float getSendRecommendedInterval()
{
- return m_server;
+ return 0.10;
}
- void step(f32 dtime);
-
/*
Save players
*/
*/
u16 addActiveObject(ServerActiveObject *object);
+ /*
+ Add an active object as a static object to the corresponding
+ MapBlock.
+ Caller allocates memory, ServerEnvironment frees memory.
+ Return value: true if succeeded, false if failed.
+ */
+ bool addActiveObjectAsStatic(ServerActiveObject *object);
+
/*
Find out what new objects have been added to
inside a radius around a position
/*
ActiveBlockModifiers (TODO)
-------------------------------------------
+ NOTE: Not used currently (TODO: Use or remove)
*/
void addActiveBlockModifier(ActiveBlockModifier *abm);
+ /* Other stuff */
+
+ // Clear all objects, loading and going through every MapBlock
+ void clearAllObjects();
+
+ void step(f32 dtime);
+
private:
/*
// The map
ServerMap *m_map;
- // Pointer to server (which is handling this environment)
- Server *m_server;
+ // Lua state
+ lua_State *m_lua;
+ // Game definition
+ IGameDef *m_gamedef;
// Active object list
core::map<u16, ServerActiveObject*> m_active_objects;
// Outgoing network message buffer for active objects
These are fed into ServerEnvironment at initialization time;
ServerEnvironment handles deleting them.
+
+ NOTE: Not used currently (TODO: Use or remove)
*/
class ActiveBlockModifier
class ClientEnvironment : public Environment
{
public:
- ClientEnvironment(ClientMap *map, scene::ISceneManager *smgr);
+ ClientEnvironment(ClientMap *map, scene::ISceneManager *smgr,
+ ITextureSource *texturesource, IGameDef *gamedef);
~ClientEnvironment();
Map & getMap()
virtual void addPlayer(Player *player);
LocalPlayer * getLocalPlayer();
-
- void updateMeshes(v3s16 blockpos);
+
+ // Slightly deprecated
+ void updateMeshes(v3s16 blockpos, ITextureSource *tsrc);
void expireMeshes(bool only_daynight_diffed);
void setTimeOfDay(u32 time)
if(getDayNightRatio() != old_dr)
{
- dout_client<<DTIME<<"ClientEnvironment: DayNightRatio changed"
- <<" -> expiring meshes"<<std::endl;
+ /*infostream<<"ClientEnvironment: DayNightRatio changed"
+ <<" -> expiring meshes"<<std::endl;*/
expireMeshes(true);
}
}
// Get event from queue. CEE_NONE is returned if queue is empty.
ClientEnvEvent getClientEvent();
-
- // Post effects
- void drawPostFx(video::IVideoDriver* driver, v3f camera_pos);
private:
ClientMap *m_map;
scene::ISceneManager *m_smgr;
+ ITextureSource *m_texturesource;
+ IGameDef *m_gamedef;
core::map<u16, ClientActiveObject*> m_active_objects;
Queue<ClientEnvEvent> m_client_event_queue;
IntervalLimiter m_active_object_light_update_interval;