SAO limits: Allow SAOs to exist outside the set 'mapgen limit'
authorparamat <paramat@users.noreply.github.com>
Tue, 20 Feb 2018 19:32:24 +0000 (19:32 +0000)
committerparamat <mat.gregory@virginmedia.com>
Mon, 26 Feb 2018 17:21:45 +0000 (17:21 +0000)
src/content_sao.cpp
src/map.cpp
src/map.h
src/mapgen/mapgen.cpp
src/mapgen/mapgen.h
src/serverenvironment.cpp

index 247b6df0ab9bcaa669a79c801945622932fa7186..816f47b723b8c7b9439180748c67b0ee0da48000 100644 (file)
@@ -395,19 +395,6 @@ void LuaEntitySAO::step(float dtime, bool send_recommended)
                m_env->getScriptIface()->luaentity_Step(m_id, dtime);
        }
 
-       // Remove LuaEntity beyond terrain edges
-       {
-               ServerMap *map = dynamic_cast<ServerMap *>(&m_env->getMap());
-               assert(map);
-               if (!m_pending_removal &&
-                               map->saoPositionOverLimit(m_base_position)) {
-                       infostream << "Removing SAO " << m_id << "(" << m_init_name
-                               << "), outside of limits" << std::endl;
-                       m_pending_removal = true;
-                       return;
-               }
-       }
-
        if (!send_recommended)
                return;
 
index 054338c926653d84d0558797e7ebfd64fa797cc5..26fe6662faf9784c2fb867dd59ddd06eb8834e76 100644 (file)
@@ -1261,11 +1261,6 @@ s16 ServerMap::getWaterLevel()
        return getMapgenParams()->water_level;
 }
 
-bool ServerMap::saoPositionOverLimit(const v3f &p)
-{
-       return getMapgenParams()->saoPosOverLimit(p);
-}
-
 bool ServerMap::blockpos_over_mapgen_limit(v3s16 p)
 {
        const s16 mapgen_limit_bp = rangelim(
index 5af021e63b1a017dc5f546809a1e89050e64f9ac..f5c7671aee5c2eced040e31674e97b7744e28a84 100644 (file)
--- a/src/map.h
+++ b/src/map.h
@@ -350,8 +350,6 @@ public:
        */
        MapSector *createSector(v2s16 p);
 
-       bool saoPositionOverLimit(const v3f &p);
-
        /*
                Blocks are generated by using these and makeBlock().
        */
index 69aa174dab45f274d616eec81e2ea72ded9d9a62..5e581086f5399f3aa9a773fd0d9fab09595dde4d 100644 (file)
@@ -1079,13 +1079,11 @@ void MapgenParams::writeParams(Settings *settings) const
                bparams->writeParams(settings);
 }
 
-// Calculate edges of outermost generated mapchunks (less than
-// 'mapgen_limit'), and corresponding exact limits for SAO entities.
+
+// Calculate exact edges of the outermost mapchunks that are within the
+// set 'mapgen_limit'.
 void MapgenParams::calcMapgenEdges()
 {
-       if (m_mapgen_edges_calculated)
-               return;
-
        // Central chunk offset, in blocks
        s16 ccoff_b = -chunksize / 2;
        // Chunksize, in nodes
@@ -1110,31 +1108,15 @@ void MapgenParams::calcMapgenEdges()
        // Mapgen edges, in nodes
        mapgen_edge_min = ccmin - numcmin * csize_n;
        mapgen_edge_max = ccmax + numcmax * csize_n;
-       // SAO position limits, in Irrlicht units
-       m_sao_limit_min = mapgen_edge_min * BS - 3.0f;
-       m_sao_limit_max = mapgen_edge_max * BS + 3.0f;
 
        m_mapgen_edges_calculated = true;
 }
 
 
-bool MapgenParams::saoPosOverLimit(const v3f &p)
+s32 MapgenParams::getSpawnRangeMax()
 {
        if (!m_mapgen_edges_calculated)
                calcMapgenEdges();
 
-       return p.X < m_sao_limit_min ||
-               p.X > m_sao_limit_max ||
-               p.Y < m_sao_limit_min ||
-               p.Y > m_sao_limit_max ||
-               p.Z < m_sao_limit_min ||
-               p.Z > m_sao_limit_max;
-}
-
-
-s32 MapgenParams::getSpawnRangeMax()
-{
-       calcMapgenEdges();
-
        return MYMIN(-mapgen_edge_min, mapgen_edge_max);
 }
index f97eabf82babb29c810b333816bd0f1d3e91e713..6ca907573e2055b726f91b52136832ee4acdb7c7 100644 (file)
@@ -139,14 +139,10 @@ struct MapgenParams {
        virtual void readParams(const Settings *settings);
        virtual void writeParams(Settings *settings) const;
 
-       bool saoPosOverLimit(const v3f &p);
        s32 getSpawnRangeMax();
 
 private:
        void calcMapgenEdges();
-
-       float m_sao_limit_min = -MAX_MAP_GENERATION_LIMIT * BS;
-       float m_sao_limit_max = MAX_MAP_GENERATION_LIMIT * BS;
        bool m_mapgen_edges_calculated = false;
 };
 
index 53d30c4fb2b75d20bfc43e3a647e513e4925bf28..ae0f397eeedfc2cc12f250f2fcc11e360cb911b4 100644 (file)
@@ -567,8 +567,7 @@ PlayerSAO *ServerEnvironment::loadPlayer(RemotePlayer *player, bool *new_player,
                // If the player exists, ensure that they respawn inside legal bounds
                // This fixes an assert crash when the player can't be added
                // to the environment
-               ServerMap &map = getServerMap();
-               if (map.getMapgenParams()->saoPosOverLimit(playersao->getBasePosition())) {
+               if (objectpos_over_limit(playersao->getBasePosition())) {
                        actionstream << "Respawn position for player \""
                                << player->getName() << "\" outside limits, resetting" << std::endl;
                        playersao->setBasePosition(m_server->findSpawnPos());