示例#1
0
        public Quaternion GetBoneRotation(uint actorId, Side side, Finger fingerId, FingerBone fingerboneId)
        {
            SideBone   sideBoneId = BoneReference.HumanoidSideBone(fingerId, fingerboneId);
            Quaternion q          = GetBoneRotation(actorId, side, sideBoneId);

            return(q);
        }
示例#2
0
        public static Bone HumanoidBone(Side side, SideBone sideBone)
        {
            if (sideBone == Tracking.SideBone.None)
            {
                return(Bone.None);
            }

            int shoulderIx;
            int sideBoneIx;

            switch (side)
            {
            case Side.Left:
                shoulderIx = (int)Bone.LeftShoulder;
                sideBoneIx = (int)sideBone;
                return((Bone)(shoulderIx + sideBoneIx - 1));

            //return (int)Bone.LeftShoulder + ((int)sideBone - 1);
            case Side.Right:
                shoulderIx = (int)Bone.RightShoulder;
                sideBoneIx = (int)sideBone;
                return((Bone)(shoulderIx + sideBoneIx - 1));

            default:
                return(Bone.None);
            }
        }
示例#3
0
        public BonePose AddBone(Bone _boneId, bool useSideBones = false)
        {
            BonePose newBonePose = new BonePose();

            SideBone sideBone = BoneReference.HumanoidSideBone(_boneId);

            if (sideBone == SideBone.None)
            {
                newBonePose.boneRef = new BoneReference()
                {
                    type   = BoneType.AllBones,
                    boneId = _boneId
                };
            }
            else
            {
                newBonePose.boneRef = new BoneReference()
                {
                    type       = BoneType.SideBones,
                    sideBoneId = sideBone
                };
            }
            newBonePose.translation = Vector3.zero;
            newBonePose.rotation    = Quaternion.identity;
            bonePoses.Add(newBonePose);

            return(newBonePose);
        }
示例#4
0
 public SensorBone(TrackingDevice tracker, uint actorId, Bone boneId)
 {
     this.tracker    = tracker;
     this.actorId    = actorId;
     this.side       = Side.AnySide;
     this.boneId     = boneId;
     this.sideBoneId = SideBone.None;
 }
示例#5
0
 public SensorBone(TrackingDevice tracker, uint actorId, Side side, SideBone sideBoneId)
 {
     this.tracker    = tracker;
     this.actorId    = actorId;
     this.boneId     = Bone.None;
     this.side       = side;
     this.sideBoneId = sideBoneId;
 }
        private void StartFinger(Side side, FingersTarget.TargetedFinger finger, int fingerIx)
        {
            SideBone sideBoneId = BoneReference.HumanoidSideBone((Finger)fingerIx, FingerBone.Proximal);

            fingerSensors[fingerIx, 0] = neuronTracker.device.GetBone(0, side, sideBoneId);

            sideBoneId = BoneReference.HumanoidSideBone((Finger)fingerIx, FingerBone.Intermediate);
            fingerSensors[fingerIx, 1] = neuronTracker.device.GetBone(0, side, sideBoneId);

            sideBoneId = BoneReference.HumanoidSideBone((Finger)fingerIx, FingerBone.Distal);
            fingerSensors[fingerIx, 2] = neuronTracker.device.GetBone(0, side, sideBoneId);
        }
示例#7
0
        public BonePose GetSideBone(SideBone sideBoneId)
        {
            if (bonePoses != null)
            {
                for (int i = 0; i < bonePoses.Count; i++)
                {
                    if (bonePoses[i].boneRef.sideBoneId == sideBoneId)
                    {
                        return(bonePoses[i]);
                    }
                }
            }

            return(null);
        }
示例#8
0
        public BonePose CheckBone(Bone boneId, bool useSideBones = false)
        {
            BonePose bone;

            if (useSideBones)
            {
                SideBone sideBone = BoneReference.HumanoidSideBone(boneId);
                bone = GetSideBone(sideBone);
            }
            else
            {
                bone = GetBone(boneId);
            }
            if (bone == null)
            {
                bone = AddBone(boneId, useSideBones);
            }
            return(bone);
        }
        public void SetReferenceLocal(HumanoidControl humanoid, Side side = Side.AnySide)
        {
            if (side == Side.AnySide)
            {
                if (boneRef.boneId < 0 || boneRef.boneId > Bone.Count)
                {
                    return;
                }

                HumanoidTarget.TargetedBone targetedBone = humanoid.GetBone(boneRef.boneId);
                if (targetedBone.parent == null)
                {
                    SetReferenceRoot();
                }
                else
                {
                    referenceBoneRef.type   = BoneType.AllBones;
                    referenceBoneRef.boneId = targetedBone.parent.boneId;
                }
            }
            else
            {
                if (boneRef.sideBoneId < 0 || boneRef.sideBoneId > SideBone.Count)
                {
                    return;
                }

                HumanoidTarget.TargetedBone targetedBone = humanoid.GetBone(side, boneRef.sideBoneId);
                if (targetedBone.parent == null)
                {
                    SetReferenceRoot();
                }
                else
                {
                    referenceBoneRef.type = BoneType.SideBones;
                    SideBone parentSideBoneId = BoneReference.HumanoidSideBone(targetedBone.parent.boneId);
                    referenceBoneRef.sideBoneId = parentSideBoneId;
                }
            }
        }
示例#10
0
        private void BoneSelector(ref BoneReference bone)
        {
            switch (bone.type)
            {
            case BoneType.AllBones:
                bone.boneId = (Bone)EditorGUILayout.EnumPopup(bone.boneId);
                return;

            case BoneType.CenterBones:
                CenterBone centerBone = (CenterBone)EditorGUILayout.EnumPopup(bone.centerBoneId);
                if (centerBone != CenterBone.Unknown)
                {
                    bone.centerBoneId = centerBone;
                }
                return;

            case BoneType.SideBones:
                if (bone.boneId == Bone.None)
                {
                    SideBone sideBoneId = bone.sideBoneId;
                    bone.sideBoneId = (SideBone)EditorGUILayout.EnumPopup(sideBoneId);
                }
                else
                {
                    bone.sideBoneId = (SideBone)EditorGUILayout.EnumPopup(bone.sideBoneId);
                }
                bone.side = (Side)EditorGUILayout.EnumPopup(bone.side, GUILayout.Width(80));
                return;

            case BoneType.FaceBones:
                bone.faceBoneId = (FacialBone)EditorGUILayout.EnumPopup(bone.faceBoneId);
                return;

            default:
                return;
            }
        }
示例#11
0
 public virtual SensorBone GetBone(uint actorId, Side side, SideBone boneId)
 {
     return(new SensorBone(this, actorId, side, boneId));
 }
示例#12
0
        public override void OnInspectorGUI()
        {
            for (int i = 0; i < pose.bonePoses.Count; i++)
            {
                BonePose bonePoses = pose.bonePoses[i];
                if (bonePoses == null)
                {
                    continue;
                }

                if (bonePoses.boneRef.type == BoneType.SideBones && bonePoses.boneRef.side == Side.AnySide)
                {
                    EditorGUILayout.HelpBox("Configure AnySide like Left Side", MessageType.Info);
                }
                EditorGUILayout.BeginHorizontal();
                bonePoses.boneRef.type = (BoneType)EditorGUILayout.EnumPopup(bonePoses.boneRef.type, GUILayout.Width(159));
                Bone     oldBoneId     = bonePoses.boneRef.boneId;
                SideBone oldSideBoneId = bonePoses.boneRef.sideBoneId;
                BoneSelector(ref bonePoses.boneRef);
                EditorGUILayout.EndHorizontal();

                if (bonePoses.boneRef.boneId != oldBoneId || bonePoses.boneRef.sideBoneId != oldSideBoneId)
                {
                    PresetReferenceBone(bonePoses.boneRef, ref bonePoses.referenceBoneRef);
                }

                EditorGUILayout.BeginHorizontal();
                EditorGUILayout.LabelField("Reference", GUILayout.MaxWidth(65));
                bonePoses.referenceBoneRef.type = (BoneType)EditorGUILayout.EnumPopup(bonePoses.referenceBoneRef.type, GUILayout.Width(90));

                BoneSelector(ref bonePoses.referenceBoneRef); EditorGUILayout.EndHorizontal();

                EditorGUI.indentLevel++;

                EditorGUILayout.BeginHorizontal();
                bonePoses.setTranslation = EditorGUILayout.ToggleLeft("Translation", bonePoses.setTranslation, GUILayout.MaxWidth(131));
                if (bonePoses.setTranslation)
                {
                    bonePoses.translation = EditorGUILayout.Vector3Field("", bonePoses.translation);
                }
                EditorGUILayout.EndHorizontal();

                EditorGUILayout.BeginHorizontal();
                bonePoses.setRotation = EditorGUILayout.ToggleLeft("Rotation", bonePoses.setRotation, GUILayout.MaxWidth(131));
                if (bonePoses.setRotation)
                {
                    Vector3 eulerAngles = EditorGUILayout.Vector3Field("", bonePoses.rotation.eulerAngles);
                    if (eulerAngles != bonePoses.rotation.eulerAngles)
                    {
                        bonePoses.rotation.eulerAngles = eulerAngles;
                    }
                }
                EditorGUILayout.EndHorizontal();

                EditorGUILayout.BeginHorizontal();
                bonePoses.setScale = EditorGUILayout.ToggleLeft("Scale", bonePoses.setScale, GUILayout.MaxWidth(131));
                if (bonePoses.setScale)
                {
                    bonePoses.scale = EditorGUILayout.Vector3Field("", bonePoses.scale);
                }
                EditorGUILayout.EndHorizontal();

                EditorGUI.indentLevel--;
            }
            Buttons();
            EditorUtility.SetDirty(pose);
        }
示例#13
0
        public static SideBone HumanoidSideBone(Finger fingerId, FingerBone fingerBoneId)
        {
            SideBone boneId = (SideBone)(((int)Tracking.SideBone.ThumbProximal - 1) + (int)fingerId * 4 + (int)fingerBoneId);

            return(boneId);
        }
示例#14
0
 unsafe public virtual SensorBone GetBone(uint actorId, Side side, SideBone boneId)
 {
     return(new SensorBone(null));
 }
示例#15
0
 public virtual float GetBoneConfidence(uint actorId, Side side, SideBone boneId)
 {
     return(0);
 }
示例#16
0
        public override SensorTransformC GetBoneData(uint actorId, Side side, SideBone boneId)
        {
            SensorTransformC sensorTransform = Neuron_GetSideBoneData(actorId, side, boneId);

            return(sensorTransform);
        }
示例#17
0
        unsafe public override SensorBone GetBone(uint actorId, Side side, SideBone boneId)
        {
            SensorTransformC *pTargetTransform = Neuron_GetSideBone(actorId, side, boneId);

            return(new SensorBone(pTargetTransform));
        }
示例#18
0
 public override SensorTransformC GetBoneData(uint actorId, Side side, SideBone boneId)
 {
     return(Astra_GetSideBoneData(actorId, side, boneId));
 }
示例#19
0
 public virtual SensorTransformC GetBoneData(uint actorId, Side side, SideBone boneId)
 {
     return(new SensorTransformC());
 }
示例#20
0
 unsafe private static extern SensorTransformC *Neuron_GetSideBone(uint actorId, Side side, SideBone boneId);
示例#21
0
 public virtual Vector3 GetBonePosition(uint actorId, Side side, SideBone boneId)
 {
     return(Vector3.zero);
 }
示例#22
0
 private static extern SensorTransformC Neuron_GetSideBoneData(uint actorId, Side side, SideBone boneId);
示例#23
0
 public virtual Quaternion GetBoneRotation(uint actorId, Side side, SideBone boneId)
 {
     return(Quaternion.identity);
 }