- This is not thread-safe. Server uses an environment mutex.
-*/
-
-class ServerEnvironment : public Environment
-{
-public:
- ServerEnvironment(ServerMap *map, ScriptApi *iface, IGameDef *gamedef,
- IBackgroundBlockEmerger *emerger);
- ~ServerEnvironment();
-
- Map & getMap();
-
- ServerMap & getServerMap();
-
- //TODO find way to remove this fct!
- ScriptApi* getScriptIface()
- { return m_script; }
-
- IGameDef *getGameDef()
- { return m_gamedef; }
-
- float getSendRecommendedInterval()
- { return m_recommended_send_interval; }
-
- /*
- Save players
- */
- void serializePlayers(const std::string &savedir);
- void deSerializePlayers(const std::string &savedir);
-
- /*
- Save and load time of day and game timer
- */
- void saveMeta(const std::string &savedir);
- void loadMeta(const std::string &savedir);
-
- /*
- External ActiveObject interface
- -------------------------------------------
- */
-
- ServerActiveObject* getActiveObject(u16 id);
-
- /*
- Add an active object to the environment.
- Environment handles deletion of object.
- Object may be deleted by environment immediately.
- If id of object is 0, assigns a free id to it.
- Returns the id of the object.
- Returns 0 if not added and thus deleted.
- */
- 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.
- (note: not used, pending removal from engine)
- */
- //bool addActiveObjectAsStatic(ServerActiveObject *object);
-
- /*
- Find out what new objects have been added to
- inside a radius around a position
- */
- void getAddedActiveObjects(v3s16 pos, s16 radius,
- std::set<u16> ¤t_objects,
- std::set<u16> &added_objects);
-
- /*
- Find out what new objects have been removed from
- inside a radius around a position
- */
- void getRemovedActiveObjects(v3s16 pos, s16 radius,
- std::set<u16> ¤t_objects,
- std::set<u16> &removed_objects);
-
- /*
- Get the next message emitted by some active object.
- Returns a message with id=0 if no messages are available.
- */
- ActiveObjectMessage getActiveObjectMessage();
-
- /*
- Activate objects and dynamically modify for the dtime determined
- from timestamp and additional_dtime
- */
- void activateBlock(MapBlock *block, u32 additional_dtime=0);
-
- /*
- ActiveBlockModifiers
- -------------------------------------------
- */
-
- void addActiveBlockModifier(ActiveBlockModifier *abm);
-
- /*
- Other stuff
- -------------------------------------------
- */
-
- // Script-aware node setters
- bool setNode(v3s16 p, const MapNode &n);
- bool removeNode(v3s16 p);
-
- // Find all active objects inside a radius around a point
- std::set<u16> getObjectsInsideRadius(v3f pos, float radius);
-
- // Clear all objects, loading and going through every MapBlock
- void clearAllObjects();
-
- // This makes stuff happen
- void step(f32 dtime);
-
- //check if there's a line of sight between two positions
- bool line_of_sight(v3f pos1, v3f pos2, float stepsize=1.0);
-
- u32 getGameTime() { return m_game_time; }
-
- void reportMaxLagEstimate(float f) { m_max_lag_estimate = f; }
- float getMaxLagEstimate() { return m_max_lag_estimate; }
-private:
-
- /*
- Internal ActiveObject interface
- -------------------------------------------
- */
-
- /*
- Add an active object to the environment.
-
- Called by addActiveObject.
-
- Object may be deleted by environment immediately.
- If id of object is 0, assigns a free id to it.
- Returns the id of the object.
- Returns 0 if not added and thus deleted.
- */
- u16 addActiveObjectRaw(ServerActiveObject *object, bool set_changed, u32 dtime_s);
-
- /*
- Remove all objects that satisfy (m_removed && m_known_by_count==0)
- */
- void removeRemovedObjects();
-
- /*
- Convert stored objects from block to active
- */
- void activateObjects(MapBlock *block, u32 dtime_s);
-
- /*
- Convert objects that are not in active blocks to static.
-
- If m_known_by_count != 0, active object is not deleted, but static
- data is still updated.
-
- If force_delete is set, active object is deleted nevertheless. It
- shall only be set so in the destructor of the environment.
- */
- void deactivateFarObjects(bool force_delete);
-
- /*
- Member variables
- */
-
- // The map
- ServerMap *m_map;
- // Lua state
- ScriptApi* m_script;
- // Game definition