diff --git a/interface/resources/avatar/avatar-animation.json b/interface/resources/avatar/avatar-animation.json index 2b8b3eb9b3..1c3a603eb5 100644 --- a/interface/resources/avatar/avatar-animation.json +++ b/interface/resources/avatar/avatar-animation.json @@ -5244,23 +5244,23 @@ "transitions": [ { "state": "idle", - "var": "isNotMoving" + "var": "isNotInput" }, { "state": "WALKFWD", - "var": "isMovingForward" + "var": "isInputForward" }, { "state": "WALKBWD", - "var": "isMovingBackward" + "var": "isInputBackward" }, { "state": "STRAFERIGHT", - "var": "isMovingRight" + "var": "isInputRight" }, { "state": "STRAFELEFT", - "var": "isMovingLeft" + "var": "isInputLeft" }, { "state": "turnRight", @@ -5313,19 +5313,19 @@ "transitions": [ { "state": "WALKFWD", - "var": "isMovingForward" + "var": "isInputForward" }, { "state": "WALKBWD", - "var": "isMovingBackward" + "var": "isInputBackward" }, { "state": "STRAFERIGHT", - "var": "isMovingRight" + "var": "isInputRight" }, { "state": "STRAFELEFT", - "var": "isMovingLeft" + "var": "isInputLeft" }, { "state": "turnRight", @@ -5380,19 +5380,19 @@ }, { "state": "idle", - "var": "isNotMoving" + "var": "isNotInput" }, { "state": "WALKBWD", - "var": "isMovingBackward" + "var": "isInputBackward" }, { "state": "STRAFERIGHT", - "var": "isMovingRight" + "var": "isInputRight" }, { "state": "STRAFELEFT", - "var": "isMovingLeft" + "var": "isInputLeft" }, { "state": "turnRight", @@ -5469,19 +5469,19 @@ }, { "state": "WALKFWD", - "var": "isMovingForward" + "var": "isInputForward" }, { "state": "WALKBWD", - "var": "isMovingBackward" + "var": "isInputBackward" }, { "state": "STRAFERIGHT", - "var": "isMovingRight" + "var": "isInputRight" }, { "state": "STRAFELEFT", - "var": "isMovingLeft" + "var": "isInputLeft" }, { "state": "strafeRightHmd", @@ -5533,19 +5533,19 @@ "transitions": [ { "state": "idleSettle", - "var": "isNotMoving" + "var": "isNotInput" }, { "state": "WALKBWD", - "var": "isMovingBackward" + "var": "isInputBackward" }, { "state": "STRAFERIGHT", - "var": "isMovingRight" + "var": "isInputRight" }, { "state": "STRAFELEFT", - "var": "isMovingLeft" + "var": "isInputLeft" }, { "state": "turnRight", @@ -5597,19 +5597,19 @@ "transitions": [ { "state": "idleSettle", - "var": "isNotMoving" + "var": "isNotInput" }, { "state": "WALKFWD", - "var": "isMovingForward" + "var": "isInputForward" }, { "state": "STRAFERIGHT", - "var": "isMovingRight" + "var": "isInputRight" }, { "state": "STRAFELEFT", - "var": "isMovingLeft" + "var": "isInputLeft" }, { "state": "turnRight", @@ -5661,19 +5661,19 @@ "transitions": [ { "state": "idleSettle", - "var": "isNotMoving" + "var": "isNotInput" }, { "state": "WALKFWD", - "var": "isMovingForward" + "var": "isInputForward" }, { "state": "WALKBWD", - "var": "isMovingBackward" + "var": "isInputBackward" }, { "state": "STRAFELEFT", - "var": "isMovingLeft" + "var": "isInputLeft" }, { "state": "turnRight", @@ -5725,19 +5725,19 @@ "transitions": [ { "state": "idleSettle", - "var": "isNotMoving" + "var": "isNotInput" }, { "state": "WALKFWD", - "var": "isMovingForward" + "var": "isInputForward" }, { "state": "WALKBWD", - "var": "isMovingBackward" + "var": "isInputBackward" }, { "state": "STRAFERIGHT", - "var": "isMovingRight" + "var": "isInputRight" }, { "state": "turnRight", @@ -5794,19 +5794,19 @@ }, { "state": "WALKFWD", - "var": "isMovingForward" + "var": "isInputForward" }, { "state": "WALKBWD", - "var": "isMovingBackward" + "var": "isInputBackward" }, { "state": "STRAFERIGHT", - "var": "isMovingRight" + "var": "isInputRight" }, { "state": "STRAFELEFT", - "var": "isMovingLeft" + "var": "isInputLeft" }, { "state": "turnLeft", @@ -5859,19 +5859,19 @@ }, { "state": "WALKFWD", - "var": "isMovingForward" + "var": "isInputForward" }, { "state": "WALKBWD", - "var": "isMovingBackward" + "var": "isInputBackward" }, { "state": "STRAFERIGHT", - "var": "isMovingRight" + "var": "isInputRight" }, { "state": "STRAFELEFT", - "var": "isMovingLeft" + "var": "isInputLeft" }, { "state": "turnRight", @@ -5919,15 +5919,15 @@ "transitions": [ { "state": "idleSettle", - "var": "isNotMoving" + "var": "isNotInput" }, { "state": "WALKFWD", - "var": "isMovingForward" + "var": "isInputForward" }, { "state": "WALKBWD", - "var": "isMovingBackward" + "var": "isInputBackward" }, { "state": "strafeLeftHmd", @@ -5935,11 +5935,11 @@ }, { "state": "STRAFERIGHT", - "var": "isMovingRight" + "var": "isInputRight" }, { "state": "STRAFELEFT", - "var": "isMovingLeft" + "var": "isInputLeft" }, { "state": "turnRight", @@ -5983,15 +5983,15 @@ "transitions": [ { "state": "idleSettle", - "var": "isNotMoving" + "var": "isNotInput" }, { "state": "WALKFWD", - "var": "isMovingForward" + "var": "isInputForward" }, { "state": "WALKBWD", - "var": "isMovingBackward" + "var": "isInputBackward" }, { "state": "strafeRightHmd", @@ -5999,11 +5999,11 @@ }, { "state": "STRAFERIGHT", - "var": "isMovingRight" + "var": "isInputRight" }, { "state": "STRAFELEFT", - "var": "isMovingLeft" + "var": "isInputLeft" }, { "state": "turnRight", @@ -6128,19 +6128,19 @@ "transitions": [ { "state": "WALKFWD", - "var": "isMovingForward" + "var": "isInputForward" }, { "state": "WALKBWD", - "var": "isMovingBackward" + "var": "isInputBackward" }, { "state": "STRAFERIGHT", - "var": "isMovingRight" + "var": "isInputRight" }, { "state": "STRAFELEFT", - "var": "isMovingLeft" + "var": "isInputLeft" }, { "state": "turnRight", diff --git a/interface/src/avatar/MySkeletonModel.cpp b/interface/src/avatar/MySkeletonModel.cpp index 38065c8095..8d92767321 100755 --- a/interface/src/avatar/MySkeletonModel.cpp +++ b/interface/src/avatar/MySkeletonModel.cpp @@ -315,6 +315,10 @@ void MySkeletonModel::updateRig(float deltaTime, glm::mat4 parentTransform) { const float TALKING_TIME_THRESHOLD = 0.75f; params.isTalking = head->getTimeWithoutTalking() <= TALKING_TIME_THRESHOLD; + //pass X and Z input key floats (-1 to 1) to rig + params.inputX = myAvatar->getDriveKey(MyAvatar::TRANSLATE_X); + params.inputZ = myAvatar->getDriveKey(MyAvatar::TRANSLATE_Z); + myAvatar->updateRigControllerParameters(params); _rig.updateFromControllerParameters(params, deltaTime); diff --git a/libraries/animation/src/Rig.cpp b/libraries/animation/src/Rig.cpp index 42980f47a7..0be05f843e 100644 --- a/libraries/animation/src/Rig.cpp +++ b/libraries/animation/src/Rig.cpp @@ -2160,6 +2160,51 @@ 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; bool rightHandEnabled = params.primaryControllerFlags[PrimaryControllerType_RightHand] & (uint8_t)ControllerFlags::Enabled; diff --git a/libraries/animation/src/Rig.h b/libraries/animation/src/Rig.h index 98431e1dca..8f5eddac00 100644 --- a/libraries/animation/src/Rig.h +++ b/libraries/animation/src/Rig.h @@ -88,6 +88,8 @@ public: AnimPose secondaryControllerPoses[NumSecondaryControllerTypes]; // rig space uint8_t secondaryControllerFlags[NumSecondaryControllerTypes]; bool isTalking; + float inputX; + float inputZ; bool reactionEnabledFlags[NUM_AVATAR_BEGIN_END_REACTIONS]; bool reactionTriggers[NUM_AVATAR_TRIGGER_REACTIONS]; HFMJointShapeInfo hipsShapeInfo;