コード例 #1
0
        /// <summary>
        /// Connects the specified path to the current path adding transitions between them
        /// </summary>
        /// <param name="animationPath">Animation path to connect with current path</param>
        public void ConnectTo(AnimationPath animationPath)
        {
            var lastItem = this.items[this.items.Count - 1];
            var nextItem = animationPath.items[0];

            if (lastItem.ClipName != nextItem.ClipName)
            {
                var newItem = new AnimationPathItem(lastItem.ClipName + nextItem.ClipName, false, 1, 1f, true);

                animationPath.items.Insert(0, newItem);
            }
        }
コード例 #2
0
        /// <summary>
        /// Adds a new animation item to the animation path
        /// </summary>
        /// <param name="clipName">Clip name to play</param>
        /// <param name="loop">Loops</param>
        /// <param name="repeats">Number of iterations</param>
        /// <param name="timeDelta">Delta time to apply on this animation clip</param>
        private void Add(string clipName, bool loop, int repeats, float timeDelta)
        {
            AnimationPathItem prev = null;

            if (this.items.Count > 0)
            {
                //Gets last item
                prev = this.items[this.items.Count - 1];
            }

            if (prev != null)
            {
                var transition = new AnimationPathItem(prev.ClipName + clipName, false, 1, timeDelta, true);

                items.Add(transition);
            }

            var newItem = new AnimationPathItem(clipName, loop, repeats, timeDelta, false);

            items.Add(newItem);
        }
コード例 #3
0
        /// <summary>
        /// Updates the current item
        /// </summary>
        /// <param name="item">Item to update</param>
        /// <param name="isLastItem">It's the last item in the path</param>
        /// <param name="nextTime">Next time</param>
        /// <param name="time">Current time</param>
        /// <param name="atEnd">Returns if the path is at end</param>
        /// <param name="t">Evaluated time</param>
        /// <returns>Returns false if the path has to stop or true if it has to continue</returns>
        private bool?UpdateItem(AnimationPathItem item, bool isLastItem, float nextTime, ref float time, out bool atEnd, out float t)
        {
            atEnd = false;
            t     = item.TotalDuration;
            if (t == 0)
            {
                return(true);
            }

            if (item.Loop)
            {
                //Adjust time in the loop
                float d = nextTime - time;
                t = d % t;
            }

            time += t;

            if (time - t <= nextTime && time > nextTime)
            {
                //This is the item, stop the path
                return(false);
            }
            else if (item.Loop)
            {
                //Do loop, continue path
                return(true);
            }
            else if (nextTime >= time && isLastItem /*i == this.items.Count - 1*/)
            {
                //Item passed, it's the end item
                atEnd = true;
                return(false);
            }

            return(null);
        }