From 359a940dde0d0d85b288c8af6b10bccbd021f9c1 Mon Sep 17 00:00:00 2001 From: paramat Date: Tue, 20 Feb 2018 19:32:24 +0000 Subject: SAO limits: Allow SAOs to exist outside the set 'mapgen limit' --- src/content_sao.cpp | 13 ------------- src/map.cpp | 5 ----- src/map.h | 2 -- src/mapgen/mapgen.cpp | 26 ++++---------------------- src/mapgen/mapgen.h | 4 ---- src/serverenvironment.cpp | 3 +-- 6 files changed, 5 insertions(+), 48 deletions(-) diff --git a/src/content_sao.cpp b/src/content_sao.cpp index 247b6df0a..816f47b72 100644 --- a/src/content_sao.cpp +++ b/src/content_sao.cpp @@ -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(&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; diff --git a/src/map.cpp b/src/map.cpp index 054338c92..26fe6662f 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -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( diff --git a/src/map.h b/src/map.h index 5af021e63..f5c7671ae 100644 --- 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(). */ diff --git a/src/mapgen/mapgen.cpp b/src/mapgen/mapgen.cpp index 69aa174da..5e581086f 100644 --- a/src/mapgen/mapgen.cpp +++ b/src/mapgen/mapgen.cpp @@ -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); } diff --git a/src/mapgen/mapgen.h b/src/mapgen/mapgen.h index f97eabf82..6ca907573 100644 --- a/src/mapgen/mapgen.h +++ b/src/mapgen/mapgen.h @@ -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; }; diff --git a/src/serverenvironment.cpp b/src/serverenvironment.cpp index 53d30c4fb..ae0f397ee 100644 --- a/src/serverenvironment.cpp +++ b/src/serverenvironment.cpp @@ -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()); -- cgit v1.2.3