Skip to content
Permalink
Browse files

Step height: Add as a player object property

Add settable player step height using the existing object property.
Breaks compatibility with old clients, add to protocol version 35.
  • Loading branch information
paramat committed Aug 9, 2017
1 parent 7cd1251 commit 3d0e8a691ff97a148f8c106bc23875df02226f9c
Showing with 20 additions and 3 deletions.
  1. +3 −0 src/constants.h
  2. +5 −0 src/content_cao.h
  3. +1 −0 src/content_sao.cpp
  4. +9 −3 src/localplayer.cpp
  5. +2 −0 src/network/networkprotocol.h
@@ -80,6 +80,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
// the main loop (related to TempMods and day/night)
//#define MAP_BLOCKSIZE 32

// Player step height in nodes
#define PLAYER_DEFAULT_STEPHEIGHT 0.6f

/*
Old stuff that shouldn't be hardcoded
*/
@@ -147,6 +147,11 @@ class GenericCAO : public ClientActiveObject

scene::IAnimatedMeshSceneNode *getAnimatedMeshSceneNode();

inline f32 getStepHeight() const
{
return m_prop.stepheight;
}

inline bool isLocalPlayer() const
{
return m_is_local_player;
@@ -799,6 +799,7 @@ PlayerSAO::PlayerSAO(ServerEnvironment *env_, RemotePlayer *player_, u16 peer_id
// end of default appearance
m_prop.is_visible = true;
m_prop.makes_footstep_sound = true;
m_prop.stepheight = PLAYER_DEFAULT_STEPHEIGHT * BS;
m_hp = PLAYER_MAX_HP;
}

@@ -279,9 +279,15 @@ void LocalPlayer::move(f32 dtime, Environment *env, f32 pos_max_d,
// This should always apply, otherwise there are glitches
sanity_check(d > pos_max_d);

// TODO: this shouldn't be hardcoded but transmitted from server
float player_stepheight = (touching_ground) ? (BS * 0.6f) : (BS * 0.2f);

// Player object property step height is multiplied by BS in
// /src/script/common/c_content.cpp and /src/content_sao.cpp
float player_stepheight = (m_cao == nullptr) ? 0.0f :
(touching_ground ? m_cao->getStepHeight() : (0.2f * BS));

// TODO this is a problematic hack.
// Use a better implementation for autojump, or apply a custom stepheight
// to all players, as this currently creates unintended special movement
// abilities and advantages for Android players on a server.
#ifdef __ANDROID__
player_stepheight += (0.6f * BS);
#endif
@@ -174,6 +174,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
Add settable player collisionbox. Breaks compatibility with older
clients as a 1-node vertical offset has been removed from player's
position
Add settable player stepheight using existing object property.
Breaks compatibility with older clients.
*/

#define LATEST_PROTOCOL_VERSION 35

0 comments on commit 3d0e8a6

Please sign in to comment.