- 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);