[CSM] Don't Load the package library (#6944)
[oweals/minetest.git] / src / content_sao.cpp
index e2bfdbef2450998bab56d0f1c5588f5cfec66f78..1fb74263ba4b4cb701b3ed5a2bccfcd652832e8b 100644 (file)
@@ -28,6 +28,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "server.h"
 #include "scripting_server.h"
 #include "genericobject.h"
+#include "settings.h"
 #include <algorithm>
 
 std::map<u16, ServerActiveObject::Factory> ServerActiveObject::m_types;
@@ -372,20 +373,20 @@ void LuaEntitySAO::step(float dtime, bool send_recommended)
                        m_velocity += dtime * m_acceleration;
                }
 
-               if((m_prop.automatic_face_movement_dir) &&
-                               (fabs(m_velocity.Z) > 0.001 || fabs(m_velocity.X) > 0.001))
-               {
-                       float optimal_yaw = atan2(m_velocity.Z,m_velocity.X) * 180 / M_PI
-                                       + m_prop.automatic_face_movement_dir_offset;
+               if (m_prop.automatic_face_movement_dir &&
+                               (fabs(m_velocity.Z) > 0.001 || fabs(m_velocity.X) > 0.001)) {
+
+                       float target_yaw = atan2(m_velocity.Z, m_velocity.X) * 180 / M_PI
+                               + m_prop.automatic_face_movement_dir_offset;
                        float max_rotation_delta =
                                        dtime * m_prop.automatic_face_movement_max_rotation_per_sec;
+                       float delta = wrapDegrees_0_360(target_yaw - m_yaw);
 
-                       if ((m_prop.automatic_face_movement_max_rotation_per_sec > 0) &&
-                               (fabs(m_yaw - optimal_yaw) > max_rotation_delta)) {
-
-                               m_yaw = optimal_yaw < m_yaw ? m_yaw - max_rotation_delta : m_yaw + max_rotation_delta;
+                       if (delta > max_rotation_delta && 360 - delta > max_rotation_delta) {
+                               m_yaw += (delta < 180) ? max_rotation_delta : -max_rotation_delta;
+                               m_yaw = wrapDegrees_0_360(m_yaw);
                        } else {
-                               m_yaw = optimal_yaw;
+                               m_yaw = target_yaw;
                        }
                }
        }
@@ -801,7 +802,7 @@ PlayerSAO::PlayerSAO(ServerEnvironment *env_, RemotePlayer *player_, session_t p
        m_prop.collisionbox = aabb3f(-0.3f, 0.0f, -0.3f, 0.3f, 1.77f, 0.3f);
        m_prop.selectionbox = aabb3f(-0.3f, 0.0f, -0.3f, 0.3f, 1.77f, 0.3f);
        m_prop.pointable = true;
-       // start of default appearance, this should be overwritten by LUA
+       // Start of default appearance, this should be overwritten by Lua
        m_prop.visual = "upright_sprite";
        m_prop.visual_size = v2f(1, 2);
        m_prop.textures.clear();
@@ -811,13 +812,14 @@ PlayerSAO::PlayerSAO(ServerEnvironment *env_, RemotePlayer *player_, session_t p
        m_prop.colors.emplace_back(255, 255, 255, 255);
        m_prop.spritediv = v2s16(1,1);
        m_prop.eye_height = 1.625f;
-       // end of default appearance
+       // End of default appearance
        m_prop.is_visible = true;
        m_prop.makes_footstep_sound = true;
        m_prop.stepheight = PLAYER_DEFAULT_STEPHEIGHT * BS;
-       m_prop.can_zoom = true;
        m_hp = m_prop.hp_max;
        m_breath = m_prop.breath_max;
+       // Disable zoom in survival mode using a value of 0
+       m_prop.zoom_fov = g_settings->getBool("creative_mode") ? 15.0f : 0.0f;
 }
 
 PlayerSAO::~PlayerSAO()