mirror of
https://github.com/lubosz/overte.git
synced 2025-04-09 22:42:17 +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,
|
||||
"startFrame": 1,
|
||||
"timeScale": 1,
|
||||
"url": "qrc:///avatar/animations/settle_to_idle_small.fbx"
|
||||
"url": "qrc:///avatar/animations/settle_to_idle.fbx"
|
||||
},
|
||||
"id": "idleSettle",
|
||||
"type": "clip"
|
||||
|
@ -5346,6 +5346,19 @@
|
|||
},
|
||||
"id": "LANDRUN",
|
||||
"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": {
|
||||
|
@ -5371,7 +5384,7 @@
|
|||
{
|
||||
"easingType": "easeInOutQuad",
|
||||
"id": "idle",
|
||||
"interpDuration": 15,
|
||||
"interpDuration": 20,
|
||||
"interpTarget": 20,
|
||||
"interpType": "evaluateBoth",
|
||||
"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",
|
||||
"interpDuration": 15,
|
||||
"interpTarget": 35,
|
||||
"interpType": "snapshotPrev",
|
||||
"transitions": [
|
||||
{
|
||||
"state": "idleSettleSmall",
|
||||
"var": "isNotInputNoMomentum"
|
||||
},
|
||||
{
|
||||
"state": "idleSettle",
|
||||
"var": "isNotInputSlow"
|
||||
|
@ -5659,6 +5765,10 @@
|
|||
"interpTarget": 35,
|
||||
"interpType": "snapshotPrev",
|
||||
"transitions": [
|
||||
{
|
||||
"state": "idleSettleSmall",
|
||||
"var": "isNotInputNoMomentum"
|
||||
},
|
||||
{
|
||||
"state": "idleSettle",
|
||||
"var": "isNotInputSlow"
|
||||
|
@ -5723,6 +5833,10 @@
|
|||
"interpTarget": 25,
|
||||
"interpType": "snapshotPrev",
|
||||
"transitions": [
|
||||
{
|
||||
"state": "idleSettleSmall",
|
||||
"var": "isNotInputNoMomentum"
|
||||
},
|
||||
{
|
||||
"state": "idleSettle",
|
||||
"var": "isNotInputSlow"
|
||||
|
@ -5787,6 +5901,10 @@
|
|||
"interpTarget": 25,
|
||||
"interpType": "snapshotPrev",
|
||||
"transitions": [
|
||||
{
|
||||
"state": "idleSettleSmall",
|
||||
"var": "isNotInputNoMomentum"
|
||||
},
|
||||
{
|
||||
"state": "idleSettle",
|
||||
"var": "isNotInputSlow"
|
||||
|
|
|
@ -1171,6 +1171,7 @@ void Rig::computeMotionAnimationState(float deltaTime, const glm::vec3& worldPos
|
|||
|
||||
_desiredStateAge += deltaTime;
|
||||
|
||||
|
||||
if (_state == RigRole::Move) {
|
||||
glm::vec3 horizontalVel = localVel - glm::vec3(0.0f, localVel.y, 0.0f);
|
||||
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
|
||||
const float INPUT_DEADZONE_THRESHOLD = 0.05f;
|
||||
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 &&
|
||||
fabsf(_previousControllerParameters.inputZ) <= INPUT_DEADZONE_THRESHOLD) {
|
||||
// no WASD input
|
||||
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("isInputBackward", false);
|
||||
_animVars.set("isInputRight", false);
|
||||
_animVars.set("isInputLeft", false);
|
||||
_animVars.set("isNotInput", true);
|
||||
_animVars.set("isNotInputSlow", true);
|
||||
_animVars.set("isNotInput", true);
|
||||
|
||||
if (_isMovingWithMomentum) {
|
||||
_animVars.set("isNotInputSlow", true);
|
||||
_animVars.set("isNotInputNoMomentum", false);
|
||||
} else {
|
||||
_animVars.set("isNotInputSlow", false);
|
||||
_animVars.set("isNotInputNoMomentum", true);
|
||||
}
|
||||
|
||||
|
||||
} else {
|
||||
_animVars.set("isInputForward", false);
|
||||
|
@ -1456,8 +1475,13 @@ void Rig::computeMotionAnimationState(float deltaTime, const glm::vec3& worldPos
|
|||
_animVars.set("isInputLeft", false);
|
||||
_animVars.set("isNotInput", true);
|
||||
_animVars.set("isNotInputSlow", false);
|
||||
_animVars.set("isNotInputNoMomentum", false);
|
||||
}
|
||||
} else if (fabsf(_previousControllerParameters.inputZ) >= fabsf(_previousControllerParameters.inputX)) {
|
||||
if (fabsf(forwardSpeed) > HAS_MOMENTUM_THRESHOLD) {
|
||||
_isMovingWithMomentum = true;
|
||||
}
|
||||
|
||||
if (_previousControllerParameters.inputZ > 0.0f) {
|
||||
// forward
|
||||
_animVars.set("isInputForward", true);
|
||||
|
@ -1466,6 +1490,7 @@ void Rig::computeMotionAnimationState(float deltaTime, const glm::vec3& worldPos
|
|||
_animVars.set("isInputLeft", false);
|
||||
_animVars.set("isNotInput", false);
|
||||
_animVars.set("isNotInputSlow", false);
|
||||
_animVars.set("isNotInputNoMomentum", false);
|
||||
} else {
|
||||
// backward
|
||||
_animVars.set("isInputForward", false);
|
||||
|
@ -1474,8 +1499,13 @@ void Rig::computeMotionAnimationState(float deltaTime, const glm::vec3& worldPos
|
|||
_animVars.set("isInputLeft", false);
|
||||
_animVars.set("isNotInput", false);
|
||||
_animVars.set("isNotInputSlow", false);
|
||||
_animVars.set("isNotInputNoMomentum", false);
|
||||
}
|
||||
} else {
|
||||
if (fabsf(lateralSpeed) > HAS_MOMENTUM_THRESHOLD) {
|
||||
_isMovingWithMomentum = true;
|
||||
}
|
||||
|
||||
if (_previousControllerParameters.inputX > 0.0f) {
|
||||
// right
|
||||
_animVars.set("isInputForward", false);
|
||||
|
@ -1484,6 +1514,7 @@ void Rig::computeMotionAnimationState(float deltaTime, const glm::vec3& worldPos
|
|||
_animVars.set("isInputLeft", false);
|
||||
_animVars.set("isNotInput", false);
|
||||
_animVars.set("isNotInputSlow", false);
|
||||
_animVars.set("isNotInputNoMomentum", false);
|
||||
} else {
|
||||
// left
|
||||
_animVars.set("isInputForward", false);
|
||||
|
@ -1492,6 +1523,7 @@ void Rig::computeMotionAnimationState(float deltaTime, const glm::vec3& worldPos
|
|||
_animVars.set("isInputLeft", true);
|
||||
_animVars.set("isNotInput", false);
|
||||
_animVars.set("isNotInputSlow", false);
|
||||
_animVars.set("isNotInputNoMomentum", false);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -330,6 +330,7 @@ protected:
|
|||
glm::vec3 _lastForward;
|
||||
glm::vec3 _lastPosition;
|
||||
glm::vec3 _lastVelocity;
|
||||
bool _isMovingWithMomentum{ false };
|
||||
|
||||
QUrl _animGraphURL;
|
||||
std::shared_ptr<AnimNode> _animNode;
|
||||
|
|
Loading…
Reference in a new issue