mirror of
https://github.com/overte-org/overte.git
synced 2025-08-10 06:23:06 +02:00
Different settle transition depending on momentum
This commit is contained in:
parent
8f0ca7b6db
commit
73202b9caf
5 changed files with 155 additions and 4 deletions
BIN
interface/resources/avatar/animations/settle_to_idle.fbx
Normal file
BIN
interface/resources/avatar/animations/settle_to_idle.fbx
Normal file
Binary file not shown.
Binary file not shown.
|
@ -4810,7 +4810,7 @@
|
||||||
"loopFlag": false,
|
"loopFlag": false,
|
||||||
"startFrame": 1,
|
"startFrame": 1,
|
||||||
"timeScale": 1,
|
"timeScale": 1,
|
||||||
"url": "qrc:///avatar/animations/settle_to_idle_small.fbx"
|
"url": "qrc:///avatar/animations/settle_to_idle.fbx"
|
||||||
},
|
},
|
||||||
"id": "idleSettle",
|
"id": "idleSettle",
|
||||||
"type": "clip"
|
"type": "clip"
|
||||||
|
@ -5346,6 +5346,19 @@
|
||||||
},
|
},
|
||||||
"id": "LANDRUN",
|
"id": "LANDRUN",
|
||||||
"type": "clip"
|
"type": "clip"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"children": [
|
||||||
|
],
|
||||||
|
"data": {
|
||||||
|
"endFrame": 34,
|
||||||
|
"loopFlag": false,
|
||||||
|
"startFrame": 1,
|
||||||
|
"timeScale": 1,
|
||||||
|
"url": "qrc:///avatar/animations/settle_to_idle_small.fbx"
|
||||||
|
},
|
||||||
|
"id": "idleSettleSmall",
|
||||||
|
"type": "clip"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"data": {
|
"data": {
|
||||||
|
@ -5371,7 +5384,7 @@
|
||||||
{
|
{
|
||||||
"easingType": "easeInOutQuad",
|
"easingType": "easeInOutQuad",
|
||||||
"id": "idle",
|
"id": "idle",
|
||||||
"interpDuration": 15,
|
"interpDuration": 20,
|
||||||
"interpTarget": 20,
|
"interpTarget": 20,
|
||||||
"interpType": "evaluateBoth",
|
"interpType": "evaluateBoth",
|
||||||
"transitions": [
|
"transitions": [
|
||||||
|
@ -5589,12 +5602,105 @@
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"easingType": "easeInOutQuad",
|
||||||
|
"id": "idleSettleSmall",
|
||||||
|
"interpDuration": 10,
|
||||||
|
"interpTarget": 10,
|
||||||
|
"interpType": "snapshotPrev",
|
||||||
|
"transitions": [
|
||||||
|
{
|
||||||
|
"state": "idle",
|
||||||
|
"var": "idleSettleSmallOnDone"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"state": "idle",
|
||||||
|
"var": "reactionPositiveTrigger"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"state": "idle",
|
||||||
|
"var": "reactionNegativeTrigger"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"state": "idle",
|
||||||
|
"var": "reactionRaiseHandEnabled"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"state": "idle",
|
||||||
|
"var": "reactionApplaudEnabled"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"state": "idle",
|
||||||
|
"var": "reactionPointEnabled"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"state": "WALKFWD",
|
||||||
|
"var": "isInputForward"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"state": "WALKBWD",
|
||||||
|
"var": "isInputBackward"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"state": "STRAFERIGHT",
|
||||||
|
"var": "isInputRight"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"state": "STRAFELEFT",
|
||||||
|
"var": "isInputLeft"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"state": "strafeRightHmd",
|
||||||
|
"var": "isMovingRightHmd"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"state": "strafeLeftHmd",
|
||||||
|
"var": "isMovingLeftHmd"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"state": "turnRight",
|
||||||
|
"var": "isTurningRight"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"state": "turnLeft",
|
||||||
|
"var": "isTurningLeft"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"state": "fly",
|
||||||
|
"var": "isFlying"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"state": "takeoffStand",
|
||||||
|
"var": "isTakeoffStand"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"state": "TAKEOFFRUN",
|
||||||
|
"var": "isTakeoffRun"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"state": "inAirStand",
|
||||||
|
"var": "isInAirStand"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"state": "INAIRRUN",
|
||||||
|
"var": "isInAirRun"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"state": "seated",
|
||||||
|
"var": "isSeated"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"id": "WALKFWD",
|
"id": "WALKFWD",
|
||||||
"interpDuration": 15,
|
"interpDuration": 15,
|
||||||
"interpTarget": 35,
|
"interpTarget": 35,
|
||||||
"interpType": "snapshotPrev",
|
"interpType": "snapshotPrev",
|
||||||
"transitions": [
|
"transitions": [
|
||||||
|
{
|
||||||
|
"state": "idleSettleSmall",
|
||||||
|
"var": "isNotInputNoMomentum"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"state": "idleSettle",
|
"state": "idleSettle",
|
||||||
"var": "isNotInputSlow"
|
"var": "isNotInputSlow"
|
||||||
|
@ -5659,6 +5765,10 @@
|
||||||
"interpTarget": 35,
|
"interpTarget": 35,
|
||||||
"interpType": "snapshotPrev",
|
"interpType": "snapshotPrev",
|
||||||
"transitions": [
|
"transitions": [
|
||||||
|
{
|
||||||
|
"state": "idleSettleSmall",
|
||||||
|
"var": "isNotInputNoMomentum"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"state": "idleSettle",
|
"state": "idleSettle",
|
||||||
"var": "isNotInputSlow"
|
"var": "isNotInputSlow"
|
||||||
|
@ -5723,6 +5833,10 @@
|
||||||
"interpTarget": 25,
|
"interpTarget": 25,
|
||||||
"interpType": "snapshotPrev",
|
"interpType": "snapshotPrev",
|
||||||
"transitions": [
|
"transitions": [
|
||||||
|
{
|
||||||
|
"state": "idleSettleSmall",
|
||||||
|
"var": "isNotInputNoMomentum"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"state": "idleSettle",
|
"state": "idleSettle",
|
||||||
"var": "isNotInputSlow"
|
"var": "isNotInputSlow"
|
||||||
|
@ -5787,6 +5901,10 @@
|
||||||
"interpTarget": 25,
|
"interpTarget": 25,
|
||||||
"interpType": "snapshotPrev",
|
"interpType": "snapshotPrev",
|
||||||
"transitions": [
|
"transitions": [
|
||||||
|
{
|
||||||
|
"state": "idleSettleSmall",
|
||||||
|
"var": "isNotInputNoMomentum"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"state": "idleSettle",
|
"state": "idleSettle",
|
||||||
"var": "isNotInputSlow"
|
"var": "isNotInputSlow"
|
||||||
|
|
|
@ -1171,6 +1171,7 @@ void Rig::computeMotionAnimationState(float deltaTime, const glm::vec3& worldPos
|
||||||
|
|
||||||
_desiredStateAge += deltaTime;
|
_desiredStateAge += deltaTime;
|
||||||
|
|
||||||
|
|
||||||
if (_state == RigRole::Move) {
|
if (_state == RigRole::Move) {
|
||||||
glm::vec3 horizontalVel = localVel - glm::vec3(0.0f, localVel.y, 0.0f);
|
glm::vec3 horizontalVel = localVel - glm::vec3(0.0f, localVel.y, 0.0f);
|
||||||
if (glm::length(horizontalVel) > MOVE_ENTER_SPEED_THRESHOLD) {
|
if (glm::length(horizontalVel) > MOVE_ENTER_SPEED_THRESHOLD) {
|
||||||
|
@ -1437,17 +1438,35 @@ void Rig::computeMotionAnimationState(float deltaTime, const glm::vec3& worldPos
|
||||||
//stategraph vars based on input
|
//stategraph vars based on input
|
||||||
const float INPUT_DEADZONE_THRESHOLD = 0.05f;
|
const float INPUT_DEADZONE_THRESHOLD = 0.05f;
|
||||||
const float SLOW_SPEED_THRESHOLD = 1.5f;
|
const float SLOW_SPEED_THRESHOLD = 1.5f;
|
||||||
|
const float HAS_MOMENTUM_THRESHOLD = 2.2f;
|
||||||
|
const float RESET_MOMENTUM_THRESHOLD = 0.05f;
|
||||||
|
|
||||||
if (fabsf(_previousControllerParameters.inputX) <= INPUT_DEADZONE_THRESHOLD &&
|
if (fabsf(_previousControllerParameters.inputX) <= INPUT_DEADZONE_THRESHOLD &&
|
||||||
fabsf(_previousControllerParameters.inputZ) <= INPUT_DEADZONE_THRESHOLD) {
|
fabsf(_previousControllerParameters.inputZ) <= INPUT_DEADZONE_THRESHOLD) {
|
||||||
// no WASD input
|
// no WASD input
|
||||||
if (fabsf(forwardSpeed) <= SLOW_SPEED_THRESHOLD && fabsf(lateralSpeed) <= SLOW_SPEED_THRESHOLD) {
|
if (fabsf(forwardSpeed) <= SLOW_SPEED_THRESHOLD && fabsf(lateralSpeed) <= SLOW_SPEED_THRESHOLD) {
|
||||||
|
|
||||||
|
//reset this when stopped
|
||||||
|
if (fabsf(forwardSpeed) <= RESET_MOMENTUM_THRESHOLD &&
|
||||||
|
fabsf(lateralSpeed) <= RESET_MOMENTUM_THRESHOLD) {
|
||||||
|
_isMovingWithMomentum = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
_animVars.set("isInputForward", false);
|
_animVars.set("isInputForward", false);
|
||||||
_animVars.set("isInputBackward", false);
|
_animVars.set("isInputBackward", false);
|
||||||
_animVars.set("isInputRight", false);
|
_animVars.set("isInputRight", false);
|
||||||
_animVars.set("isInputLeft", false);
|
_animVars.set("isInputLeft", false);
|
||||||
_animVars.set("isNotInput", true);
|
_animVars.set("isNotInput", true);
|
||||||
_animVars.set("isNotInputSlow", true);
|
|
||||||
|
if (_isMovingWithMomentum) {
|
||||||
|
_animVars.set("isNotInputSlow", true);
|
||||||
|
_animVars.set("isNotInputNoMomentum", false);
|
||||||
|
} else {
|
||||||
|
_animVars.set("isNotInputSlow", false);
|
||||||
|
_animVars.set("isNotInputNoMomentum", true);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
_animVars.set("isInputForward", false);
|
_animVars.set("isInputForward", false);
|
||||||
|
@ -1456,8 +1475,13 @@ void Rig::computeMotionAnimationState(float deltaTime, const glm::vec3& worldPos
|
||||||
_animVars.set("isInputLeft", false);
|
_animVars.set("isInputLeft", false);
|
||||||
_animVars.set("isNotInput", true);
|
_animVars.set("isNotInput", true);
|
||||||
_animVars.set("isNotInputSlow", false);
|
_animVars.set("isNotInputSlow", false);
|
||||||
|
_animVars.set("isNotInputNoMomentum", false);
|
||||||
}
|
}
|
||||||
} else if (fabsf(_previousControllerParameters.inputZ) >= fabsf(_previousControllerParameters.inputX)) {
|
} else if (fabsf(_previousControllerParameters.inputZ) >= fabsf(_previousControllerParameters.inputX)) {
|
||||||
|
if (fabsf(forwardSpeed) > HAS_MOMENTUM_THRESHOLD) {
|
||||||
|
_isMovingWithMomentum = true;
|
||||||
|
}
|
||||||
|
|
||||||
if (_previousControllerParameters.inputZ > 0.0f) {
|
if (_previousControllerParameters.inputZ > 0.0f) {
|
||||||
// forward
|
// forward
|
||||||
_animVars.set("isInputForward", true);
|
_animVars.set("isInputForward", true);
|
||||||
|
@ -1466,6 +1490,7 @@ void Rig::computeMotionAnimationState(float deltaTime, const glm::vec3& worldPos
|
||||||
_animVars.set("isInputLeft", false);
|
_animVars.set("isInputLeft", false);
|
||||||
_animVars.set("isNotInput", false);
|
_animVars.set("isNotInput", false);
|
||||||
_animVars.set("isNotInputSlow", false);
|
_animVars.set("isNotInputSlow", false);
|
||||||
|
_animVars.set("isNotInputNoMomentum", false);
|
||||||
} else {
|
} else {
|
||||||
// backward
|
// backward
|
||||||
_animVars.set("isInputForward", false);
|
_animVars.set("isInputForward", false);
|
||||||
|
@ -1474,8 +1499,13 @@ void Rig::computeMotionAnimationState(float deltaTime, const glm::vec3& worldPos
|
||||||
_animVars.set("isInputLeft", false);
|
_animVars.set("isInputLeft", false);
|
||||||
_animVars.set("isNotInput", false);
|
_animVars.set("isNotInput", false);
|
||||||
_animVars.set("isNotInputSlow", false);
|
_animVars.set("isNotInputSlow", false);
|
||||||
|
_animVars.set("isNotInputNoMomentum", false);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
if (fabsf(lateralSpeed) > HAS_MOMENTUM_THRESHOLD) {
|
||||||
|
_isMovingWithMomentum = true;
|
||||||
|
}
|
||||||
|
|
||||||
if (_previousControllerParameters.inputX > 0.0f) {
|
if (_previousControllerParameters.inputX > 0.0f) {
|
||||||
// right
|
// right
|
||||||
_animVars.set("isInputForward", false);
|
_animVars.set("isInputForward", false);
|
||||||
|
@ -1484,6 +1514,7 @@ void Rig::computeMotionAnimationState(float deltaTime, const glm::vec3& worldPos
|
||||||
_animVars.set("isInputLeft", false);
|
_animVars.set("isInputLeft", false);
|
||||||
_animVars.set("isNotInput", false);
|
_animVars.set("isNotInput", false);
|
||||||
_animVars.set("isNotInputSlow", false);
|
_animVars.set("isNotInputSlow", false);
|
||||||
|
_animVars.set("isNotInputNoMomentum", false);
|
||||||
} else {
|
} else {
|
||||||
// left
|
// left
|
||||||
_animVars.set("isInputForward", false);
|
_animVars.set("isInputForward", false);
|
||||||
|
@ -1492,6 +1523,7 @@ void Rig::computeMotionAnimationState(float deltaTime, const glm::vec3& worldPos
|
||||||
_animVars.set("isInputLeft", true);
|
_animVars.set("isInputLeft", true);
|
||||||
_animVars.set("isNotInput", false);
|
_animVars.set("isNotInput", false);
|
||||||
_animVars.set("isNotInputSlow", false);
|
_animVars.set("isNotInputSlow", false);
|
||||||
|
_animVars.set("isNotInputNoMomentum", false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -330,6 +330,7 @@ protected:
|
||||||
glm::vec3 _lastForward;
|
glm::vec3 _lastForward;
|
||||||
glm::vec3 _lastPosition;
|
glm::vec3 _lastPosition;
|
||||||
glm::vec3 _lastVelocity;
|
glm::vec3 _lastVelocity;
|
||||||
|
bool _isMovingWithMomentum{ false };
|
||||||
|
|
||||||
QUrl _animGraphURL;
|
QUrl _animGraphURL;
|
||||||
std::shared_ptr<AnimNode> _animNode;
|
std::shared_ptr<AnimNode> _animNode;
|
||||||
|
|
Loading…
Reference in a new issue