Exemple #1
0
        public void ProcessAnimations_ShouldNotSetSpriteOfSpriteRendererComponent_WhenThereIsNoCurrentAnimation()
        {
            // Arrange
            var builder = new AnimationSceneBuilder();

            var(spriteAnimationComponent, spriteRendererComponent) = builder.AddSpriteAnimationAndRendererComponents();
            var spriteAnimation = CreateAnimation(TimeSpan.FromMilliseconds(100), new[] { 1.0, 1.0, 1.0 });

            spriteAnimationComponent.AddAnimation("anim", spriteAnimation);

            var scene = builder.Build();

            // Act
            _animationSystem.ProcessAnimations(scene, new GameTime(TimeSpan.FromMilliseconds(0)));

            // Assert
            Assert.That(spriteRendererComponent.Sprite, Is.Null);
        }
Exemple #2
0
        public void ProcessAnimations_ShouldNotAdvancePositionOfSpriteAnimationComponent_WhenThereIsNoCurrentAnimation()
        {
            // Arrange
            var builder = new AnimationSceneBuilder();
            var spriteAnimationComponent = builder.AddSpriteAnimationComponent();

            spriteAnimationComponent.AddAnimation("anim", CreateAnimation(TimeSpan.FromMilliseconds(20)));

            var scene = builder.Build();

            // Assume
            Assume.That(spriteAnimationComponent.Position, Is.Zero);

            // Act
            _animationSystem.ProcessAnimations(scene, new GameTime(TimeSpan.FromMilliseconds(10)));

            // Assert
            Assert.That(spriteAnimationComponent.Position, Is.Zero);
        }
Exemple #3
0
        public void ProcessAnimations_ShouldAdvancePositionOfSpriteAnimationComponent(int animationDuration, int deltaTime, double playbackSpeed,
                                                                                      double initialPosition, double expectedPosition)
        {
            // Arrange
            var builder = new AnimationSceneBuilder();
            var spriteAnimationComponent = builder.AddSpriteAnimationComponent();

            spriteAnimationComponent.AddAnimation("anim", CreateAnimation(TimeSpan.FromMilliseconds(animationDuration)));

            var scene = builder.Build();

            spriteAnimationComponent.PlayAnimation("anim");
            spriteAnimationComponent.PlaybackSpeed = playbackSpeed;
            spriteAnimationComponent.Position      = initialPosition;

            // Act
            _animationSystem.ProcessAnimations(scene, new GameTime(TimeSpan.FromMilliseconds(deltaTime)));

            // Assert
            Assert.That(spriteAnimationComponent.Position, Is.EqualTo(expectedPosition));
        }
Exemple #4
0
        public void ProcessAnimations_ShouldSetFirstAnimationFrame_WhenAnimationWasStopped()
        {
            // Arrange
            var builder = new AnimationSceneBuilder();

            var(spriteAnimationComponent, spriteRendererComponent) = builder.AddSpriteAnimationAndRendererComponents();
            var spriteAnimation = CreateAnimation(TimeSpan.FromMilliseconds(100), new[] { 1.0, 1.0, 1.0 });

            spriteAnimationComponent.AddAnimation("anim", spriteAnimation);

            var scene = builder.Build();

            spriteAnimationComponent.PlayAnimation("anim");
            spriteAnimationComponent.Position = 0.5;
            spriteAnimationComponent.Stop();

            // Act
            _animationSystem.ProcessAnimations(scene, new GameTime(TimeSpan.FromMilliseconds(0)));

            // Assert
            Assert.That(spriteRendererComponent.Sprite, Is.EqualTo(spriteAnimation.Frames.First().Sprite));
        }
Exemple #5
0
        public void ProcessAnimations_ShouldComputeCurrentAnimationFrameOfSpriteAnimationComponentAndSetItAsSpriteOfSpriteRendererComponent(double position,
                                                                                                                                            double[] framesDurations, int expectedAnimationFrame)
        {
            // Arrange
            var builder = new AnimationSceneBuilder();

            var(spriteAnimationComponent, spriteRendererComponent) = builder.AddSpriteAnimationAndRendererComponents();
            var spriteAnimation = CreateAnimation(TimeSpan.FromMilliseconds(100), framesDurations);

            spriteAnimationComponent.AddAnimation("anim", spriteAnimation);

            var scene = builder.Build();

            spriteAnimationComponent.PlayAnimation("anim");
            spriteAnimationComponent.Position = position;

            // Act
            _animationSystem.ProcessAnimations(scene, new GameTime(TimeSpan.FromMilliseconds(0)));

            // Assert
            Assert.That(spriteRendererComponent.Sprite, Is.EqualTo(spriteAnimation.Frames[expectedAnimationFrame].Sprite));
        }
Exemple #6
0
        ProcessAnimations_ShouldAdvancePositionOfSpriteAnimationComponentToTheEndAndContinuePlayingFromBeginningAndNotifyWithEvent_WhenAnimationPlayedInLoop(
            int deltaTime)
        {
            // Arrange
            var builder = new AnimationSceneBuilder();
            var spriteAnimationComponent = builder.AddSpriteAnimationComponent();
            var spriteAnimation          = CreateAnimation(TimeSpan.FromMilliseconds(100));

            spriteAnimationComponent.AddAnimation("anim", spriteAnimation);

            var scene = builder.Build();

            spriteAnimationComponent.PlayAnimation("anim");
            spriteAnimationComponent.Position   = 0.8;
            spriteAnimationComponent.PlayInLoop = true;

            object?eventSender = null;
            SpriteAnimationCompletedEventArgs?eventArgs = null;

            spriteAnimationComponent.AnimationCompleted += (sender, args) =>
            {
                eventSender = sender;
                eventArgs   = args;
            };

            // Act
            _animationSystem.ProcessAnimations(scene, new GameTime(TimeSpan.FromMilliseconds(deltaTime)));

            // Assert
            Assert.That(spriteAnimationComponent.Position, Is.EqualTo(0.3).Within(1e-15));
            Assert.That(spriteAnimationComponent.IsPlaying, Is.True);
            Assert.That(eventSender, Is.Not.Null, "Event sender is null.");
            Assert.That(eventSender, Is.EqualTo(spriteAnimationComponent));
            Assert.That(eventArgs, Is.Not.Null, "Event args are null.");
            Debug.Assert(eventArgs != null, nameof(eventArgs) + " != null");
            Assert.That(eventArgs.AnimationName, Is.EqualTo("anim"));
            Assert.That(eventArgs.Animation, Is.EqualTo(spriteAnimation));
        }
Exemple #7
0
        public void ProcessAnimations_ShouldInvokeAnimationCompletedAfterAdvancingPosition_WhenAnimationEnded()
        {
            // Arrange
            var builder = new AnimationSceneBuilder();
            var spriteAnimationComponent = builder.AddSpriteAnimationComponent();
            var spriteAnimation          = CreateAnimation(TimeSpan.FromMilliseconds(100));

            spriteAnimationComponent.AddAnimation("anim", spriteAnimation);

            var scene = builder.Build();

            spriteAnimationComponent.PlayAnimation("anim");
            spriteAnimationComponent.Position = 0.8;

            spriteAnimationComponent.AnimationCompleted += (sender, args) => { spriteAnimationComponent.PlayAnimation("anim"); };

            // Act
            _animationSystem.ProcessAnimations(scene, new GameTime(TimeSpan.FromMilliseconds(50)));

            // Assert
            Assert.That(spriteAnimationComponent.Position, Is.EqualTo(0.0));
            Assert.That(spriteAnimationComponent.IsPlaying, Is.True);
        }
Exemple #8
0
        public void ProcessAnimations_ShouldAdvancePositionOfSpriteAnimationComponentToTheEndAndStopAnimationAndNotifyWithEvent()
        {
            // Arrange
            var builder = new AnimationSceneBuilder();
            var spriteAnimationComponent = builder.AddSpriteAnimationComponent();
            var spriteAnimation          = CreateAnimation(TimeSpan.FromMilliseconds(100));

            spriteAnimationComponent.AddAnimation("anim", spriteAnimation);

            var scene = builder.Build();

            spriteAnimationComponent.PlayAnimation("anim");
            spriteAnimationComponent.Position = 0.8;

            object?eventSender = null;
            SpriteAnimationCompletedEventArgs?eventArgs = null;

            spriteAnimationComponent.AnimationCompleted += (sender, args) =>
            {
                eventSender = sender;
                eventArgs   = args;
            };

            // Act
            _animationSystem.ProcessAnimations(scene, new GameTime(TimeSpan.FromMilliseconds(50)));

            // Assert
            Assert.That(spriteAnimationComponent.Position, Is.EqualTo(1.0));
            Assert.That(spriteAnimationComponent.IsPlaying, Is.False);
            Assert.That(eventSender, Is.Not.Null, "Event sender is null.");
            Assert.That(eventSender, Is.EqualTo(spriteAnimationComponent));
            Assert.That(eventArgs, Is.Not.Null, "Event args are null.");
            Debug.Assert(eventArgs != null, nameof(eventArgs) + " != null");
            Assert.That(eventArgs.AnimationName, Is.EqualTo("anim"));
            Assert.That(eventArgs.Animation, Is.EqualTo(spriteAnimation));
        }