コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        public HandPoseData Mix(HandPoseData original)
        {
            for (var i = 0; i < HandPoseData.HumanFingerCount; i++)
            {
                if (_fingerEnabledArray[i])
                {
                    original[i] = _handPose[i];
                }
            }

            return(original);
        }
コード例 #4
0
    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;
    }
コード例 #5
0
        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();
            }
        }