From 394284d0f839bf4c135e842534161c8505112c97 Mon Sep 17 00:00:00 2001 From: scrawl Date: Sat, 22 Mar 2014 00:46:47 +0100 Subject: [PATCH 1/2] Fixes #1209: Tarhiel never falls There are a few pitfalls with this code: - Gravity is only considered when applying queued movement. Therefore, make sure to queue some movement every frame. (Could be refactored in the future?) - The character controller never detects being in free fall (!World::isOnGround) unless movement has been applied. --- apps/openmw/mwmechanics/character.cpp | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/apps/openmw/mwmechanics/character.cpp b/apps/openmw/mwmechanics/character.cpp index 04d909b49..2db3bacf0 100644 --- a/apps/openmw/mwmechanics/character.cpp +++ b/apps/openmw/mwmechanics/character.cpp @@ -1245,12 +1245,8 @@ void CharacterController::update(float duration) else //avoid z-rotating for knockdown world->rotateObject(mPtr, rot.x, rot.y, 0.0f, true); - // always control actual movement by animation unless this: - // FIXME: actor falling/landing should be controlled by physics engine - if(mMovementAnimVelocity == 0.0f && (vec.length() > 0.0f || mJumpState != JumpState_None)) - { + if (mMovementAnimVelocity == 0) world->queueMovement(mPtr, vec); - } } movement = vec; @@ -1290,7 +1286,7 @@ void CharacterController::update(float duration) } // Update movement - if(moved.squaredLength() > 1.0f) + if(mMovementAnimVelocity > 0) world->queueMovement(mPtr, moved); } mSkipAnim = false; From 0c207f7212a50ac8fa603054337ad2aa092963df Mon Sep 17 00:00:00 2001 From: scrawl Date: Sat, 22 Mar 2014 01:06:43 +0100 Subject: [PATCH 2/2] Fix build error --- apps/opencs/view/render/previewwidget.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/opencs/view/render/previewwidget.cpp b/apps/opencs/view/render/previewwidget.cpp index 43d45f4cb..1cd39c89b 100644 --- a/apps/opencs/view/render/previewwidget.cpp +++ b/apps/opencs/view/render/previewwidget.cpp @@ -2,6 +2,7 @@ #include "previewwidget.hpp" #include +#include #include "../../model/world/data.hpp"