Move player collisionbox to player class
authorsapier <Sapier at GMX dot net>
Tue, 16 Apr 2013 22:15:53 +0000 (00:15 +0200)
committerPilzAdam <pilzadam@minetest.net>
Thu, 25 Apr 2013 16:53:50 +0000 (18:53 +0200)
src/content_sao.cpp
src/localplayer.cpp
src/player.cpp
src/player.h

index 3526ecbd2edffb64fa6fc2978c247a6f19ba8a4b..24a9186f77c0e1e0a8d6d0589f3f873ce36ba830 100644 (file)
@@ -1472,6 +1472,11 @@ std::string PlayerSAO::getPropertyPacket()
 }
 
 bool PlayerSAO::getCollisionBox(aabb3f *toset) {
-       //player collision handling is already done clientside no need to do it twice
-       return false;
+       //update collision box
+       *toset = m_player->getCollisionbox();
+
+       toset->MinEdge += m_base_position;
+       toset->MaxEdge += m_base_position;
+
+       return true;
 }
index 6b7b0943cdc1a3ca6f7961a19fa061c14b8af021..13117d8811b54830ac5856c9fd63d867ba8ce9d6 100644 (file)
@@ -154,9 +154,6 @@ void LocalPlayer::move(f32 dtime, ClientEnvironment *env, f32 pos_max_d,
        // This should always apply, otherwise there are glitches
        assert(d > pos_max_d);
 
-       float player_radius = BS*0.30;
-       float player_height = BS*1.55;
-       
        // Maximum distance over border for sneaking
        f32 sneak_max = BS*0.4;
 
@@ -184,24 +181,12 @@ void LocalPlayer::move(f32 dtime, ClientEnvironment *env, f32 pos_max_d,
                }
        }
 
-       /*
-               Calculate player collision box (new and old)
-       */
-       core::aabbox3d<f32> playerbox(
-               -player_radius,
-               0.0,
-               -player_radius,
-               player_radius,
-               player_height,
-               player_radius
-       );
-
        float player_stepheight = touching_ground ? (BS*0.6) : (BS*0.2);
 
        v3f accel_f = v3f(0,0,0);
 
        collisionMoveResult result = collisionMoveSimple(env, m_gamedef,
-                       pos_max_d, playerbox, player_stepheight, dtime,
+                       pos_max_d, m_collisionbox, player_stepheight, dtime,
                        position, m_speed, accel_f);
 
        /*
index e86b642062277e6ec10ca64702977d5476755df1..d3e16810ff51a738353002288736437e33a3430d 100644 (file)
@@ -42,7 +42,8 @@ Player::Player(IGameDef *gamedef):
        m_pitch(0),
        m_yaw(0),
        m_speed(0,0,0),
-       m_position(0,0,0)
+       m_position(0,0,0),
+       m_collisionbox(-BS*0.30,0.0,-BS*0.30,BS*0.30,BS*1.55,BS*0.30)
 {
        updateName("<not set>");
        inventory.clear();
index 4e5b3af977eb12c8c372cba9639cf2f4652b50ec..fade6de0189b3a72d5942ecf76fabdbb76e4ba17 100644 (file)
@@ -180,6 +180,10 @@ public:
                return m_name;
        }
 
+       core::aabbox3d<f32> getCollisionbox() {
+               return m_collisionbox;
+       }
+
        virtual bool isLocal() const
        { return false; }
        virtual PlayerSAO *getPlayerSAO()
@@ -255,6 +259,7 @@ protected:
        f32 m_yaw;
        v3f m_speed;
        v3f m_position;
+       core::aabbox3d<f32> m_collisionbox;
 };