LuaVoxelManip: Add option to allocate blank data
[oweals/minetest.git] / src / content_sao.cpp
index 9b4ae6100e0eec7d422de0f94f4e4558b7576468..1edddec7b054e507e14597826b5ad0eb3ed3ce28 100644 (file)
@@ -18,6 +18,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 */
 
 #include "content_sao.h"
+#include "util/serialize.h"
+#include "util/mathconstants.h"
 #include "collision.h"
 #include "environment.h"
 #include "settings.h"
@@ -29,8 +31,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "player.h"
 #include "scripting_game.h"
 #include "genericobject.h"
-#include "util/serialize.h"
-#include "util/mathconstants.h"
+#include "log.h"
 
 std::map<u16, ServerActiveObject::Factory> ServerActiveObject::m_types;
 
@@ -191,7 +192,7 @@ public:
        }
 
        ItemSAO(ServerEnvironment *env, v3f pos,
-                       const std::string itemstring):
+                       const std::string &itemstring):
                ServerActiveObject(env, pos),
                m_itemstring(itemstring),
                m_itemstring_changed(false),
@@ -350,7 +351,7 @@ private:
 ItemSAO proto_ItemSAO(NULL, v3f(0,0,0), "");
 
 ServerActiveObject* createItemSAO(ServerEnvironment *env, v3f pos,
-               const std::string itemstring)
+                                  const std::string &itemstring)
 {
        return new ItemSAO(env, pos, itemstring);
 }
@@ -527,8 +528,9 @@ void LuaEntitySAO::step(float dtime, bool send_recommended)
                        m_velocity += dtime * m_acceleration;
                }
 
-               if(m_prop.automatic_face_movement_dir){
-                       m_yaw = atan2(m_velocity.Z,m_velocity.X) * 180 / M_PI;
+               if((m_prop.automatic_face_movement_dir) &&
+                               (fabs(m_velocity.Z) > 0.001 || fabs(m_velocity.X) > 0.001)){
+                       m_yaw = atan2(m_velocity.Z,m_velocity.X) * 180 / M_PI + m_prop.automatic_face_movement_dir_offset;
                }
        }
 
@@ -968,6 +970,8 @@ PlayerSAO::PlayerSAO(ServerEnvironment *env_, Player *player_, u16 peer_id_,
        m_physics_override_speed(1),
        m_physics_override_jump(1),
        m_physics_override_gravity(1),
+       m_physics_override_sneak(true),
+       m_physics_override_sneak_glitch(true),
        m_physics_override_sent(false)
 {
        assert(m_player);
@@ -1024,6 +1028,8 @@ void PlayerSAO::removingFromEnvironment()
        {
                m_player->setPlayerSAO(NULL);
                m_player->peer_id = 0;
+               m_env->savePlayer(m_player->getName());
+               m_env->removePlayer(m_player->getName());
        }
 }
 
@@ -1032,11 +1038,6 @@ bool PlayerSAO::isStaticAllowed() const
        return false;
 }
 
-bool PlayerSAO::unlimitedTransferDistance() const
-{
-       return g_settings->getBool("unlimited_player_transfer_distance");
-}
-
 std::string PlayerSAO::getClientInitializationData(u16 protocol_version)
 {
        std::ostringstream os(std::ios::binary);
@@ -1059,7 +1060,9 @@ std::string PlayerSAO::getClientInitializationData(u16 protocol_version)
                        os<<serializeLongString(gob_cmd_update_bone_position((*ii).first, (*ii).second.X, (*ii).second.Y)); // m_bone_position.size
                }
                os<<serializeLongString(gob_cmd_update_attachment(m_attachment_parent_id, m_attachment_bone, m_attachment_position, m_attachment_rotation)); // 4
-               os<<serializeLongString(gob_cmd_update_physics_override(m_physics_override_speed, m_physics_override_jump, m_physics_override_gravity)); // 5
+               os<<serializeLongString(gob_cmd_update_physics_override(m_physics_override_speed,
+                               m_physics_override_jump, m_physics_override_gravity, m_physics_override_sneak,
+                               m_physics_override_sneak_glitch)); // 5
        }
        else
        {
@@ -1186,7 +1189,9 @@ void PlayerSAO::step(float dtime, bool send_recommended)
 
        if(m_physics_override_sent == false){
                m_physics_override_sent = true;
-               std::string str = gob_cmd_update_physics_override(m_physics_override_speed, m_physics_override_jump, m_physics_override_gravity);
+               std::string str = gob_cmd_update_physics_override(m_physics_override_speed,
+                               m_physics_override_jump, m_physics_override_gravity,
+                               m_physics_override_sneak, m_physics_override_sneak_glitch);
                // create message and add to list
                ActiveObjectMessage aom(getId(), true, str);
                m_messages_out.push_back(aom);