diff options
author | MirceaKitsune <sonichedgehog_hyperblast00@yahoo.com> | 2012-11-09 16:45:29 +0200 |
---|---|---|
committer | Perttu Ahola <celeron55@gmail.com> | 2012-11-25 19:14:24 +0200 |
commit | 4d656963e42766a7c0250b1e0931638933f1b917 (patch) | |
tree | 7f028579a6f51f9766fdf3d1924b7c5ee5bc1eba /src | |
parent | 9259d028ac99fc699df69ded128df60dece712b9 (diff) | |
download | minetest-4d656963e42766a7c0250b1e0931638933f1b917.tar.gz minetest-4d656963e42766a7c0250b1e0931638933f1b917.tar.bz2 minetest-4d656963e42766a7c0250b1e0931638933f1b917.zip |
Fix more things I forgot for attached players. Such players will now properly see themselves moving when attached, and the server will read their position accordingly
Fix attached players being able to bob their view and generate foostep sounds by pressing a movement key (running in place)
Diffstat (limited to 'src')
-rw-r--r-- | src/content_cao.cpp | 1 | ||||
-rw-r--r-- | src/localplayer.cpp | 23 | ||||
-rw-r--r-- | src/nodedef.cpp | 2 |
3 files changed, 16 insertions, 10 deletions
diff --git a/src/content_cao.cpp b/src/content_cao.cpp index 821862c9b..c3575af1f 100644 --- a/src/content_cao.cpp +++ b/src/content_cao.cpp @@ -1538,7 +1538,6 @@ public: { LocalPlayer *player = m_env->getLocalPlayer(); player->isAttached = true; - player->overridePosition = m_attachment_position; } } } diff --git a/src/localplayer.cpp b/src/localplayer.cpp index ecfa4467c..63400cc29 100644 --- a/src/localplayer.cpp +++ b/src/localplayer.cpp @@ -34,6 +34,8 @@ with this program; if not, write to the Free Software Foundation, Inc., LocalPlayer::LocalPlayer(IGameDef *gamedef): Player(gamedef), + isAttached(false), + overridePosition(v3f(0,0,0)), m_sneak_node(32767,32767,32767), m_sneak_node_exists(false), m_old_node_below(32767,32767,32767), @@ -53,6 +55,12 @@ LocalPlayer::~LocalPlayer() void LocalPlayer::move(f32 dtime, Map &map, f32 pos_max_d, core::list<CollisionInfo> *collision_info) { + INodeDefManager *nodemgr = m_gamedef->ndef(); + + v3f position = getPosition(); + + v3f old_speed = m_speed; + // Copy parent position if local player is attached if(isAttached) { @@ -60,12 +68,6 @@ void LocalPlayer::move(f32 dtime, Map &map, f32 pos_max_d, return; } - INodeDefManager *nodemgr = m_gamedef->ndef(); - - v3f position = getPosition(); - - v3f old_speed = m_speed; - // Skip collision detection if a special movement mode is used bool fly_allowed = m_gamedef->checkLocalPrivilege("fly"); bool free_move = fly_allowed && g_settings->getBool("free_move"); @@ -359,7 +361,14 @@ void LocalPlayer::applyControl(float dtime) setPitch(control.pitch); setYaw(control.yaw); - + + // Nullify speed and don't run positioning code if the player is attached + if(isAttached) + { + setSpeed(v3f(0,0,0)); + return; + } + v3f move_direction = v3f(0,0,1); move_direction.rotateXZBy(getYaw()); diff --git a/src/nodedef.cpp b/src/nodedef.cpp index 53deea11b..180219ba8 100644 --- a/src/nodedef.cpp +++ b/src/nodedef.cpp @@ -254,7 +254,6 @@ void ContentFeatures::serialize(std::ostream &os) os<<serializeString(liquid_alternative_flowing); os<<serializeString(liquid_alternative_source); writeU8(os, liquid_viscosity); - writeU8(os, liquid_renewable); writeU8(os, light_source); writeU32(os, damage_per_second); node_box.serialize(os); @@ -312,7 +311,6 @@ void ContentFeatures::deSerialize(std::istream &is) liquid_alternative_flowing = deSerializeString(is); liquid_alternative_source = deSerializeString(is); liquid_viscosity = readU8(is); - liquid_renewable = readU8(is); light_source = readU8(is); damage_per_second = readU32(is); node_box.deSerialize(is); |