]> git.lizzy.rs Git - minetest.git/blobdiff - src/serverenvironment.h
Android: Increase minimum SDK version to 21
[minetest.git] / src / serverenvironment.h
index 00184421eb1bbd481b541f2927599fc03ff5256d..bb40a33ce221c09bbfb5eda439fcc238fa2fab86 100644 (file)
@@ -21,7 +21,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 
 #include "activeobject.h"
 #include "environment.h"
-#include "mapnode.h"
+#include "map.h"
 #include "settings.h"
 #include "server/activeobjectmgr.h"
 #include "util/numeric.h"
@@ -30,9 +30,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include <random>
 
 class IGameDef;
-class ServerMap;
 struct GameParams;
-class MapBlock;
 class RemotePlayer;
 class PlayerDatabase;
 class AuthDatabase;
@@ -95,7 +93,8 @@ struct LoadingBlockModifierDef
 
        virtual ~LoadingBlockModifierDef() = default;
 
-       virtual void trigger(ServerEnvironment *env, v3s16 p, MapNode n){};
+       virtual void trigger(ServerEnvironment *env, v3s16 p,
+                       MapNode n, float dtime_s) {};
 };
 
 struct LBMContentMapping
@@ -129,7 +128,8 @@ class LBMManager
        std::string createIntroductionTimesString();
 
        // Don't call this before loadIntroductionTimes() ran.
-       void applyLBMs(ServerEnvironment *env, MapBlock *block, u32 stamp);
+       void applyLBMs(ServerEnvironment *env, MapBlock *block,
+                       u32 stamp, float dtime_s);
 
        // Warning: do not make this std::unordered_map, order is relevant here
        typedef std::map<u32, LBMContentMapping> lbm_lookup_map;
@@ -191,6 +191,16 @@ class ActiveBlockList
        std::set<v3s16> m_forceloaded_list;
 };
 
+/*
+       ServerEnvironment::m_on_mapblocks_changed_receiver
+*/
+struct OnMapblocksChangedReceiver : public MapEventReceiver {
+       std::unordered_set<v3s16> modified_blocks;
+       bool receiving = false;
+
+       void onMapEditEvent(const MapEditEvent &event) override;
+};
+
 /*
        Operation mode for ServerEnvironment::clearObjects()
 */
@@ -203,13 +213,15 @@ enum ClearObjectsMode {
                CLEAR_OBJECTS_MODE_QUICK,
 };
 
-class ServerEnvironment : public Environment
+class ServerEnvironment final : public Environment
 {
 public:
-       ServerEnvironment(ServerMap *map, ServerScripting *scriptIface,
+       ServerEnvironment(ServerMap *map, ServerScripting *script_iface,
                Server *server, const std::string &path_world, MetricsBackend *mb);
        ~ServerEnvironment();
 
+       void init();
+
        Map & getMap();
 
        ServerMap & getServerMap();
@@ -451,6 +463,8 @@ class ServerEnvironment : public Environment
        Server *m_server;
        // Active Object Manager
        server::ActiveObjectMgr m_ao_manager;
+       // on_mapblocks_changed map event receiver
+       OnMapblocksChangedReceiver m_on_mapblocks_changed_receiver;
        // World path
        const std::string m_path_world;
        // Outgoing network message buffer for active objects
@@ -460,7 +474,7 @@ class ServerEnvironment : public Environment
        IntervalLimiter m_object_management_interval;
        // List of active blocks
        ActiveBlockList m_active_blocks;
-       bool m_force_update_active_blocks = false;
+       int m_fast_active_block_divider = 1;
        IntervalLimiter m_active_blocks_mgmt_interval;
        IntervalLimiter m_active_block_modifier_interval;
        IntervalLimiter m_active_blocks_nodemetadata_interval;