mirror of
https://github.com/overte-org/overte.git
synced 2025-04-08 00:52:27 +02:00
Merge pull request #16467 from DouglasWilcox/rand_settles_and_by_momentum
Different settle transition depending on momentum
This commit is contained in:
commit
75ba65c2c9
8 changed files with 274 additions and 8 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.
BIN
interface/resources/avatar/animations/settle_to_idle02.fbx
Normal file
BIN
interface/resources/avatar/animations/settle_to_idle02.fbx
Normal file
Binary file not shown.
BIN
interface/resources/avatar/animations/settle_to_idle03.fbx
Normal file
BIN
interface/resources/avatar/animations/settle_to_idle03.fbx
Normal file
Binary file not shown.
BIN
interface/resources/avatar/animations/settle_to_idle04.fbx
Normal file
BIN
interface/resources/avatar/animations/settle_to_idle04.fbx
Normal file
Binary file not shown.
Binary file not shown.
|
@ -4804,16 +4804,117 @@
|
|||
},
|
||||
{
|
||||
"children": [
|
||||
{
|
||||
"children": [
|
||||
],
|
||||
"data": {
|
||||
"endFrame": 59,
|
||||
"loopFlag": false,
|
||||
"startFrame": 1,
|
||||
"timeScale": 1,
|
||||
"url": "qrc:///avatar/animations/settle_to_idle.fbx"
|
||||
},
|
||||
"id": "idleSettle01",
|
||||
"type": "clip"
|
||||
},
|
||||
{
|
||||
"children": [
|
||||
],
|
||||
"data": {
|
||||
"blendType": "",
|
||||
"endFrame": 40,
|
||||
"loopFlag": false,
|
||||
"startFrame": 1,
|
||||
"timeScale": 1,
|
||||
"url": "qrc:///avatar/animations/settle_to_idle02.fbx"
|
||||
},
|
||||
"id": "idleSettle02",
|
||||
"type": "clip"
|
||||
},
|
||||
{
|
||||
"children": [
|
||||
],
|
||||
"data": {
|
||||
"endFrame": 60,
|
||||
"loopFlag": false,
|
||||
"startFrame": 1,
|
||||
"timeScale": 1,
|
||||
"url": "qrc:///avatar/animations/settle_to_idle03.fbx"
|
||||
},
|
||||
"id": "idleSettle03",
|
||||
"type": "clip"
|
||||
},
|
||||
{
|
||||
"children": [
|
||||
],
|
||||
"data": {
|
||||
"endFrame": 82,
|
||||
"loopFlag": false,
|
||||
"startFrame": 1,
|
||||
"timeScale": 1,
|
||||
"url": "qrc:///avatar/animations/settle_to_idle04.fbx"
|
||||
},
|
||||
"id": "idleSettle04",
|
||||
"type": "clip"
|
||||
}
|
||||
],
|
||||
"data": {
|
||||
"currentState": "idleSettle01",
|
||||
"endFrame": 59,
|
||||
"loopFlag": false,
|
||||
"randomSwitchTimeMin": 1,
|
||||
"startFrame": 1,
|
||||
"states": [
|
||||
{
|
||||
"easingType": "easeInOutQuad",
|
||||
"id": "idleSettle01",
|
||||
"interpDuration": 1,
|
||||
"interpTarget": 1,
|
||||
"interpType": "evaluateBoth",
|
||||
"priority": 1,
|
||||
"resume": false,
|
||||
"transitions": [
|
||||
]
|
||||
},
|
||||
{
|
||||
"easingType": "easeInOutQuad",
|
||||
"id": "idleSettle02",
|
||||
"interpDuration": 1,
|
||||
"interpTarget": 1,
|
||||
"interpType": "evaluateBoth",
|
||||
"priority": 1,
|
||||
"resume": false,
|
||||
"transitions": [
|
||||
]
|
||||
},
|
||||
{
|
||||
"easingType": "easeInOutQuad",
|
||||
"id": "idleSettle03",
|
||||
"interpDuration": 1,
|
||||
"interpTarget": 1,
|
||||
"interpType": "evaluateBoth",
|
||||
"priority": 1,
|
||||
"resume": false,
|
||||
"transitions": [
|
||||
]
|
||||
},
|
||||
{
|
||||
"easingType": "easeInOutQuad",
|
||||
"id": "idleSettle04",
|
||||
"interpDuration": 1,
|
||||
"interpTarget": 1,
|
||||
"interpType": "evaluateBoth",
|
||||
"priority": 1,
|
||||
"resume": false,
|
||||
"transitions": [
|
||||
]
|
||||
}
|
||||
],
|
||||
"timeScale": 1,
|
||||
"url": "qrc:///avatar/animations/settle_to_idle_small.fbx"
|
||||
"url": "qrc:///avatar/animations/settle_to_idle.fbx"
|
||||
},
|
||||
"id": "idleSettle",
|
||||
"type": "clip"
|
||||
"type": "randomSwitchStateMachine"
|
||||
},
|
||||
{
|
||||
"children": [
|
||||
|
@ -5346,6 +5447,19 @@
|
|||
},
|
||||
"id": "LANDRUN",
|
||||
"type": "clip"
|
||||
},
|
||||
{
|
||||
"children": [
|
||||
],
|
||||
"data": {
|
||||
"endFrame": 40,
|
||||
"loopFlag": false,
|
||||
"startFrame": 1,
|
||||
"timeScale": 1,
|
||||
"url": "qrc:///avatar/animations/settle_to_idle_small.fbx"
|
||||
},
|
||||
"id": "idleSettleSmall",
|
||||
"type": "clip"
|
||||
}
|
||||
],
|
||||
"data": {
|
||||
|
@ -5371,7 +5485,7 @@
|
|||
{
|
||||
"easingType": "easeInOutQuad",
|
||||
"id": "idle",
|
||||
"interpDuration": 15,
|
||||
"interpDuration": 20,
|
||||
"interpTarget": 20,
|
||||
"interpType": "evaluateBoth",
|
||||
"transitions": [
|
||||
|
@ -5503,13 +5617,114 @@
|
|||
{
|
||||
"easingType": "easeInOutQuad",
|
||||
"id": "idleSettle",
|
||||
"interpDuration": 13,
|
||||
"interpTarget": 14,
|
||||
"interpDuration": 15,
|
||||
"interpTarget": 15,
|
||||
"interpType": "snapshotPrev",
|
||||
"transitions": [
|
||||
{
|
||||
"state": "idle",
|
||||
"var": "idleSettleOnDone"
|
||||
"var": "idleSettle01OnDone"
|
||||
},
|
||||
{
|
||||
"state": "idle",
|
||||
"var": "idleSettle02OnDone"
|
||||
},
|
||||
{
|
||||
"state": "idle",
|
||||
"var": "idleSettle03OnDone"
|
||||
},
|
||||
{
|
||||
"state": "idle",
|
||||
"var": "idleSettle04OnDone"
|
||||
},
|
||||
{
|
||||
"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"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"easingType": "easeInOutQuad",
|
||||
"id": "idleSettleSmall",
|
||||
"interpDuration": 10,
|
||||
"interpTarget": 10,
|
||||
"interpType": "snapshotPrev",
|
||||
"transitions": [
|
||||
{
|
||||
"state": "idle",
|
||||
"var": "idleSettleSmallOnDone"
|
||||
},
|
||||
{
|
||||
"state": "idle",
|
||||
|
@ -5595,6 +5810,10 @@
|
|||
"interpTarget": 35,
|
||||
"interpType": "snapshotPrev",
|
||||
"transitions": [
|
||||
{
|
||||
"state": "idleSettleSmall",
|
||||
"var": "isNotInputNoMomentum"
|
||||
},
|
||||
{
|
||||
"state": "idleSettle",
|
||||
"var": "isNotInputSlow"
|
||||
|
@ -5659,6 +5878,10 @@
|
|||
"interpTarget": 35,
|
||||
"interpType": "snapshotPrev",
|
||||
"transitions": [
|
||||
{
|
||||
"state": "idleSettleSmall",
|
||||
"var": "isNotInputNoMomentum"
|
||||
},
|
||||
{
|
||||
"state": "idleSettle",
|
||||
"var": "isNotInputSlow"
|
||||
|
@ -5723,6 +5946,10 @@
|
|||
"interpTarget": 25,
|
||||
"interpType": "snapshotPrev",
|
||||
"transitions": [
|
||||
{
|
||||
"state": "idleSettleSmall",
|
||||
"var": "isNotInputNoMomentum"
|
||||
},
|
||||
{
|
||||
"state": "idleSettle",
|
||||
"var": "isNotInputSlow"
|
||||
|
@ -5787,6 +6014,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,37 @@ 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);
|
||||
|
||||
// directly reflects input
|
||||
_animVars.set("isNotInput", true);
|
||||
|
||||
// no input + speed drops to SLOW_SPEED_THRESHOLD
|
||||
// (don't transition run->idle - slow to walk first)
|
||||
_animVars.set("isNotInputSlow", _isMovingWithMomentum);
|
||||
|
||||
// no input + speed didn't get above HAS_MOMENTUM_THRESHOLD since last idle
|
||||
// (brief inputs and movement adjustments)
|
||||
_animVars.set("isNotInputNoMomentum", !_isMovingWithMomentum);
|
||||
|
||||
|
||||
} else {
|
||||
_animVars.set("isInputForward", false);
|
||||
|
@ -1456,8 +1477,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 +1492,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 +1501,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 +1516,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 +1525,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