Ejemplo n.º 1
0
 public static void AddBones(this SkeletonCache skeleton, BoneCache[] bones, bool worldPositionStays)
 {
     foreach (var bone in bones)
     {
         skeleton.AddBone(bone, worldPositionStays);
     }
 }
Ejemplo n.º 2
0
        public static BoneCache CreateBone(this SkeletonCache skeleton, BoneCache parentBone, Vector3 position, Vector3 endPosition, bool isChained, string name)
        {
            Debug.Assert(skeleton != null);

            if (parentBone != null)
            {
                Debug.Assert(skeleton.Contains(parentBone));
            }

            var bone = skeleton.skinningCache.CreateCache <BoneCache>();

            bone.SetParent(parentBone);
            bone.name          = name;
            bone.bindPoseColor = ModuleUtility.CalculateNiceColor(skeleton.BoneCount, 6);
            bone.position      = position;
            bone.endPosition   = endPosition;

            if (isChained && parentBone != null)
            {
                parentBone.chainedChild = bone;
            }

            skeleton.AddBone(bone);


            return(bone);
        }
Ejemplo n.º 3
0
 private void OnSkeletonTopologyChanged(SkeletonCache skeleton)
 {
     if (m_Model.view.visible)
     {
         m_Model.view.OnSkeletonChanged();
     }
 }
Ejemplo n.º 4
0
        public static void MoveJoints(this SkeletonCache skeleton, BoneCache[] bones, Vector3 deltaPosition)
        {
            Debug.Assert(skeleton != null);

            foreach (var bone in bones)
            {
                Debug.Assert(bone != null);
                Debug.Assert(skeleton.Contains(bone));

                var childrenWorldPose = bone.GetChildrenWoldPose();
                var endPosition       = bone.endPosition;

                bone.position += deltaPosition;

                if (bone.localLength > 0f)
                {
                    bone.endPosition = endPosition;
                }

                if (bone.parentBone != null && bone.parentBone.chainedChild == bone)
                {
                    bone.parentBone.OrientToChainedChild(true);
                }

                bone.SetChildrenWorldPose(childrenWorldPose);

                if (bone.chainedChild != null)
                {
                    bone.OrientToChainedChild(true);
                }
            }
        }
Ejemplo n.º 5
0
        public static void FreeMoveBones(this SkeletonCache skeleton, BoneCache[] bones, Vector3 deltaPosition)
        {
            Debug.Assert(skeleton != null);

            foreach (var bone in bones)
            {
                Debug.Assert(bone != null);
                Debug.Assert(skeleton.Contains(bone));

                var childrenWorldPose = bone.GetChildrenWoldPose();

                if (bone.chainedChild != null && ArrayUtility.Contains(bones, bone.chainedChild) == false)
                {
                    bone.chainedChild = null;
                }

                if (bone.parentBone != null && bone.parentBone.chainedChild == bone && ArrayUtility.Contains(bones, bone.parentBone) == false)
                {
                    bone.parentBone.chainedChild = null;
                }

                bone.position += deltaPosition;

                bone.SetChildrenWorldPose(childrenWorldPose);
            }
        }
Ejemplo n.º 6
0
 private void StorePersistentStateVisibilityForSkeleton(SkeletonCache skeleton, SpriteCache sprite)
 {
     foreach (var bone in skeleton.bones)
     {
         var id = GetBoneNameHash(m_StringBuilder, bone, sprite);
         m_State.lastBoneVisibility[id] = bone.isVisible;
     }
 }
 void OnSkeletonTopologyChanged(SkeletonCache skeleton)
 {
     SetAnimationEvent(new AnimationEvent()
     {
         sub_type = AnimationEventType.SkeletonTopologyChanged,
         data     = ""
     });
 }
Ejemplo n.º 8
0
 void OnSkeletonTopologyChanged(SkeletonCache skeleton)
 {
     if (m_Model.view.visible)
     {
         m_Model.view.UpdateList(m_Model.influencedSprites);
         m_Model.view.UpdateSelection(new TransformCache[] { m_Model.selectedSprite });
     }
 }
 void OnSkeletonPreviewPoseChanged(SkeletonCache skeleton)
 {
     SetAnimationEvent(new AnimationEvent()
     {
         sub_type = AnimationEventType.SkeletonPreviewPoseChanged,
         data     = ""
     });
 }
Ejemplo n.º 10
0
 private void SetSkeleton(SkeletonCache newSkeleton)
 {
     if (skeleton != newSkeleton)
     {
         m_Skeleton = newSkeleton;
         Reset();
     }
 }
Ejemplo n.º 11
0
        //TODO: Bring this to a better place, maybe CharacterController
        private void SkeletonPreviewPoseChanged(SkeletonCache skeleton)
        {
            var character = skinningCache.character;

            if (character != null && character.skeleton == skeleton)
            {
                skinningCache.SyncSpriteSheetSkeletons();
            }
        }
Ejemplo n.º 12
0
        private void SetupSkeleton(SkeletonCache sk)
        {
            m_RectBoneSelector.bones = null;
            skeleton = sk;

            if (skeleton != null)
            {
                m_RectBoneSelector.bones = skeleton.bones;
            }
        }
Ejemplo n.º 13
0
        private void SkeletonBindPoseChanged(SkeletonCache skeleton)
        {
            var character = skinningCache.character;

            if (character != null && character.skeleton == skeleton)
            {
                skinningCache.SyncSpriteSheetSkeletons();
            }
            DataModified();
        }
        void OnSkeletonTopologyChanged(SkeletonCache skeleton)
        {
            if (m_Model.view.visible)
            {
                UpdateSelectedSpriteBoneInfluence();

                m_Model.view.UpdateList(m_Model.selectionInfluencedBones);
                m_Model.view.UpdateSelection(m_Model.selectedBones);
            }
        }
Ejemplo n.º 15
0
 public static void SetAllBoneVisibility(SkeletonCache skeleton, bool visibility)
 {
     if (skeleton != null)
     {
         foreach (var bone in skeleton.bones)
         {
             bone.isVisible = visibility;
         }
     }
 }
Ejemplo n.º 16
0
        public static void SetEndPosition(this SkeletonCache skeleton, BoneCache bone, Vector3 endPosition)
        {
            Debug.Assert(skeleton != null);
            Debug.Assert(bone != null);
            Debug.Assert(skeleton.Contains(bone));

            var childrenStorage = bone.GetChildrenWoldPose();

            bone.endPosition = endPosition;
            bone.SetChildrenWorldPose(childrenStorage);
        }
Ejemplo n.º 17
0
 private void UpdateVisibilityFromPersistentState(SkeletonCache skeleton, SpriteCache sprite)
 {
     foreach (var bone in skeleton.bones)
     {
         var id = GetBoneNameHash(m_StringBuilder, bone, sprite);
         if (m_State.lastBoneVisibility.TryGetValue(id, out var visibility))
         {
             bone.isVisible = visibility;
         }
     }
 }
Ejemplo n.º 18
0
 private void StorePersistentStatePoseForSkeleton(SkeletonCache skeleton, SpriteCache sprite)
 {
     foreach (var bone in skeleton.bones)
     {
         var id = GetBoneNameHash(m_StringBuilder, bone, sprite);
         if (bone.NotInDefaultPose())
         {
             m_State.lastPreviewPose[id] = bone.localPose;
         }
     }
 }
Ejemplo n.º 19
0
        public static void RotateBones(this SkeletonCache skeleton, BoneCache[] bones, float deltaAngle)
        {
            Debug.Assert(skeleton != null);

            foreach (var bone in bones)
            {
                Debug.Assert(bone != null);
                Debug.Assert(skeleton.Contains(bone));

                bone.localRotation *= Quaternion.AngleAxis(deltaAngle, Vector3.forward);
            }
        }
Ejemplo n.º 20
0
        public static void DestroyBones(this SkeletonCache skeleton, BoneCache[] bones)
        {
            Debug.Assert(skeleton != null);

            foreach (var bone in bones)
            {
                Debug.Assert(bone != null);
                Debug.Assert(skeleton.Contains(bone));

                skeleton.DestroyBone(bone);
            }
        }
Ejemplo n.º 21
0
        public void RestoreToolStateFromPersistentState()
        {
            events.boneSelectionChanged.RemoveListener(BoneSelectionChanged);
            events.skeletonPreviewPoseChanged.RemoveListener(SkeletonPreviewPoseChanged);
            events.toolChanged.RemoveListener(ToolChanged);

            SkeletonCache skeleton = null;

            if (hasCharacter)
            {
                skeleton = character.skeleton;
            }
            else if (selectedSprite != null)
            {
                skeleton = selectedSprite.GetSkeleton();
            }

            skeletonSelection.Clear();
            if (skeleton != null && m_State.lastBoneSelectionIds.Count > 0)
            {
                bool selectionChanged = false;
                foreach (var bone in skeleton.bones)
                {
                    var id = GetBoneNameHash(m_StringBuilder, bone);
                    if (m_State.lastBoneSelectionIds.Contains(id))
                    {
                        skeletonSelection.Select(bone, true);
                        selectionChanged = true;
                    }
                }
                if (selectionChanged)
                {
                    events.boneSelectionChanged.Invoke();
                }
            }

            if (m_State.lastPreviewPose.Count > 0)
            {
                if (hasCharacter)
                {
                    UpdatePoseFromPersistentState(character.skeleton, null);
                }
                foreach (var sprite in m_SkeletonMap.Keys)
                {
                    UpdatePoseFromPersistentState(m_SkeletonMap[sprite], sprite);
                }
            }

            events.boneSelectionChanged.AddListener(BoneSelectionChanged);
            events.skeletonPreviewPoseChanged.AddListener(SkeletonPreviewPoseChanged);
            events.toolChanged.AddListener(ToolChanged);
        }
Ejemplo n.º 22
0
        public static void MoveBones(this SkeletonCache skeleton, BoneCache[] bones, Vector3 deltaPosition)
        {
            Debug.Assert(skeleton != null);

            foreach (var bone in bones)
            {
                Debug.Assert(bone != null);
                Debug.Assert(skeleton.Contains(bone));

                bone.position += deltaPosition;

                if (bone.parentBone != null && bone.parentBone.chainedChild == bone)
                {
                    bone.parentBone.OrientToChainedChild(false);
                }
            }
        }
Ejemplo n.º 23
0
        internal void BoneVisibilityChanged(SkeletonCache sc)
        {
            if (applyingChanges)
            {
                return;
            }

            m_State.lastBoneVisibility.Clear();
            if (hasCharacter)
            {
                StorePersistentStateVisibilityForSkeleton(character.skeleton, null);
            }
            foreach (var sprite in m_SkeletonMap.Keys)
            {
                StorePersistentStateVisibilityForSkeleton(m_SkeletonMap[sprite], sprite);
            }
        }
Ejemplo n.º 24
0
        private void SkeletonPreviewPoseChanged(SkeletonCache sc)
        {
            if (applyingChanges)
            {
                return;
            }

            m_State.lastPreviewPose.Clear();
            if (hasCharacter)
            {
                StorePersistentStatePoseForSkeleton(character.skeleton, null);
            }
            foreach (var sprite in m_SkeletonMap.Keys)
            {
                StorePersistentStatePoseForSkeleton(m_SkeletonMap[sprite], sprite);
            }
        }
Ejemplo n.º 25
0
        private void SkeletonTopologyChanged(SkeletonCache skeleton)
        {
            var character = skinningCache.character;

            if (character == null)
            {
                var sprite = FindSpriteFromSkeleton(skeleton);

                Debug.Assert(sprite != null);

                sprite.UpdateMesh(skeleton.bones);

                DataModified();
            }
            else if (character.skeleton == skeleton)
            {
                skinningCache.CreateSpriteSheetSkeletons();
                DataModified();
            }
        }
Ejemplo n.º 26
0
        private void UpdatePoseFromPersistentState(SkeletonCache skeleton, SpriteCache sprite)
        {
            bool poseChanged = false;

            foreach (var bone in skeleton.bones)
            {
                var      id = GetBoneNameHash(m_StringBuilder, bone, sprite);
                BonePose pose;
                if (m_State.lastPreviewPose.TryGetValue(id, out pose))
                {
                    bone.localPose = pose;
                    poseChanged    = true;
                }
            }
            if (poseChanged)
            {
                skeleton.SetPosePreview();
                events.skeletonPreviewPoseChanged.Invoke(skeleton);
            }
        }
Ejemplo n.º 27
0
        public static BoneCache SplitBone(this SkeletonCache skeleton, BoneCache boneToSplit, float splitLength, string name)
        {
            Debug.Assert(skeleton.Contains(boneToSplit));
            Debug.Assert(boneToSplit.length > splitLength);

            var endPosition   = boneToSplit.endPosition;
            var chainedChild  = boneToSplit.chainedChild;
            var splitPosition = boneToSplit.position + boneToSplit.right * splitLength;

            boneToSplit.length = splitLength;

            var bone = skeleton.CreateBone(boneToSplit, splitPosition, endPosition, true, name);

            if (chainedChild != null)
            {
                chainedChild.SetParent(bone);
                bone.chainedChild = chainedChild;
            }

            return(bone);
        }
Ejemplo n.º 28
0
        public DefaultPoseScope(SkeletonCache skeleton, bool useLocalPose = true)
        {
            Debug.Assert(skeleton != null);

            m_Skeleton     = skeleton;
            m_UseLocalPose = useLocalPose;

            if (m_Skeleton.isPosePreview)
            {
                m_DoRestorePose = true;

                if (useLocalPose)
                {
                    m_Pose = m_Skeleton.GetLocalPose();
                }
                else
                {
                    m_Pose = m_Skeleton.GetWorldPose();
                }

                m_Skeleton.RestoreDefaultPose();
            }
        }
Ejemplo n.º 29
0
        private SpriteCache FindSpriteFromSkeleton(SkeletonCache skeleton)
        {
            var sprites = skinningCache.GetSprites();

            return(sprites.FirstOrDefault(sprite => sprite.GetSkeleton() == skeleton));
        }
Ejemplo n.º 30
0
 private string[] GetUniqueBoneNames(BoneCache[] bones, SkeletonCache skeleton)
 {
     return(Array.ConvertAll(bones, b => skeleton.GetUniqueName(b)));
 }