mirror of
https://github.com/overte-org/overte.git
synced 2025-08-05 00:59:56 +02:00
working on strafe left and right transitions
This commit is contained in:
parent
bd88d5f15b
commit
096cb0db81
3 changed files with 34 additions and 18 deletions
|
@ -109,13 +109,8 @@ const AnimPoseVec& AnimStateMachine::evaluate(const AnimVariantMap& animVars, co
|
|||
_animStack[_currentState->getID()] = 1.0f;
|
||||
_poses = currentStateNode->evaluate(animVars, context, dt, triggersOut);
|
||||
}
|
||||
<<<<<<< HEAD
|
||||
|
||||
=======
|
||||
|
||||
processOutputJoints(triggersOut);
|
||||
|
||||
>>>>>>> upstream/master
|
||||
return _poses;
|
||||
}
|
||||
|
||||
|
@ -127,7 +122,7 @@ void AnimStateMachine::addState(State::Pointer state) {
|
|||
_states.push_back(state);
|
||||
}
|
||||
|
||||
void AnimStateMachine::switchState(AnimVariantMap& animVars, const AnimContext& context, State::Pointer desiredState) {
|
||||
void AnimStateMachine::switchState(const AnimVariantMap& animVars, const AnimContext& context, State::Pointer desiredState) {
|
||||
|
||||
const float FRAMES_PER_SECOND = 30.0f;
|
||||
|
||||
|
|
|
@ -123,7 +123,7 @@ protected:
|
|||
|
||||
void addState(State::Pointer state);
|
||||
|
||||
void switchState(AnimVariantMap& animVars, const AnimContext& context, State::Pointer desiredState);
|
||||
void switchState(const AnimVariantMap& animVars, const AnimContext& context, State::Pointer desiredState);
|
||||
State::Pointer evaluateTransitions(const AnimVariantMap& animVars) const;
|
||||
|
||||
// for AnimDebugDraw rendering
|
||||
|
|
|
@ -641,6 +641,11 @@ void Rig::computeMotionAnimationState(float deltaTime, const glm::vec3& worldPos
|
|||
float lateralSpeed = glm::dot(localVel, IDENTITY_RIGHT);
|
||||
float turningSpeed = glm::orientedAngle(forward, _lastForward, IDENTITY_UP) / deltaTime;
|
||||
|
||||
glm::vec3 lastVel = glm::inverse(worldRotation) * _lastVelocity;
|
||||
|
||||
float lastForwardSpeed = glm::dot(lastVel, IDENTITY_FORWARD);
|
||||
float lastLateralSpeed = glm::dot(lastVel, IDENTITY_RIGHT);
|
||||
|
||||
// filter speeds using a simple moving average.
|
||||
_averageForwardSpeed.updateAverage(forwardSpeed);
|
||||
_averageLateralSpeed.updateAverage(lateralSpeed);
|
||||
|
@ -723,26 +728,20 @@ void Rig::computeMotionAnimationState(float deltaTime, const glm::vec3& worldPos
|
|||
if ((_desiredStateAge >= STATE_CHANGE_HYSTERESIS_TIMER) && _desiredState != _state) {
|
||||
_state = _desiredState;
|
||||
_desiredStateAge = 0.0f;
|
||||
// if we are changing anim states.
|
||||
//reset the average speed to the current reading of speed
|
||||
qCDebug(animation) << "reset the average movement speeds";
|
||||
_averageForwardSpeed.reset();
|
||||
_averageLateralSpeed.reset();
|
||||
_averageForwardSpeed.updateAverage(forwardSpeed);
|
||||
_averageLateralSpeed.updateAverage(lateralSpeed);
|
||||
_animVars.set("moveForwardSpeed", _averageForwardSpeed.getAverage());
|
||||
_animVars.set("moveBackwardSpeed", -_averageForwardSpeed.getAverage());
|
||||
_animVars.set("moveLateralSpeed", fabsf(_averageLateralSpeed.getAverage()));
|
||||
|
||||
}
|
||||
|
||||
_desiredStateAge += deltaTime;
|
||||
|
||||
bool resetVelocityAverage = false;
|
||||
|
||||
if (_state == RigRole::Move) {
|
||||
glm::vec3 horizontalVel = localVel - glm::vec3(0.0f, localVel.y, 0.0f);
|
||||
if (glm::length(horizontalVel) > MOVE_ENTER_SPEED_THRESHOLD) {
|
||||
if (fabsf(forwardSpeed) > 0.5f * fabsf(lateralSpeed)) {
|
||||
if (forwardSpeed > 0.0f) {
|
||||
if (lastForwardSpeed < 0.0f){
|
||||
resetVelocityAverage = true;
|
||||
}
|
||||
// forward
|
||||
_animVars.set("isMovingForward", true);
|
||||
_animVars.set("isMovingBackward", false);
|
||||
|
@ -751,6 +750,9 @@ void Rig::computeMotionAnimationState(float deltaTime, const glm::vec3& worldPos
|
|||
_animVars.set("isNotMoving", false);
|
||||
|
||||
} else {
|
||||
if (lastForwardSpeed > 0.0f) {
|
||||
resetVelocityAverage = true;
|
||||
}
|
||||
// backward
|
||||
_animVars.set("isMovingBackward", true);
|
||||
_animVars.set("isMovingForward", false);
|
||||
|
@ -760,6 +762,9 @@ void Rig::computeMotionAnimationState(float deltaTime, const glm::vec3& worldPos
|
|||
}
|
||||
} else {
|
||||
if (lateralSpeed > 0.0f) {
|
||||
if (lastLateralSpeed < 0.0f) {
|
||||
resetVelocityAverage = true;
|
||||
}
|
||||
// right
|
||||
_animVars.set("isMovingRight", true);
|
||||
_animVars.set("isMovingLeft", false);
|
||||
|
@ -767,6 +772,9 @@ void Rig::computeMotionAnimationState(float deltaTime, const glm::vec3& worldPos
|
|||
_animVars.set("isMovingBackward", false);
|
||||
_animVars.set("isNotMoving", false);
|
||||
} else {
|
||||
if (lastLateralSpeed > 0.0f) {
|
||||
resetVelocityAverage = true;
|
||||
}
|
||||
// left
|
||||
_animVars.set("isMovingLeft", true);
|
||||
_animVars.set("isMovingRight", false);
|
||||
|
@ -788,6 +796,19 @@ void Rig::computeMotionAnimationState(float deltaTime, const glm::vec3& worldPos
|
|||
_animVars.set("isInAirRun", false);
|
||||
_animVars.set("isNotInAir", true);
|
||||
|
||||
if (false) {
|
||||
// if we are changing anim states.
|
||||
//reset the average speed to the current reading of speed
|
||||
qCDebug(animation) << "reset the average movement speeds";
|
||||
_averageForwardSpeed.reset();
|
||||
_averageLateralSpeed.reset();
|
||||
_averageForwardSpeed.updateAverage(forwardSpeed);
|
||||
_averageLateralSpeed.updateAverage(lateralSpeed);
|
||||
_animVars.set("moveForwardSpeed", _averageForwardSpeed.getAverage());
|
||||
_animVars.set("moveBackwardSpeed", -_averageForwardSpeed.getAverage());
|
||||
_animVars.set("moveLateralSpeed", fabsf(_averageLateralSpeed.getAverage()));
|
||||
}
|
||||
|
||||
} else if (_state == RigRole::Turn) {
|
||||
if (turningSpeed > 0.0f) {
|
||||
// turning right
|
||||
|
|
Loading…
Reference in a new issue