public void Add(MusclePropertyName musclePropertyName, PoseTemplate srcPoseTemplate) { var handPose = new HandPoseData(); handPose.name = srcPoseTemplate.name; { var beginMuscle = HumanTrait.MuscleFromBone((int)HumanBodyBones.LeftThumbProximal, 2); var endMuscle = HumanTrait.MuscleFromBone((int)HumanBodyBones.LeftLittleDistal, 2); var muscleDic = new Dictionary <string, float>(); for (int muscle = beginMuscle; muscle <= endMuscle; muscle++) { var index = ArrayUtility.IndexOf(srcPoseTemplate.musclePropertyNames, musclePropertyName.PropertyNames[muscle]); if (index < 0) { continue; } muscleDic.Add(srcPoseTemplate.musclePropertyNames[index], srcPoseTemplate.muscleValues[index]); } handPose.musclePropertyNames = muscleDic.Keys.ToArray(); handPose.muscleValues = muscleDic.Values.ToArray(); } if (list == null) { list = new List <HandPoseData>(); } list.Add(handPose); }
private HandPoseData LerpHandPoseData(HandPoseData a, HandPoseData b, float t) { var result = new HandPoseData(); for (var i = 0; i < HandPoseData.HumanFingerCount; i++) { result[i] = LerpFingerPoseData(a[i], b[i], t); } return(result); }
public HandPoseData Mix(HandPoseData original) { for (var i = 0; i < HandPoseData.HumanFingerCount; i++) { if (_fingerEnabledArray[i]) { original[i] = _handPose[i]; } } return(original); }
private void OnPoseDetected(HandPoseData detected) { if (_currentHandPose != null) { if (detected.name == Rock && _currentHandPose.name == Paper) { SpawnKeyblade(true); } else if (detected.name == Paper && _currentHandPose.name == Rock) { SpawnKeyblade(false); } Debug.Log($"[{GetType().Name}] detected hand pose: {detected.name}, previous hand pose: {_currentHandPose.name}"); } _currentHandPose = detected; }
private void UpdateJoycons() { var targetLeftHandPoseData = DefaultHandPose; var targetRightHandPoseData = DefaultHandPose; var joycons = JoyconManager.Instance.j; if (joycons == null) { IsConnectedLeftJoyCon = false; IsConnectedRightJoyCon = false; return; } foreach (var joycon in joycons) { if (joycon.isLeft) { IsConnectedLeftJoyCon = true; } else { IsConnectedRightJoyCon = true; } var handPoses = joycon.isLeft ? _leftHandPoses : _rightHandPoses; for (var i = 0; i < handPoses.Length; i++) { if (!handPoses[i]) { continue; } if (!joycon.GetButton((Joycon.Button)i)) { continue; } if (joycon.isLeft) { targetLeftHandPoseData = handPoses[i].Mix(targetLeftHandPoseData); } else { targetRightHandPoseData = handPoses[i].Mix(targetRightHandPoseData); } } } _leftHandPoseData = LerpHandPoseData(_leftHandPoseData, targetLeftHandPoseData, _lerpCoefficient); _rightHandPoseData = LerpHandPoseData(_rightHandPoseData, targetRightHandPoseData, _lerpCoefficient); switch (_leftHandSource) { case HandSourceType.None: var defaultHandPose = DefaultHandPose; _leftHandController.SetHandPose(ref defaultHandPose); break; case HandSourceType.Left: _leftHandController.SetHandPose(ref _leftHandPoseData); break; case HandSourceType.Right: _leftHandController.SetHandPose(ref _rightHandPoseData); break; default: throw new ArgumentOutOfRangeException(); } switch (_rightHandSource) { case HandSourceType.None: var defaultHandPose = DefaultHandPose; _rightHandController.SetHandPose(ref defaultHandPose); break; case HandSourceType.Left: _rightHandController.SetHandPose(ref _leftHandPoseData); break; case HandSourceType.Right: _rightHandController.SetHandPose(ref _rightHandPoseData); break; default: throw new ArgumentOutOfRangeException(); } }