]> git.lizzy.rs Git - minetest.git/blobdiff - src/content_sao.cpp
make ret variable in /builtin/mainmenu/tab_credits.lua local (#5942)
[minetest.git] / src / content_sao.cpp
index 81c6902f58b4c2b438ac38b157fa3122d0ea8e49..90d830ce3edb65ec37dbe5cb91e67f9ee6d78f6c 100644 (file)
@@ -213,7 +213,7 @@ void UnitSAO::removeAttachmentChild(int child_id)
        m_attachment_child_ids.erase(child_id);
 }
 
-const UNORDERED_SET<int> &UnitSAO::getAttachmentChildIds()
+const std::unordered_set<int> &UnitSAO::getAttachmentChildIds()
 {
        return m_attachment_child_ids;
 }
@@ -263,7 +263,7 @@ LuaEntitySAO::~LuaEntitySAO()
                m_env->getScriptIface()->luaentity_Remove(m_id);
        }
 
-       for (UNORDERED_SET<u32>::iterator it = m_attached_particle_spawners.begin();
+       for (std::unordered_set<u32>::iterator it = m_attached_particle_spawners.begin();
                it != m_attached_particle_spawners.end(); ++it) {
                m_env->deleteParticleSpawner(*it, false);
        }
@@ -406,6 +406,20 @@ 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_deactivation &&
+                               map->saoPositionOverLimit(m_base_position)) {
+                       infostream << "Remove SAO " << m_id << "(" << m_init_name
+                               << "), outside of limits" << std::endl;
+                       m_pending_deactivation = true;
+                       m_removed = true;
+                       return;
+               }
+       }
+
        if(send_recommended == false)
                return;
 
@@ -447,7 +461,7 @@ void LuaEntitySAO::step(float dtime, bool send_recommended)
 
        if(m_bone_position_sent == false){
                m_bone_position_sent = true;
-               for (UNORDERED_MAP<std::string, core::vector2d<v3f> >::const_iterator
+               for (std::unordered_map<std::string, core::vector2d<v3f>>::const_iterator
                                ii = m_bone_position.begin(); ii != m_bone_position.end(); ++ii){
                        std::string str = gob_cmd_update_bone_position((*ii).first,
                                        (*ii).second.X, (*ii).second.Y);
@@ -484,7 +498,7 @@ std::string LuaEntitySAO::getClientInitializationData(u16 protocol_version)
        msg_os << serializeLongString(gob_cmd_update_armor_groups(m_armor_groups)); // 2
        msg_os << serializeLongString(gob_cmd_update_animation(
                m_animation_range, m_animation_speed, m_animation_blend, m_animation_loop)); // 3
-       for (UNORDERED_MAP<std::string, core::vector2d<v3f> >::const_iterator
+       for (std::unordered_map<std::string, core::vector2d<v3f>>::const_iterator
                        ii = m_bone_position.begin(); ii != m_bone_position.end(); ++ii) {
                msg_os << serializeLongString(gob_cmd_update_bone_position((*ii).first,
                                (*ii).second.X, (*ii).second.Y)); // m_bone_position.size
@@ -492,7 +506,7 @@ std::string LuaEntitySAO::getClientInitializationData(u16 protocol_version)
        msg_os << serializeLongString(gob_cmd_update_attachment(m_attachment_parent_id,
                m_attachment_bone, m_attachment_position, m_attachment_rotation)); // 4
        int message_count = 4 + m_bone_position.size();
-       for (UNORDERED_SET<int>::const_iterator ii = m_attachment_child_ids.begin();
+       for (std::unordered_set<int>::const_iterator ii = m_attachment_child_ids.begin();
                        (ii != m_attachment_child_ids.end()); ++ii) {
                if (ServerActiveObject *obj = m_env->getActiveObject(*ii)) {
                        message_count++;
@@ -798,7 +812,7 @@ PlayerSAO::PlayerSAO(ServerEnvironment *env_, RemotePlayer *player_, u16 peer_id
        m_prop.hp_max = PLAYER_MAX_HP;
        m_prop.physical = false;
        m_prop.weight = 75;
-       m_prop.collisionbox = aabb3f(-1/3.,-1.0,-1/3., 1/3.,1.0,1/3.);
+       m_prop.collisionbox = aabb3f(-0.3f, -1.0f, -0.3f, 0.3f, 0.75f, 0.3f);
        // start of default appearance, this should be overwritten by LUA
        m_prop.visual = "upright_sprite";
        m_prop.visual_size = v2f(1, 2);
@@ -854,7 +868,7 @@ void PlayerSAO::removingFromEnvironment()
        ServerActiveObject::removingFromEnvironment();
        if (m_player->getPlayerSAO() == this) {
                unlinkPlayerSessionAndSave();
-               for (UNORDERED_SET<u32>::iterator it = m_attached_particle_spawners.begin();
+               for (std::unordered_set<u32>::iterator it = m_attached_particle_spawners.begin();
                        it != m_attached_particle_spawners.end(); ++it) {
                        m_env->deleteParticleSpawner(*it, false);
                }
@@ -879,7 +893,7 @@ std::string PlayerSAO::getClientInitializationData(u16 protocol_version)
        msg_os << serializeLongString(gob_cmd_update_armor_groups(m_armor_groups)); // 2
        msg_os << serializeLongString(gob_cmd_update_animation(
                m_animation_range, m_animation_speed, m_animation_blend, m_animation_loop)); // 3
-       for (UNORDERED_MAP<std::string, core::vector2d<v3f> >::const_iterator
+       for (std::unordered_map<std::string, core::vector2d<v3f>>::const_iterator
                        ii = m_bone_position.begin(); ii != m_bone_position.end(); ++ii) {
                msg_os << serializeLongString(gob_cmd_update_bone_position((*ii).first,
                        (*ii).second.X, (*ii).second.Y)); // m_bone_position.size
@@ -892,7 +906,7 @@ std::string PlayerSAO::getClientInitializationData(u16 protocol_version)
        // (GENERIC_CMD_UPDATE_NAMETAG_ATTRIBUTES) : Deprecated, for backwards compatibility only.
        msg_os << serializeLongString(gob_cmd_update_nametag_attributes(m_prop.nametag_color)); // 6
        int message_count = 6 + m_bone_position.size();
-       for (UNORDERED_SET<int>::const_iterator ii = m_attachment_child_ids.begin();
+       for (std::unordered_set<int>::const_iterator ii = m_attachment_child_ids.begin();
                        ii != m_attachment_child_ids.end(); ++ii) {
                if (ServerActiveObject *obj = m_env->getActiveObject(*ii)) {
                        message_count++;
@@ -1069,7 +1083,7 @@ void PlayerSAO::step(float dtime, bool send_recommended)
 
        if (!m_bone_position_sent) {
                m_bone_position_sent = true;
-               for (UNORDERED_MAP<std::string, core::vector2d<v3f> >::const_iterator
+               for (std::unordered_map<std::string, core::vector2d<v3f>>::const_iterator
                                ii = m_bone_position.begin(); ii != m_bone_position.end(); ++ii) {
                        std::string str = gob_cmd_update_bone_position((*ii).first,
                                        (*ii).second.X, (*ii).second.Y);
@@ -1428,7 +1442,8 @@ bool PlayerSAO::checkMovementCheat()
 
 bool PlayerSAO::getCollisionBox(aabb3f *toset) const
 {
-       *toset = aabb3f(-BS * 0.30, 0.0, -BS * 0.30, BS * 0.30, BS * 1.75, BS * 0.30);
+       *toset = aabb3f(-0.3f * BS, 0.0f, -0.3f * BS, 0.3f * BS, 1.75f * BS, 0.3f * BS);
+
        toset->MinEdge += m_base_position;
        toset->MaxEdge += m_base_position;
        return true;