コード例 #1
0
        public void ApplyAimDir(Vector3 dir, Vector3 positionOffset, int bonusSortingOrder)
        {
            // Anim default dir is pointing RIGHT = Vector3(1, 0);
            float aimAngle = GetAngleFromVectorFloat(dir);

            //foreach (V_Skeleton_Anim skeletonAnim in anims) {
            for (int i = 0; i < anims.Length; i++)
            {
                V_Skeleton_Anim skeletonAnim = anims[i];

                // Make sure the skeleton updater that will use this anim knows the sorting order might change
                //skeletonAnim.defaultHasVariableSortingOrder = true;

                V_Skeleton_Frame[] skeletonFrameArr = skeletonAnim.GetFrames();
                for (int j = 0; j < skeletonFrameArr.Length; j++)
                {
                    V_Skeleton_Frame skeletonFrame = skeletonFrameArr[j];
                    // Rotate based on base position
                    Vector3 framePosition    = skeletonFrame.GetBasePosition();
                    Vector3 newFramePosition = ApplyRotationToVector(framePosition, dir);
                    skeletonFrame.ApplyTemporaryPosition(newFramePosition + positionOffset);

                    // Rotate based on base rotation
                    skeletonFrame.ApplyBonusRotation(aimAngle);

                    // Apply bonus sorting order
                    skeletonFrame.ApplyBonusSortingOrder(bonusSortingOrder);
                }
            }
        }
コード例 #2
0
        public static V_Skeleton_Frame GetSmoothFrame(V_Skeleton_Frame prevFrame, V_Skeleton_Frame frame, int index)
        {
            Vector3 posInc       = (frame.pos - prevFrame.pos) / frame.frameCount;
            float   rotInc       = ((frame.rot - prevFrame.rot) * 1f) / frame.frameCount;
            float   sizeInc      = ((frame.size - prevFrame.size) * 1f) / frame.frameCount;
            float   scaleXInc    = ((frame.scaleX - prevFrame.scaleX) * 1f) / frame.frameCount;
            float   scaleYInc    = ((frame.scaleY - prevFrame.scaleY) * 1f) / frame.frameCount;
            Vector3 v00offsetInc = (frame.v00offset - prevFrame.v00offset) / frame.frameCount;
            Vector3 v01offsetInc = (frame.v01offset - prevFrame.v01offset) / frame.frameCount;
            Vector3 v10offsetInc = (frame.v10offset - prevFrame.v10offset) / frame.frameCount;
            Vector3 v11offsetInc = (frame.v11offset - prevFrame.v11offset) / frame.frameCount;

            return(new V_Skeleton_Frame(
                       -1,
                       prevFrame.pos + (posInc * index),
                       (prevFrame.rot + (rotInc * index)),
                       "",
                       prevFrame.uvType,
                       (prevFrame.size + (sizeInc * index)),
                       (prevFrame.scaleX + (scaleXInc * index)),
                       (prevFrame.scaleY + (scaleYInc * index)),
                       prevFrame.sortingOrder,
                       prevFrame.pivot,
                       prevFrame.v00offset + (v00offsetInc * index),
                       prevFrame.v01offset + (v01offsetInc * index),
                       prevFrame.v10offset + (v10offsetInc * index),
                       prevFrame.v11offset + (v11offsetInc * index)
                       ));
        }
コード例 #3
0
 public void SelectKeyframeLeft()
 {
     //Look for next keyframe
     if (GetKeyframes().Count > 1)
     {
         //Theres more than one Keyframe
         int newFrameIndex = currentFrame - 1;
         if (newFrameIndex < 0)
         {
             newFrameIndex = frames.Length - 1;
         }
         while (newFrameIndex != currentFrame)
         {
             V_Skeleton_Frame frame = frames[newFrameIndex];
             if (frame.frameCount != -1)
             {
                 //Is keyframe, select this one
                 currentFrame     = newFrameIndex;
                 currentAnimFrame = frames[currentFrame];
                 break;
             }
             newFrameIndex--;
             if (newFrameIndex < 0)
             {
                 newFrameIndex = frames.Length - 1;
             }
         }
     }
 }
コード例 #4
0
        public void AddKeyframe()
        {
            List <V_Skeleton_Frame> newFrames = new List <V_Skeleton_Frame>(frames);

            if (currentAnimFrame.frameCount != -1)
            {
                //Is keyframe, duplicate this one
                V_Skeleton_Frame cloned = currentAnimFrame.CloneNew();
                newFrames.Insert(newFrames.IndexOf(currentAnimFrame) + 1, cloned);
                SetFrames(newFrames.ToArray());
                currentFrame     = System.Array.IndexOf(frames, cloned);
                currentAnimFrame = newFrames[currentFrame];
            }
            else
            {
                //Not keyframe, clone last keyframe
                List <V_Skeleton_Frame> keyframes = GetKeyframes();
                V_Skeleton_Frame        cloned    = keyframes[keyframes.Count - 1].CloneNew();
                newFrames.Add(cloned);
                SetFrames(newFrames.ToArray());
                currentFrame     = System.Array.IndexOf(frames, cloned);
                currentAnimFrame = newFrames[currentFrame];
            }
            RemakeTween();
        }
コード例 #5
0
 public V_Skeleton_Anim(V_Skeleton_Frame[] _frames, BodyPart _bodyPart, float _frameRate)
 {
     SetFrames(_frames);
     currentAnimFrame  = frames[0];
     bodyPart          = _bodyPart;
     frameRate         = _frameRate;
     frameRateOriginal = frameRate;
 }
コード例 #6
0
        public void AddKeyframeFirstToEnd()
        {
            List <V_Skeleton_Frame> newFrames = new List <V_Skeleton_Frame>(frames);

            List <V_Skeleton_Frame> keyframes     = GetKeyframes();
            V_Skeleton_Frame        firstKeyframe = keyframes[0];
            V_Skeleton_Frame        cloned        = firstKeyframe.CloneNew();

            newFrames.Add(cloned);
            SetFrames(newFrames.ToArray());
            currentFrame     = System.Array.IndexOf(frames, cloned);
            currentAnimFrame = newFrames[currentFrame];

            RemakeTween();
        }
コード例 #7
0
        public void Update(float deltaTime)
        {
            frameTimer = frameTimer - deltaTime;
            while (frameTimer < 0 && (canLoop || !looped))
            {
                frameTimer   = frameTimer + frameRate;
                currentFrame = currentFrame + 1;
                if (currentFrame >= framesLength)
                {
                    currentFrame = 0;
                    looped       = true;
                }

                currentAnimFrame = frames[currentFrame];
                if (hasAnimFrameTrigger[currentFrame])
                {
                    if (onAnimTrigger != null)
                    {
                        onAnimTrigger(currentAnimFrame.trigger);
                    }
                }

                if (currentFrame >= framesLength - 1)
                {
                    // Last frame
                    if (!canLoop)
                    {
                        looped = true;
                        if (onAnimComplete != null)
                        {
                            onAnimComplete(this);
                        }
                        break;
                    }
                    else
                    {
                        if (onAnimComplete != null)
                        {
                            onAnimComplete(this);
                        }
                    }
                }
            }
        }
コード例 #8
0
        public static V_Skeleton_Frame[] Smooth(V_Skeleton_Frame[] keyframes)
        {
            List <V_Skeleton_Frame> ret = new List <V_Skeleton_Frame>();

            V_Skeleton_Frame prevFrame = keyframes[0];

            ret.Add(prevFrame);
            for (int i = 1; i < keyframes.Length; i++)
            {
                V_Skeleton_Frame frame = keyframes[i];
                for (int j = 1; j < frame.frameCount - 1; j++)
                {
                    ret.Add(GetSmoothFrame(prevFrame, frame, j));
                }
                ret.Add(frame);
                prevFrame = frame;
            }

            return(ret.ToArray());
        }
コード例 #9
0
        public void RemakeTween()
        {
            List <V_Skeleton_Frame> keyframes = GetKeyframes();

            foreach (V_Skeleton_Frame keyframe in keyframes)
            {
                keyframe.RefreshVertices();
            }
            SetFrames(V_Skeleton_Frame.Smooth(keyframes.ToArray()));
            if (keyframes.IndexOf(currentAnimFrame) != -1)
            {
                //Currently selected keyframe, keep selection
                currentFrame = System.Array.IndexOf(frames, currentAnimFrame);
            }
            else
            {
                currentFrame = 0;
            }
            currentAnimFrame = frames[currentFrame];
        }
コード例 #10
0
        public void Update(float deltaTime)
        {
            frameTimer = frameTimer - deltaTime;
            while (frameTimer < 0)
            {
                frameTimer   = frameTimer + frameRate;
                currentFrame = currentFrame + 1;
                if (currentFrame >= framesLength)
                {
                    currentFrame = 0;
                    looped       = true;
                }

                currentAnimFrame = frames[currentFrame];
                if (hasAnimFrameTrigger[currentFrame])
                {
                    if (onAnimTrigger != null)
                    {
                        onAnimTrigger(currentAnimFrame.trigger);
                    }
                }
            }
        }
コード例 #11
0
        private void Play()
        {
            int verticesIndex  = 0;
            int uvsIndex       = 0;
            int trianglesIndex = 0;

            for (int i = 0; i < animsLength; i++)
            {
                V_Skeleton_Anim  anim  = anims[i];
                V_Skeleton_Frame frame = anim.GetCurrentAnimFrame();

                V_UnitSkeleton.AddSquare(i, verticesIndex, verticesArr, uvsIndex, uvsArr, trianglesIndex, trianglesArr, frame.pos, frame.v00 + frame.v00offset, frame.v01 + frame.v01offset, frame.v10 + frame.v10offset, frame.v11 + frame.v11offset, V_UnitSkeleton.GetUV_Type(frame.uvType));
                verticesIndex  = verticesIndex + 4;
                uvsIndex       = uvsIndex + 4;
                trianglesIndex = trianglesIndex + 6;
            }

            //mesh.triangles = null;
            mesh.Clear();
            mesh.vertices  = verticesArr;
            mesh.uv        = uvsArr;
            mesh.triangles = trianglesArr;
        }
コード例 #12
0
 public static string Save_Static(V_Skeleton_Frame frame)
 {
     return(frame.Save());
 }
コード例 #13
0
 public void SelectFrame(int frameIndex)
 {
     currentFrame     = frameIndex;
     currentAnimFrame = frames[currentFrame];
 }
コード例 #14
0
 public void Reset()
 {
     currentFrame     = 0;
     currentAnimFrame = frames[currentFrame];
     looped           = false;
 }