]> git.lizzy.rs Git - minetest.git/blobdiff - src/localplayer.cpp
dofile error reporting for syntax errors
[minetest.git] / src / localplayer.cpp
index a5ce147c1975551468e56305b1d7fd40217d6e72..d06015e0600bff34e1a3632a4930558f8e1c14f7 100644 (file)
@@ -19,7 +19,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 
 #include "localplayer.h"
 
-#include "main.h" // For g_settings
 #include "event.h"
 #include "collision.h"
 #include "gamedef.h"
@@ -43,8 +42,6 @@ LocalPlayer::LocalPlayer(IGameDef *gamedef, const char *name):
        last_pitch(0),
        last_yaw(0),
        last_keyPressed(0),
-       eye_offset_first(v3f(0,0,0)),
-       eye_offset_third(v3f(0,0,0)),
        last_animation(NO_ANIM),
        hotbar_image(""),
        hotbar_selected_image(""),
@@ -60,6 +57,8 @@ LocalPlayer::LocalPlayer(IGameDef *gamedef, const char *name):
        // Initialize hp to 0, so that no hearts will be shown if server
        // doesn't support health points
        hp = 0;
+       eye_offset_first = v3f(0,0,0);
+       eye_offset_third = v3f(0,0,0);
 }
 
 LocalPlayer::~LocalPlayer()
@@ -67,15 +66,13 @@ LocalPlayer::~LocalPlayer()
 }
 
 void LocalPlayer::move(f32 dtime, Environment *env, f32 pos_max_d,
-               std::list<CollisionInfo> *collision_info)
+               std::vector<CollisionInfo> *collision_info)
 {
        Map *map = &env->getMap();
        INodeDefManager *nodemgr = m_gamedef->ndef();
 
        v3f position = getPosition();
 
-       v3f old_speed = m_speed;
-
        // Copy parent position if local player is attached
        if(isAttached)
        {
@@ -89,9 +86,8 @@ void LocalPlayer::move(f32 dtime, Environment *env, f32 pos_max_d,
        bool noclip = m_gamedef->checkLocalPrivilege("noclip") &&
                g_settings->getBool("noclip");
        bool free_move = noclip && fly_allowed && g_settings->getBool("free_move");
-       if(free_move)
-       {
-        position += m_speed * dtime;
+       if (free_move) {
+               position += m_speed * dtime;
                setPosition(position);
                m_sneak_node_exists = false;
                return;
@@ -100,7 +96,7 @@ void LocalPlayer::move(f32 dtime, Environment *env, f32 pos_max_d,
        /*
                Collision detection
        */
-       
+
        bool is_valid_position;
        MapNode node;
        v3s16 pp;
@@ -174,7 +170,7 @@ void LocalPlayer::move(f32 dtime, Environment *env, f32 pos_max_d,
        f32 d = 0.15*BS;
 
        // This should always apply, otherwise there are glitches
-       assert(d > pos_max_d);
+       sanity_check(d > pos_max_d);
 
        // Maximum distance over border for sneaking
        f32 sneak_max = BS*0.4;
@@ -191,7 +187,7 @@ void LocalPlayer::move(f32 dtime, Environment *env, f32 pos_max_d,
                v3f lwn_f = intToFloat(m_sneak_node, BS);
                position.X = rangelim(position.X, lwn_f.X-maxd, lwn_f.X+maxd);
                position.Z = rangelim(position.Z, lwn_f.Z-maxd, lwn_f.Z+maxd);
-               
+
                if(!is_climbing)
                {
                        f32 min_y = lwn_f.Y + 0.5*BS;
@@ -211,7 +207,7 @@ void LocalPlayer::move(f32 dtime, Environment *env, f32 pos_max_d,
 #ifdef __ANDROID__
        player_stepheight += (0.5 * BS);
 #endif
-       
+
        v3f accel_f = v3f(0,0,0);
 
        collisionMoveResult result = collisionMoveSimple(env, m_gamedef,
@@ -226,7 +222,7 @@ void LocalPlayer::move(f32 dtime, Environment *env, f32 pos_max_d,
        */
        bool touching_ground_was = touching_ground;
        touching_ground = result.touching_ground;
-    
+
     //bool standing_on_unloaded = result.standing_on_unloaded;
 
        /*
@@ -277,7 +273,7 @@ void LocalPlayer::move(f32 dtime, Environment *env, f32 pos_max_d,
                        f32 max_axis_distance_f = MYMAX(
                                        fabs(player_p2df.X-node_p2df.X),
                                        fabs(player_p2df.Y-node_p2df.Y));
-                                       
+
                        if(distance_f > min_distance_f ||
                                        max_axis_distance_f > 0.5*BS + sneak_max + 0.1*BS)
                                continue;
@@ -301,7 +297,7 @@ void LocalPlayer::move(f32 dtime, Environment *env, f32 pos_max_d,
                        min_distance_f = distance_f;
                        new_sneak_node = p;
                }
-               
+
                bool sneak_node_found = (min_distance_f < 100000.0*BS*0.9);
 
                m_sneak_node = new_sneak_node;
@@ -314,20 +310,19 @@ void LocalPlayer::move(f32 dtime, Environment *env, f32 pos_max_d,
                if(sneak_node_found && control.sneak)
                        touching_ground = true;
        }
-       
+
        /*
                Set new position
        */
        setPosition(position);
-       
+
        /*
                Report collisions
        */
        bool bouncy_jump = false;
        // Dont report if flying
-       if(collision_info && !(g_settings->getBool("free_move") && fly_allowed))
-       {
-               for(size_t i=0; i<result.collisions.size(); i++){
+       if(collision_info && !(g_settings->getBool("free_move") && fly_allowed)) {
+               for(size_t i=0; i<result.collisions.size(); i++) {
                        const CollisionInfo &info = result.collisions[i];
                        collision_info->push_back(info);
                        if(info.new_speed.Y - info.old_speed.Y > 0.1*BS &&
@@ -367,7 +362,7 @@ void LocalPlayer::move(f32 dtime, Environment *env, f32 pos_max_d,
        */
        m_old_node_below = floatToInt(position - v3f(0,BS/2,0), BS);
        m_old_node_below_type = nodemgr->get(map->getNodeNoEx(m_old_node_below)).name;
-       
+
        /*
                Check properties of the node on which the player is standing
        */
@@ -400,10 +395,10 @@ void LocalPlayer::applyControl(float dtime)
 
        v3f move_direction = v3f(0,0,1);
        move_direction.rotateXZBy(getYaw());
-       
+
        v3f speedH = v3f(0,0,0); // Horizontal (X, Z)
        v3f speedV = v3f(0,0,0); // Vertical (Y)
-       
+
        bool fly_allowed = m_gamedef->checkLocalPrivilege("fly");
        bool fast_allowed = m_gamedef->checkLocalPrivilege("fast");
 
@@ -412,11 +407,12 @@ void LocalPlayer::applyControl(float dtime)
        // When aux1_descends is enabled the fast key is used to go down, so fast isn't possible
        bool fast_climb = fast_move && control.aux1 && !g_settings->getBool("aux1_descends");
        bool continuous_forward = g_settings->getBool("continuous_forward");
+       bool always_fly_fast = g_settings->getBool("always_fly_fast");
 
        // Whether superspeed mode is used or not
        bool superspeed = false;
-       
-       if(g_settings->getBool("always_fly_fast") && free_move && fast_move)
+
+       if (always_fly_fast && free_move && fast_move)
                superspeed = true;
 
        // Old descend control
@@ -425,7 +421,7 @@ void LocalPlayer::applyControl(float dtime)
                // If free movement and fast movement, always move fast
                if(free_move && fast_move)
                        superspeed = true;
-               
+
                // Auxiliary button 1 (E)
                if(control.aux1)
                {
@@ -474,7 +470,7 @@ void LocalPlayer::applyControl(float dtime)
                        if(free_move)
                        {
                                // In free movement mode, sneak descends
-                               if(fast_move && (control.aux1 || g_settings->getBool("always_fly_fast")))
+                               if (fast_move && (control.aux1 || always_fly_fast))
                                        speedV.Y = -movement_speed_fast;
                                else
                                        speedV.Y = -movement_speed_walk;
@@ -521,11 +517,9 @@ void LocalPlayer::applyControl(float dtime)
        }
        if(control.jump)
        {
-               if(free_move)
-               {
-                       if(g_settings->getBool("aux1_descends") || g_settings->getBool("always_fly_fast"))
-                       {
-                               if(fast_move)
+               if (free_move) {
+                       if (g_settings->getBool("aux1_descends") || always_fly_fast) {
+                               if (fast_move)
                                        speedV.Y = movement_speed_fast;
                                else
                                        speedV.Y = movement_speed_walk;
@@ -548,7 +542,7 @@ void LocalPlayer::applyControl(float dtime)
                        {
                                speedJ.Y = movement_speed_jump * physics_override_jump;
                                setSpeed(speedJ);
-                               
+
                                MtEvent *e = new SimpleTriggerEvent("PlayerJump");
                                m_gamedef->event()->put(e);
                        }