예제 #1
0
        private void UpdateAnimationState(StateChangeEvent stateChangeEvent)
        {
            var entityId = stateChangeEvent.EntityId;

            if (!ComponentManager.ContainsAllComponents(
                    entityId,
                    typeof(SpriteAnimationBindings)
                    ))
            {
                return;
            }
            var animationBindings = ComponentManager.GetEntityComponentOrDefault <SpriteAnimationBindings>(entityId);

            var spriteAnimation = ComponentManager.GetEntityComponentOrDefault <SpriteAnimationComponent>(entityId);

            if (spriteAnimation == null)
            {
                spriteAnimation = new SpriteAnimationComponent();
                ComponentManager.AddComponentToEntity(spriteAnimation, entityId);
                spriteAnimation.AnimationStarted = stateChangeEvent.EventTime;
            }

            var binding = animationBindings.Bindings
                          .FirstOrDefault(e => BindingsMatch(e.StateConditions, stateChangeEvent.NewState));

            if (binding == null)
            {
                spriteAnimation.NextAnimatedState = null;
            }
            else
            {
                spriteAnimation.NextAnimatedState = binding;
            }
        }