aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBlockMen <nmuelll@web.de>2014-05-03 10:50:49 +0200
committerBlockMen <nmuelll@web.de>2014-05-03 10:50:49 +0200
commitcfb26629bffa8732df5f860d493e5cb039c620dd (patch)
tree9f65dc7ee81fde87372b4b29b2a30d9bd9fdc181
parent9370f5657a498c7fde00eddf4c8e78e8c3a42c7a (diff)
downloadminetest-cfb26629bffa8732df5f860d493e5cb039c620dd.tar.gz
minetest-cfb26629bffa8732df5f860d493e5cb039c620dd.tar.bz2
minetest-cfb26629bffa8732df5f860d493e5cb039c620dd.zip
Fix player:set_animation() in third person view
-rw-r--r--src/content_cao.cpp38
1 files changed, 20 insertions, 18 deletions
diff --git a/src/content_cao.cpp b/src/content_cao.cpp
index 10aa22e7e..fdb700795 100644
--- a/src/content_cao.cpp
+++ b/src/content_cao.cpp
@@ -1101,12 +1101,15 @@ public:
v2s32 new_anim = v2s32(0,0);
bool allow_update = false;
- if(!player->touching_ground &&
+ // increase speed if using fast or flying fast
+ if((g_settings->getBool("fast_move") &&
+ m_gamedef->checkLocalPrivilege("fast")) &&
+ (controls.aux1 ||
+ (!player->touching_ground &&
g_settings->getBool("free_move") &&
- m_gamedef->checkLocalPrivilege("fly") &&
- g_settings->getBool("fast_move") &&
- m_gamedef->checkLocalPrivilege("fast"))
- new_speed *= 1.5;
+ m_gamedef->checkLocalPrivilege("fly"))))
+ new_speed *= 1.5;
+ // slowdown speed if sneeking
if(controls.sneak && walking)
new_speed /= 2;
@@ -1121,20 +1124,18 @@ public:
player->last_animation = DIG_ANIM;
}
- if ((new_anim.X + new_anim.Y) > 0) {
+ // Apply animations if input detected and not attached
+ // or set idle animation
+ if ((new_anim.X + new_anim.Y) > 0 && !player->isAttached) {
allow_update = true;
m_animation_range = new_anim;
m_animation_speed = new_speed;
player->last_animation_speed = m_animation_speed;
} else {
player->last_animation = NO_ANIM;
- }
- // reset animation when no input detected
- if (!walking && !controls.LMB && !controls.RMB) {
- player->last_animation = NO_ANIM;
if (old_anim != NO_ANIM) {
m_animation_range = player->local_animations[0];
- updateAnimation();
+ updateAnimation();
}
}
@@ -1798,14 +1799,15 @@ public:
m_animation_blend = readF1000(is);
}
// update animation only if local animations present
- // and received animation is not unknown
- int frames = 0;
- for (int i = 0;i<4;i++) {
- frames += (int)player->local_animations[i].Y;
+ // and received animation is unknown (except idle animation)
+ bool is_known = false;
+ for (int i = 1;i<4;i++) {
+ if(m_animation_range.Y == player->local_animations[i].Y)
+ is_known = true;
}
- if(frames < 1) {
- player->last_animation = NO_ANIM;
- updateAnimation();
+ if(!is_known ||
+ (player->local_animations[1].Y + player->local_animations[2].Y < 1)) {
+ updateAnimation();
}
}
}