Create isNotInputSlow var for stategraph switch when no input and speed less than 1.5 m/s

This commit is contained in:
dooglifeSF 2019-10-15 14:51:42 -07:00
parent 3102a6ff08
commit a043f0a17e
3 changed files with 71 additions and 53 deletions

View file

@ -5251,7 +5251,7 @@
{
"easingType": "easeInOutQuad",
"id": "idle",
"interpDuration": 20,
"interpDuration": 15,
"interpTarget": 20,
"interpType": "evaluateBoth",
"transitions": [
@ -5383,8 +5383,8 @@
{
"easingType": "easeInOutQuad",
"id": "idleSettle",
"interpDuration": 15,
"interpTarget": 15,
"interpDuration": 13,
"interpTarget": 14,
"interpType": "snapshotPrev",
"transitions": [
{
@ -5477,7 +5477,7 @@
"transitions": [
{
"state": "idleSettle",
"var": "isNotInput"
"var": "isNotInputSlow"
},
{
"state": "WALKBWD",
@ -5541,7 +5541,7 @@
"transitions": [
{
"state": "idleSettle",
"var": "isNotInput"
"var": "isNotInputSlow"
},
{
"state": "WALKFWD",
@ -5605,7 +5605,7 @@
"transitions": [
{
"state": "idleSettle",
"var": "isNotInput"
"var": "isNotInputSlow"
},
{
"state": "WALKFWD",
@ -5669,7 +5669,7 @@
"transitions": [
{
"state": "idleSettle",
"var": "isNotInput"
"var": "isNotInputSlow"
},
{
"state": "WALKFWD",

View file

@ -1432,6 +1432,68 @@ void Rig::computeMotionAnimationState(float deltaTime, const glm::vec3& worldPos
}
_lastEnableInverseKinematics = _enableInverseKinematics;
//stategraph vars based on input
const float INPUT_DEADZONE_THRESHOLD = 0.05f;
if (fabsf(_previousControllerParameters.inputX) <= INPUT_DEADZONE_THRESHOLD &&
fabsf(_previousControllerParameters.inputZ) <= INPUT_DEADZONE_THRESHOLD) {
// no WASD input
if (fabsf(forwardSpeed) <= 1.5f && fabsf(lateralSpeed) <= 1.5f) {
_animVars.set("isInputForward", false);
_animVars.set("isInputBackward", false);
_animVars.set("isInputRight", false);
_animVars.set("isInputLeft", false);
_animVars.set("isNotInput", true);
_animVars.set("isNotInputSlow", true);
} else {
_animVars.set("isInputForward", false);
_animVars.set("isInputBackward", false);
_animVars.set("isInputRight", false);
_animVars.set("isInputLeft", false);
_animVars.set("isNotInput", true);
_animVars.set("isNotInputSlow", false);
}
} else if (fabsf(_previousControllerParameters.inputZ) >= fabsf(_previousControllerParameters.inputX)) {
if (_previousControllerParameters.inputZ > 0.0f) {
// forward
_animVars.set("isInputForward", true);
_animVars.set("isInputBackward", false);
_animVars.set("isInputRight", false);
_animVars.set("isInputLeft", false);
_animVars.set("isNotInput", false);
_animVars.set("isNotInputSlow", false);
} else {
// backward
_animVars.set("isInputForward", false);
_animVars.set("isInputBackward", true);
_animVars.set("isInputRight", false);
_animVars.set("isInputLeft", false);
_animVars.set("isNotInput", false);
_animVars.set("isNotInputSlow", false);
}
} else {
if (_previousControllerParameters.inputX > 0.0f) {
// right
_animVars.set("isInputForward", false);
_animVars.set("isInputBackward", false);
_animVars.set("isInputRight", true);
_animVars.set("isInputLeft", false);
_animVars.set("isNotInput", false);
_animVars.set("isNotInputSlow", false);
} else {
// left
_animVars.set("isInputForward", false);
_animVars.set("isInputBackward", false);
_animVars.set("isInputRight", false);
_animVars.set("isInputLeft", true);
_animVars.set("isNotInput", false);
_animVars.set("isNotInputSlow", false);
}
}
}
_lastForward = forward;
_lastPosition = worldPosition;
@ -2160,50 +2222,6 @@ void Rig::updateFromControllerParameters(const ControllerParameters& params, flo
}
}
//deadzone constant
const float INPUT_DEADZONE_THRESHOLD = 0.05f;
if (fabsf(params.inputX) <= INPUT_DEADZONE_THRESHOLD && fabsf(params.inputZ) <= INPUT_DEADZONE_THRESHOLD) {
// no WASD input
_animVars.set("isInputForward", false);
_animVars.set("isInputBackward", false);
_animVars.set("isInputRight", false);
_animVars.set("isInputLeft", false);
_animVars.set("isNotInput", true);
} else if (fabsf(params.inputZ) >= fabsf(params.inputX)) {
if (params.inputZ > 0.0f) {
// forward
_animVars.set("isInputForward", true);
_animVars.set("isInputBackward", false);
_animVars.set("isInputRight", false);
_animVars.set("isInputLeft", false);
_animVars.set("isNotInput", false);
} else {
// backward
_animVars.set("isInputForward", false);
_animVars.set("isInputBackward", true);
_animVars.set("isInputRight", false);
_animVars.set("isInputLeft", false);
_animVars.set("isNotInput", false);
}
} else {
if (params.inputX > 0.0f) {
// right
_animVars.set("isInputForward", false);
_animVars.set("isInputBackward", false);
_animVars.set("isInputRight", true);
_animVars.set("isInputLeft", false);
_animVars.set("isNotInput", false);
} else {
// left
_animVars.set("isInputForward", false);
_animVars.set("isInputBackward", false);
_animVars.set("isInputRight", false);
_animVars.set("isInputLeft", true);
_animVars.set("isNotInput", false);
}
}
_headEnabled = params.primaryControllerFlags[PrimaryControllerType_Head] & (uint8_t)ControllerFlags::Enabled;
bool leftHandEnabled = params.primaryControllerFlags[PrimaryControllerType_LeftHand] & (uint8_t)ControllerFlags::Enabled;

View file

@ -88,8 +88,8 @@ public:
AnimPose secondaryControllerPoses[NumSecondaryControllerTypes]; // rig space
uint8_t secondaryControllerFlags[NumSecondaryControllerTypes];
bool isTalking;
float inputX;
float inputZ;
float inputX = 0.0f;
float inputZ = 0.0f;
bool reactionEnabledFlags[NUM_AVATAR_BEGIN_END_REACTIONS];
bool reactionTriggers[NUM_AVATAR_TRIGGER_REACTIONS];
HFMJointShapeInfo hipsShapeInfo;