diff --git a/src/content_sao.cpp b/src/content_sao.cpp index 3526ecbd2edffb64fa6fc2978c247a6f19ba8a4b..24a9186f77c0e1e0a8d6d0589f3f873ce36ba830 100644 --- a/src/content_sao.cpp +++ b/src/content_sao.cpp @@ -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; } diff --git a/src/localplayer.cpp b/src/localplayer.cpp index 6b7b0943cdc1a3ca6f7961a19fa061c14b8af021..13117d8811b54830ac5856c9fd63d867ba8ce9d6 100644 --- a/src/localplayer.cpp +++ b/src/localplayer.cpp @@ -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); /* diff --git a/src/player.cpp b/src/player.cpp index e86b642062277e6ec10ca64702977d5476755df1..d3e16810ff51a738353002288736437e33a3430d 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -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(); diff --git a/src/player.h b/src/player.h index 4e5b3af977eb12c8c372cba9639cf2f4652b50ec..fade6de0189b3a72d5942ecf76fabdbb76e4ba17 100644 --- a/src/player.h +++ b/src/player.h @@ -180,6 +180,10 @@ class Player return m_name; } + core::aabbox3d<f32> getCollisionbox() { + return m_collisionbox; + } + virtual bool isLocal() const { return false; } virtual PlayerSAO *getPlayerSAO() @@ -255,6 +259,7 @@ class Player f32 m_yaw; v3f m_speed; v3f m_position; + core::aabbox3d<f32> m_collisionbox; };