- void setTimeOfDaySpeed(float speed)
- { m_time_of_day_speed = speed; }
-
- float getTimeOfDaySpeed()
- { return m_time_of_day_speed; }
-
-protected:
- // peer_ids in here should be unique, except that there may be many 0s
- std::list<Player*> m_players;
- // Time of day in milli-hours (0-23999); determines day and night
- u32 m_time_of_day;
- // Time of day in 0...1
- float m_time_of_day_f;
- float m_time_of_day_speed;
- // Used to buffer dtime for adding to m_time_of_day
- float m_time_counter;
-};
-
-/*
- Active block modifier interface.
-
- These are fed into ServerEnvironment at initialization time;
- ServerEnvironment handles deleting them.
-*/
-
-class ActiveBlockModifier
-{
-public:
- ActiveBlockModifier(){};
- virtual ~ActiveBlockModifier(){};
-
- // Set of contents to trigger on
- virtual std::set<std::string> getTriggerContents()=0;
- // Set of required neighbors (trigger doesn't happen if none are found)
- // Empty = do not check neighbors
- virtual std::set<std::string> getRequiredNeighbors()
- { return std::set<std::string>(); }
- // Trigger interval in seconds
- virtual float getTriggerInterval() = 0;
- // Random chance of (1 / return value), 0 is disallowed
- virtual u32 getTriggerChance() = 0;
- // This is called usually at interval for 1/chance of the nodes
- virtual void trigger(ServerEnvironment *env, v3s16 p, MapNode n){};
- virtual void trigger(ServerEnvironment *env, v3s16 p, MapNode n,
- u32 active_object_count, u32 active_object_count_wider){};
-};
-
-struct ABMWithState
-{
- ActiveBlockModifier *abm;
- float timer;
-
- ABMWithState(ActiveBlockModifier *abm_);
-};
-
-/*
- List of active blocks, used by ServerEnvironment
-*/
-
-class ActiveBlockList
-{
-public:
- void update(std::list<v3s16> &active_positions,
- s16 radius,
- std::set<v3s16> &blocks_removed,
- std::set<v3s16> &blocks_added);
-
- bool contains(v3s16 p){
- return (m_list.find(p) != m_list.end());
- }
-
- void clear(){
- m_list.clear();
- }
-
- std::set<v3s16> m_list;
-
-private:
-};
-
-class IBackgroundBlockEmerger
-{
-public:
- virtual void queueBlockEmerge(v3s16 blockpos, bool allow_generate)=0;
-};
-
-/*
- The server-side environment.
-
- This is not thread-safe. Server uses an environment mutex.
-*/
-
-class ServerEnvironment : public Environment
-{
-public:
- ServerEnvironment(ServerMap *map, lua_State *L, IGameDef *gamedef,
- IBackgroundBlockEmerger *emerger);
- ~ServerEnvironment();
-
- Map & getMap();
-
- ServerMap & getServerMap();
-
- lua_State* getLua()
- { return m_lua; }
-
- 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);