예제 #1
0
        protected override void UpdateCore(AnimationContext context)
        {
            var vectorContext = (VectorAnimationContext)context;

            vectorContext.Sprite.ScaleX = Function.GetValue(vectorContext.Time, vectorContext.StartX, vectorContext.FinalX, Duration);
            vectorContext.Sprite.ScaleY = Function.GetValue(vectorContext.Time, vectorContext.StartY, vectorContext.FinalY, Duration);
        }
예제 #2
0
        protected override void UpdateCore(AnimationContext context)
        {
            var colorContext = (ColorAnimationContext)context;

            colorContext.Sprite.ColorR = Function.GetValue(colorContext.Time, colorContext.StartR, colorContext.FinalR, Duration);
            colorContext.Sprite.ColorG = Function.GetValue(colorContext.Time, colorContext.StartG, colorContext.FinalG, Duration);
            colorContext.Sprite.ColorB = Function.GetValue(colorContext.Time, colorContext.StartB, colorContext.FinalB, Duration);
        }
예제 #3
0
        public override IEnumerable <AnimationContext> Get(BaseSprite sprite)
        {
            AnimationContext context = null;

            if (m_dictionary.TryGetValue(sprite, out context))
            {
                yield return(context);
            }
        }
예제 #4
0
 public void Clear()
 {
     if (m_container != null)
     {
         m_container.Clear();
     }
     else if (m_context != null)
     {
         m_context = null;
     }
 }
예제 #5
0
        public void Update(GameTime gameTime)
        {
            if (m_container != null)
            {
                foreach (var context in m_container.All())
                {
                    if (!context.IsBegin)
                    {
                        OnBegin(context);
                    }

                    UpdateContext(context, gameTime);

                    if (IsContextEnd(context))
                    {
                        m_contextsToRemove.Add(context);
                    }
                }

                m_container.Remove(IsContextEnd, m_contextsToRemove);

                foreach (var contextToRemove in m_contextsToRemove)
                {
                    OnComplete(contextToRemove);
                }
                m_contextsToRemove.Clear();
            }
            else if (m_context != null)
            {
                if (!m_context.IsBegin)
                {
                    OnBegin(m_context);
                }

                UpdateContext(m_context, gameTime);

                if (IsContextEnd(m_context))
                {
                    var context = m_context;
                    m_context = null;
                    OnComplete(context);
                }
            }
        }
예제 #6
0
        public void Apply(BaseSprite sprite, bool reverse = false, Action onComplete = null, Action onBegin = null)
        {
            var context = ApplyCore(sprite);

            context.Sprite   = sprite;
            context.Reverse  = reverse;
            context.Begin    = onBegin;
            context.Complete = onComplete;

            context.Time = (context.Reverse ? Duration : 0);

            if (m_container != null)
            {
                m_container.Add(context);
            }
            else if (m_context == null)
            {
                m_context = context;
            }
            else
            {
                m_contextsToRemove = new List <AnimationContext>();
                switch (m_containerType)
                {
                case ContainerType.List:
                    m_container = new ListContainer();
                    break;

                case ContainerType.Dictionary:
                    m_container = new DictionaryContainer();
                    break;

                default:
                    break;
                }
                m_container.Add(m_context);
                m_context = null;
                m_container.Add(context);
            }
        }
예제 #7
0
        void UpdateContext(AnimationContext context, GameTime gameTime)
        {
            UpdateCore(context);

            if (!context.IsBegin)
            {
                context.IsBegin = true;
            }

            if (context.Reverse)
            {
                if (context.Time <= 0)
                {
                    context.IsEnd = true;
                    return;
                }

                context.Time -= gameTime.ElapsedGameTime.TotalMilliseconds;
                if (context.Time < 0)
                {
                    context.Time = 0;
                }
            }
            else
            {
                if (context.Time >= Duration)
                {
                    context.IsEnd = true;
                    return;
                }

                context.Time += gameTime.ElapsedGameTime.TotalMilliseconds;
                if (context.Time > Duration)
                {
                    context.Time = Duration;
                }
            }
        }
예제 #8
0
 protected virtual void OnBeginCore(AnimationContext context)
 {
 }
예제 #9
0
 protected virtual void UpdateCore(AnimationContext context)
 {
 }
예제 #10
0
 void OnComplete(AnimationContext context)
 {
     context.Complete?.Invoke();
     OnCompleteCore(context);
 }
예제 #11
0
 void OnBegin(AnimationContext context)
 {
     context.Begin?.Invoke();
     OnBeginCore(context);
 }
예제 #12
0
 public abstract void Add(AnimationContext context);
예제 #13
0
        protected override void UpdateCore(AnimationContext context)
        {
            var colorContext = (ValueAnimationContext)context;

            colorContext.Sprite.Alpha = Function.GetValue(colorContext.Time, colorContext.StartValue, colorContext.FinalValue, Duration);
        }
예제 #14
0
 public override void Add(AnimationContext context)
 {
     m_list.Add(context);
 }
예제 #15
0
 protected virtual void OnCompleteCore(AnimationContext context)
 {
 }
예제 #16
0
 bool IsContextEnd(AnimationContext context)
 {
     return(context.IsEnd);
 }
예제 #17
0
 public override void Add(AnimationContext context)
 {
     m_dictionary.Add(context.Sprite, context);
 }