Beispiel #1
0
        public void GivenWorldState_WhenApplyAfterTickStateChanges_ReturnFirstWormholePairRemoved()
        {
            WorldStateService.GenerateStartingWorld();
            var state = WorldStateService.GetState();

            List <Tuple <GameObject, GameObject> > wormholes = state.WormholePairs;
            var countBefore        = state.WormholePairs.Count;
            var distanceFromOrigin = 0;

            foreach (Tuple <GameObject, GameObject> t in wormholes)
            {
                var item1Distance = VectorCalculatorService.GetDistanceBetween(new Position(0, 0), t.Item1.Position) + t.Item1.Size;
                var item2Distance = VectorCalculatorService.GetDistanceBetween(new Position(0, 0), t.Item2.Position) + t.Item2.Size;

                var longerDistance = item1Distance > item2Distance ? item1Distance : item2Distance;
                distanceFromOrigin = distanceFromOrigin > longerDistance ? distanceFromOrigin : longerDistance;
            }

            var firstSize = wormholes[0].Item1.Size;

            for (var i = 0; i < EngineConfigFake.Value.MapRadius - (distanceFromOrigin - firstSize); i++)
            {
                WorldStateService.ApplyAfterTickStateChanges();
            }

            Assert.Less(state.WormholePairs.Count, countBefore);
        }
        public void GivenTorpedoes_WhenHitGasCloud_ThenSmallerAndTorpedoSmaller()
        {
            SetupFakeWorld(true);
            List <GameObject> gasClouds = FakeGameObjectProvider.GetGasClouds();
            var gasCloud = gasClouds[0];

            var torpedo = new TorpedoGameObject()
            {
                Id             = Guid.NewGuid(),
                GameObjectType = GameObjectType.TorpedoSalvo,
                Size           = EngineConfigFake.Value.Torpedo.Size,
                IsMoving       = true,
                Position       = new Position(8, 0)
            };

            WorldStateService.AddGameObject(torpedo);


            var handler = collisionHandlerResolver.ResolveHandler(gasCloud, torpedo);

            handler.ResolveCollision(gasCloud, torpedo);

            Assert.IsInstanceOf <GasCloudCollisionHandler>(handler);
            Assert.Less(torpedo.Size, 10);
        }
        public void GivenForwardAction_WhenHeadingIs18AndSpeedIs6_ThenDistanceTraveledIs6()
        {
            SetupFakeWorld(true, false);
            var bot = FakeGameObjectProvider.GetBotAt(new Position(0, 0));

            bot.PendingActions = new List <PlayerAction>
            {
                new PlayerAction
                {
                    Action   = PlayerActions.Forward,
                    Heading  = 23,
                    PlayerId = bot.Id
                }
            };
            bot.Speed = 6;

            var expectedEndpoint = new Position(6, 2);
            var expectedDistance = VectorCalculatorService.GetDistanceBetween(bot.Position, expectedEndpoint);

            Assert.DoesNotThrow(() => engineService.SimulateTickForBots(WorldStateService.GetPlayerBots()));
            Assert.DoesNotThrow(() => WorldStateService.ApplyAfterTickStateChanges());

            var resultingDistanceTravelled = VectorCalculatorService.GetDistanceBetween(new Position(0, 0), bot.Position);
            var varianceBetweenExpectedAndActualEndpoint = VectorCalculatorService.GetDistanceBetween(bot.Position, expectedEndpoint);

            var pathPoints = VectorCalculatorService.CollectCollisionDetectionPointsAlongPath(new Position(0, 0), new Position(6, 2), 23);

            Assert.AreEqual(6, expectedDistance);

            Assert.AreEqual(expectedEndpoint, bot.Position);
            Assert.AreEqual(expectedDistance, resultingDistanceTravelled);
            Assert.Zero(varianceBetweenExpectedAndActualEndpoint);
        }
        public void GivenTorpedoes_WhenHitWormhole_ThenTorpedoTraversesWormhole()
        {
            WorldStateService.GenerateStartingWorld();
            var state = WorldStateService.GetState();

            List <Tuple <GameObject, GameObject> > wormholes = state.WormholePairs;
            var wormhole = wormholes[0].Item1;

            var startPosition = new Position(wormhole.Position.X + wormhole.Size + 5,
                                             wormhole.Position.Y + wormhole.Size + 5);
            var torpedo = new TorpedoGameObject()
            {
                Id             = Guid.NewGuid(),
                GameObjectType = GameObjectType.TorpedoSalvo,
                Size           = EngineConfigFake.Value.Torpedo.Size,
                IsMoving       = true,
                Position       = startPosition
            };

            WorldStateService.AddGameObject(torpedo);

            var handler = collisionHandlerResolver.ResolveHandler(wormhole, torpedo);

            handler.ResolveCollision(wormhole, torpedo);

            Assert.IsInstanceOf <WormholeCollisionHandler>(handler);
            Assert.True(torpedo.Position != startPosition);
        }
Beispiel #5
0
        public void GivenBotAndGasCloud_WhenResolveCollision_ReturnBotWithReducedSize()
        {
            WorldStateService.GenerateStartingWorld();
            var state = WorldStateService.GetState();

            List <GameObject> gasClouds = state.GasClouds;
            var gasCloud = gasClouds[0];

            var bot = FakeGameObjectProvider.GetBotAt(gasCloud.Position);

            var handler = collisionHandlerResolver.ResolveHandler(gasCloud, bot);

            handler.ResolveCollision(gasCloud, bot);

            Assert.DoesNotThrow(() => WorldStateService.ApplyAfterTickStateChanges());

            var activeEffect = WorldStateService.GetActiveEffectByType(bot.Id, Effects.GasCloud);
            var botAfter     = WorldStateService.GetState().PlayerGameObjects.Find(g => g.Id == bot.Id);

            Assert.True(activeEffect != default);
            Assert.True(activeEffect.Effect == Effects.GasCloud);
            Assert.True(botAfter != default);
            Assert.True(botAfter.Effects == Effects.GasCloud);
            Assert.AreEqual(8, bot.Size);
        }
Beispiel #6
0
        public void GivenWorldState_WhenApplyAfterTickStateChanges_ReturnPlayerSmaller()
        {
            WorldStateService.GenerateStartingWorld();
            var state = WorldStateService.GetState();

            state.World.Radius = 1900;

            var bot = FakeGameObjectProvider.GetBotAt(new Position(0, 2000));

            bot.Size = 50;
            WorldStateService.UpdateBotSpeed(bot);

            WorldStateService.ApplyAfterTickStateChanges();
            Assert.AreEqual(49, bot.Size);

            WorldStateService.ApplyAfterTickStateChanges();
            Assert.AreEqual(48, bot.Size);

            bot.Position = new Position(0, 1900);
            WorldStateService.ApplyAfterTickStateChanges();
            Assert.AreEqual(47, bot.Size);

            bot.Position = new Position(0, 1849);
            WorldStateService.ApplyAfterTickStateChanges();
            Assert.AreEqual(47, bot.Size);
        }
        public void GivenTorpedo_WhenProcessTick_ThenTorpedoMoves()
        {
            SetupFakeWorld(true, false);
            var bot = FakeGameObjectProvider.GetBotWithActions();

            bot.CurrentHeading = 90;
            bot.Speed          = 20;
            bot.IsMoving       = true;

            var torpedoPosition = VectorCalculatorService.GetPositionFrom(bot.Position, bot.Size + EngineConfigFake.Value.Torpedo.Size + 1, bot.CurrentAction.Heading);
            var torpedoSalvo    = new TorpedoGameObject()
            {
                Id             = Guid.NewGuid(),
                Position       = torpedoPosition,
                Size           = EngineConfigFake.Value.Torpedo.Size,
                Speed          = EngineConfigFake.Value.Torpedo.Speed,
                CurrentHeading = 45,
                FiringPlayerId = bot.Id,
                IsMoving       = true
            };

            WorldStateService.AddGameObject(torpedoSalvo);

            tickProcessingService = new TickProcessingService(
                collisionHandlerResolver,
                VectorCalculatorService,
                WorldStateService,
                collisionService);

            Assert.DoesNotThrow(() => tickProcessingService.SimulateTick());

            Assert.AreNotEqual(torpedoPosition, torpedoSalvo.Position);
        }
        public void GivenBot_WithAfterburnerStarted_ThenStopAfterburner()
        {
            SetupFakeWorld();
            var bot         = FakeGameObjectProvider.GetBotAtDefault();
            var firstAction = FakeGameObjectProvider.GetStartAfterburnerPlayerAction(bot.Id);

            bot.PendingActions = new List <PlayerAction>
            {
                firstAction
            };

            Assert.DoesNotThrow(() => actionService.ApplyActionToBot(bot));
            Assert.DoesNotThrow(() => WorldStateService.ApplyAfterTickStateChanges());

            var secondAction = FakeGameObjectProvider.GetStopAfterburnerPlayerAction(bot.Id);

            bot.PendingActions = new List <PlayerAction>
            {
                secondAction
            };

            Assert.DoesNotThrow(() => actionService.ApplyActionToBot(bot));
            var activeEffect = WorldStateService.GetActiveEffectByType(bot.Id, Effects.Afterburner);

            Assert.True(activeEffect == default);
            Assert.AreEqual(9, bot.Size);
            Assert.AreEqual(23, bot.Speed);
        }
        public void GivenBot_WithAfterburnerNotStarted_ThenStartAfterburner()
        {
            SetupFakeWorld();
            var bot         = FakeGameObjectProvider.GetBotAtDefault();
            var firstAction = FakeGameObjectProvider.GetStartAfterburnerPlayerAction(bot.Id);

            bot.PendingActions = new List <PlayerAction>
            {
                firstAction
            };

            Assert.DoesNotThrow(() => actionService.ApplyActionToBot(bot));
            var activeEffect = WorldStateService.GetActiveEffectByType(bot.Id, Effects.Afterburner);
            var botAfter     = WorldStateService.GetState().PlayerGameObjects.Find(g => g.Id == bot.Id);

            Assert.True(activeEffect != default);
            Assert.True(activeEffect.Bot.Size == 10);
            Assert.True(activeEffect.Bot.Speed == 40);
            Assert.True(botAfter != default);
            Assert.True(botAfter.Effects == Effects.Afterburner);

            Assert.DoesNotThrow(() => WorldStateService.ApplyAfterTickStateChanges());

            Assert.True(activeEffect.Bot.Size == 9);
            Assert.True(activeEffect.Bot.Speed == 40);
            Assert.True(botAfter != default);
            Assert.True(botAfter.Effects == Effects.Afterburner);
        }
Beispiel #10
0
        public void GivenBotAndWormhole_WhenResolveCollision_ReturnBotInNewPositionAndShrunkWormholes()
        {
            WorldStateService.GenerateStartingWorld();
            var state = WorldStateService.GetState();

            List <Tuple <GameObject, GameObject> > wormholes = state.WormholePairs;
            var wormhole     = wormholes[0].Item1;
            var wormholeSize = wormhole.Size;

            var bot = FakeGameObjectProvider.GetBotAt(
                new Position(wormhole.Position.X + wormhole.Size + 5, wormhole.Position.Y + wormhole.Size + 5));

            var handler = collisionHandlerResolver.ResolveHandler(wormhole, bot);

            handler.ResolveCollision(wormhole, bot);

            var expectedPosition = VectorCalculatorService.GetPositionFrom(
                wormholes[0].Item2.Position,
                wormholeSize + bot.Size,
                bot.CurrentHeading);

            Assert.AreEqual(expectedPosition.X, bot.Position.X);
            Assert.AreEqual(expectedPosition.Y, bot.Position.Y);
            Assert.AreEqual(EngineConfigFake.Value.ScoreRates[GameObjectType.Wormhole], bot.Score);

            Assert.True(state.WormholePairs[0].Item1.Size < wormholeSize);
            Assert.True(state.WormholePairs[0].Item2.Size < wormholeSize);
            Assert.True(state.WormholePairs[0].Item2.Size == state.WormholePairs[0].Item1.Size);
        }
        public void GivenTorpedoes_WhenHitPlayer_ThenSmallerAndTorpedoSmaller_AndFiringPlayerLarger()
        {
            SetupFakeWorld(true);
            var bot       = WorldStateService.GetPlayerBots().First();
            var playerBot = FakeGameObjectProvider.GetBotAt(new Position(100, 100));
            var torpedo   = new TorpedoGameObject()
            {
                Id             = Guid.NewGuid(),
                GameObjectType = GameObjectType.TorpedoSalvo,
                Size           = EngineConfigFake.Value.Torpedo.Size,
                IsMoving       = true,
                Position       = new Position(0, 10),
                Speed          = EngineConfigFake.Value.Torpedo.Speed,
                FiringPlayerId = playerBot.Id
            };

            WorldStateService.AddGameObject(torpedo);


            var handler = collisionHandlerResolver.ResolveHandler(torpedo, bot);

            handler.ResolveCollision(torpedo, bot);

            Assert.IsInstanceOf <TorpedoCollisionHandler>(handler);
            Assert.AreEqual(0, torpedo.Size);
            Assert.AreEqual(0, bot.Size);
            Assert.AreEqual(20, playerBot.Size);
        }
        public void GivenTorpedoes_WhenHitAsteroid_ThenSmallerAndTorpedoSmaller()
        {
            SetupFakeWorld(true);
            var superFood      = FakeGameObjectProvider.GetSuperfoodAt(new Position(0, 10));
            var asteroidFields = FakeGameObjectProvider.GetAsteroidFields();
            var asteroidField  = asteroidFields[0];
            var asteroidSize   = asteroidField.Size;


            var torpedo = new TorpedoGameObject()
            {
                Id             = Guid.NewGuid(),
                GameObjectType = GameObjectType.TorpedoSalvo,
                Size           = EngineConfigFake.Value.Torpedo.Size,
                IsMoving       = true,
                Position       = new Position(8, 0)
            };

            WorldStateService.AddGameObject(torpedo);


            var handler = collisionHandlerResolver.ResolveHandler(asteroidField, torpedo);

            handler.ResolveCollision(asteroidField, torpedo);

            Assert.IsInstanceOf <AsteroidFieldCollisionHandler>(handler);
            Assert.Less(torpedo.Size, 10);
            Assert.Less(asteroidField.Size, asteroidSize);
        }
Beispiel #13
0
        public void GivenState_WhenGetState_ThenGetsState()
        {
            SetupFakeWorld();
            var result = WorldStateService.GetState();

            Assert.NotNull(result);
            Assert.NotNull(result.World);
            Assert.NotNull(result.GameObjects);
        }
        public void GivenWorldState_WhenTickIsTorpedoTick_ThenBotsGetSalvo()
        {
            SetupFakeWorld(true, false);
            WorldStateService.GetState().World.CurrentTick = EngineConfigFake.Value.Torpedo.ChargeRate - 1;
            WorldStateService.ApplyAfterTickStateChanges();

            var bots = WorldStateService.GetPlayerBots();

            Assert.AreEqual(1, bots.First().TorpedoSalvoCount);
        }
Beispiel #15
0
        public void GivenWorldState_WhenApplyAfterTickStateChanges_ReturnShrunkRadius()
        {
            WorldStateService.GenerateStartingWorld();
            var state = WorldStateService.GetState();

            var radius = state.World.Radius;

            WorldStateService.ApplyAfterTickStateChanges();

            Assert.True(state.World.Radius < radius);
        }
Beispiel #16
0
        public void GivenMovingBotCollidesWithDeadBot_WhenTick_ThenDeadBotIsRemovedFromWorld()
        {
            var deadBot  = FakeGameObjectProvider.GetBotAtDefault();
            var aliveBot = FakeGameObjectProvider.GetBigBotAt(new Position(19, 0));

            var handler = collisionHandlerResolver.ResolveHandler(deadBot, aliveBot);
            var result  = handler.ResolveCollision(deadBot, aliveBot);

            Assert.False(WorldStateService.GameObjectIsInWorldState(deadBot.Id));
            Assert.True(WorldStateService.GameObjectIsInWorldState(aliveBot.Id));
        }
        public void GivenTwoBotsCollided_WhenTick_ThenProcessingStepsStopEarly()
        {
            var bot1 = FakeGameObjectProvider.GetBotWithActions();
            var bot2 = FakeGameObjectProvider.GetBigBotAt(new Position(0, 15));

            bot1.IsMoving = true;
            bot2.IsMoving = true;

            Assert.DoesNotThrow(() => tickProcessingService.SimulateTick());
            Assert.False(WorldStateService.GameObjectIsInWorldState(bot1.Id));
            Assert.True(WorldStateService.GameObjectIsInWorldState(bot2.Id));
        }
Beispiel #18
0
        public void GivenTwoBotsCollided_WhenTick_ThenSmallerBotIsRemovedFromWorld()
        {
            var bot1 = FakeGameObjectProvider.GetBotAt(new Position(0, 0));
            var bot2 = FakeGameObjectProvider.GetBigBotAt(new Position(19, 0));

            var handler = collisionHandlerResolver.ResolveHandler(bot2, bot1);
            var result  = handler.ResolveCollision(bot2, bot1);

            Assert.False(WorldStateService.GameObjectIsInWorldState(bot1.Id));
            Assert.True(WorldStateService.GameObjectIsInWorldState(bot2.Id));
            Assert.AreEqual(EngineConfigFake.Value.ScoreRates[GameObjectType.Player], bot2.Score);
        }
Beispiel #19
0
        public void GivenBotCollidedWithFood_WhenTick_ThenFoodRemovedFromWorld()
        {
            var food          = FakeGameObjectProvider.GetFoodAt(new Position(0, 0));
            var bot           = FakeGameObjectProvider.GetBotAt(new Position(8, 0));
            var originalSpeed = bot.Speed;

            var handler = collisionHandlerResolver.ResolveHandler(food, bot);
            var result  = handler.ResolveCollision(food, bot);

            Assert.False(WorldStateService.GameObjectIsInWorldState(food.Id));
            Assert.True(WorldStateService.GameObjectIsInWorldState(bot.Id));
            Assert.AreEqual(EngineConfigFake.Value.ScoreRates[GameObjectType.Food], bot.Score);
        }
Beispiel #20
0
        public void GivenWorldState_WhenApplyAfterTickStateChanges_ReturnGrownWormholes()
        {
            WorldStateService.GenerateStartingWorld();
            var state = WorldStateService.GetState();

            List <Tuple <GameObject, GameObject> > wormholes = state.WormholePairs;
            var wormhole     = wormholes[0].Item1;
            var wormholeSize = wormhole.Size;

            WorldStateService.ApplyAfterTickStateChanges();

            Assert.True(wormholeSize < state.WormholePairs[0].Item1.Size);
            Assert.True(wormholeSize < state.WormholePairs[0].Item2.Size);
            Assert.True(state.WormholePairs[0].Item2.Size == state.WormholePairs[0].Item1.Size);
        }
Beispiel #21
0
        public void GivenWorldState_WhenApplyAfterTickStateChanges_ReturnWormholesOutOfRadiusRemoved()
        {
            WorldStateService.GenerateStartingWorld();
            var state = WorldStateService.GetState();

            List <Tuple <GameObject, GameObject> > wormholes = state.WormholePairs;
            var wormhole           = wormholes[0].Item1;
            var distanceFromOrigin = VectorCalculatorService.GetDistanceBetween(new Position(0, 0), wormhole.Position);

            for (var i = 0; i < EngineConfigFake.Value.MapRadius - distanceFromOrigin; i++)
            {
                WorldStateService.ApplyAfterTickStateChanges();
            }

            Assert.Null(WorldStateService.GetWormholePair(wormhole.Id));
        }
        public void GivenPlayer_WhenUsesFireTorpedoes_ThenTorpedoGameObjectGenerated()
        {
            SetupFakeWorld(true);
            var bot = WorldStateService.GetPlayerBots().First();

            bot.PendingActions.Add(
                new PlayerAction
            {
                Action   = PlayerActions.FireTorpedoes,
                Heading  = 180,
                PlayerId = bot.Id
            });
            actionService.ApplyActionToBot(bot);

            Assert.IsNotEmpty(WorldStateService.GetMovableObjects()
                              .Where(obj => obj.GameObjectType == GameObjectType.TorpedoSalvo));
        }
Beispiel #23
0
        public void GivenBotAndSuperfood_WhenResolveCollision_ReturnBotWithActiveEffects()
        {
            SetupFakeWorld(true, false);
            FakeGameObjectProvider.GetSuperfoodAt(new Position(8, 0));
            FakeGameObjectProvider.GetFoodAt(new Position(80, 0));

            var bot         = FakeGameObjectProvider.GetBotAt(new Position(0, 0));
            var firstAction = FakeGameObjectProvider.GetForwardPlayerAction(bot.Id);

            bot.PendingActions = new List <PlayerAction>
            {
                firstAction,
            };


            Assert.DoesNotThrow(() => engineService.SimulateTickForBots(WorldStateService.GetPlayerBots()));;
            Assert.DoesNotThrow(() => WorldStateService.ApplyAfterTickStateChanges());

            var activeEffect = WorldStateService.GetActiveEffectByType(bot.Id, Effects.Superfood);
            var botAfter     = WorldStateService.GetState().PlayerGameObjects.Find(g => g.Id == bot.Id);

            Assert.True(activeEffect != default);
            Assert.True(activeEffect.Effect == Effects.Superfood);
            Assert.True(botAfter != default);
            Assert.True(botAfter.Effects == Effects.Superfood);
            Assert.AreEqual(11, bot.Size);

            Assert.DoesNotThrow(() => engineService.SimulateTickForBots(WorldStateService.GetPlayerBots()));;
            Assert.DoesNotThrow(() => WorldStateService.ApplyAfterTickStateChanges());
            Assert.DoesNotThrow(() => engineService.SimulateTickForBots(WorldStateService.GetPlayerBots()));;
            Assert.DoesNotThrow(() => WorldStateService.ApplyAfterTickStateChanges());
            Assert.DoesNotThrow(() => engineService.SimulateTickForBots(WorldStateService.GetPlayerBots()));;
            Assert.DoesNotThrow(() => WorldStateService.ApplyAfterTickStateChanges());
            Assert.DoesNotThrow(() => engineService.SimulateTickForBots(WorldStateService.GetPlayerBots()));;
            Assert.DoesNotThrow(() => WorldStateService.ApplyAfterTickStateChanges());
            Assert.DoesNotThrow(() => engineService.SimulateTickForBots(WorldStateService.GetPlayerBots()));;
            Assert.DoesNotThrow(() => WorldStateService.ApplyAfterTickStateChanges());

            activeEffect = WorldStateService.GetActiveEffectByType(bot.Id, Effects.Superfood);
            botAfter     = WorldStateService.GetState().PlayerGameObjects.Find(g => g.Id == bot.Id);

            Assert.True(activeEffect == null);
            Assert.True(botAfter != default);
            Assert.AreEqual(13, bot.Size);
        }
        public void GivenBot_WithMovement_AndAfterburnerStarted_ThenStopAfterburnerAndNormalSpeedCorrect()
        {
            SetupFakeWorld(true, false);
            var bot = new BotObject
            {
                Id             = Guid.NewGuid(),
                Size           = 60,
                Position       = new Position(0, 0),
                Speed          = 4,
                GameObjectType = GameObjectType.Player
            };

            WorldStateService.AddBotObject(bot);

            var firstAction  = FakeGameObjectProvider.GetForwardPlayerAction(bot.Id);
            var secondAction = FakeGameObjectProvider.GetStartAfterburnerPlayerAction(bot.Id);
            var thirdAction  = FakeGameObjectProvider.GetForwardPlayerAction(bot.Id);

            bot.PendingActions = new List <PlayerAction>
            {
                firstAction,
                secondAction,
                thirdAction
            };

            Assert.DoesNotThrow(() => engineService.SimulateTickForBots(WorldStateService.GetPlayerBots()));;
            Assert.DoesNotThrow(() => WorldStateService.ApplyAfterTickStateChanges());
            Assert.DoesNotThrow(() => engineService.SimulateTickForBots(WorldStateService.GetPlayerBots()));;
            Assert.DoesNotThrow(() => WorldStateService.ApplyAfterTickStateChanges());

            var activeEffect = WorldStateService.GetActiveEffectByType(bot.Id, Effects.Afterburner);

            Assert.AreEqual(59, bot.Size);
            Assert.AreEqual(8, bot.Speed);
            Assert.AreEqual(0, bot.Position.Y);
            Assert.AreEqual(12, bot.Position.X);

            Assert.DoesNotThrow(() => engineService.SimulateTickForBots(WorldStateService.GetPlayerBots()));
            Assert.DoesNotThrow(() => WorldStateService.ApplyAfterTickStateChanges());

            Assert.AreEqual(58, bot.Size);
            Assert.AreEqual(8, bot.Speed);
            Assert.AreEqual(0, bot.Position.Y);
            Assert.AreEqual(20, bot.Position.X);
        }
        public void GivenBot_WhenActionIsProcessed_ThenVectorIsStepwiseCalculated()
        {
            SetupFakeWorld(true, false);
            var bot = FakeGameObjectProvider.GetBotWithActions();

            bot.IsMoving = true;
            vectorCalculatorServiceMock.Setup(x => x.GetPointFrom(It.IsAny <Position>(), It.IsAny <int>(), It.IsAny <int>()))
            .Returns(VectorCalculatorService.GetPointFrom(bot.Position, 1, bot.CurrentHeading));
            vectorCalculatorServiceMock.Setup(x => x.IsInWorldBounds(It.IsAny <Position>(), It.IsAny <int>())).Returns(true);
            vectorCalculatorServiceMock
            .Setup(vcs => vcs.CollectCollisionDetectionPointsAlongPath(It.IsAny <Position>(), It.IsAny <Position>(), It.IsAny <int>()))
            .Returns(
                new List <Position> {
                new Position(0, 0),
                new Position(1, 1),
                new Position(2, 2)
            });
            Assert.DoesNotThrow(() => tickProcessingService.SimulateTick(WorldStateService.GetPlayerBots()));
        }
        public void GivenBot_WithAfterburnerStarted_ThenStopAfterburnerAndNormalSpeedCorrect()
        {
            SetupFakeWorld(true, false);
            var food = FakeGameObjectProvider.GetFoodAt(new Position(60, 0));
            var id   = Guid.NewGuid();
            var bot  = new BotObject
            {
                Id             = id,
                Size           = 60,
                Position       = new Position(0, 0),
                Speed          = 4,
                GameObjectType = GameObjectType.Player,
                PendingActions = new List <PlayerAction>(),
                CurrentAction  = new PlayerAction
                {
                    Action   = PlayerActions.Stop,
                    Heading  = 0,
                    PlayerId = id
                },
                Score = 0
            };

            WorldStateService.AddBotObject(bot);

            var firstAction  = FakeGameObjectProvider.GetStartAfterburnerPlayerAction(bot.Id);
            var secondAction = FakeGameObjectProvider.GetForwardPlayerAction(bot.Id);

            bot.PendingActions = new List <PlayerAction>
            {
                firstAction,
                secondAction
            };

            Assert.DoesNotThrow(() => engineService.SimulateTickForBots(WorldStateService.GetPlayerBots()));;
            Assert.DoesNotThrow(() => WorldStateService.ApplyAfterTickStateChanges());
            Assert.DoesNotThrow(() => engineService.SimulateTickForBots(WorldStateService.GetPlayerBots()));;
            Assert.DoesNotThrow(() => WorldStateService.ApplyAfterTickStateChanges());

            Assert.AreEqual(59, bot.Size);
            Assert.AreEqual(8, bot.Speed);
            Assert.AreEqual(0, bot.Position.Y);
            Assert.AreEqual(8, bot.Position.X);
        }
        public void GivenDeadBot_WithAfterburnerStarted_ThenRemoveFromWorldWhenSizeLessThan5()
        {
            SetupFakeWorld();
            var bot         = FakeGameObjectProvider.GetBotAtDefault();
            var firstAction = FakeGameObjectProvider.GetStartAfterburnerPlayerAction(bot.Id);

            bot.PendingActions = new List <PlayerAction>
            {
                firstAction
            };

            for (var j = 0; j < 6; j++)
            {
                Assert.DoesNotThrow(() => actionService.ApplyActionToBot(bot));
                Assert.DoesNotThrow(() => WorldStateService.ApplyAfterTickStateChanges());
            }

            Assert.AreEqual(4, bot.Size);
            Assert.False(WorldStateService.GameObjectIsInWorldState(bot.Id));
        }
        public void GivenBotAndAsteroidField_WhenResolveCollision_ReturnBotWithReducedSize()
        {
            WorldStateService.GenerateStartingWorld();
            var state = WorldStateService.GetState();

            List <GameObject> asteroidFields = state.AsteroidFields;
            var asteroidField = asteroidFields[0];

            var bot = FakeGameObjectProvider.GetBotAt(asteroidField.Position);

            var handler = collisionHandlerResolver.ResolveHandler(asteroidField, bot);

            handler.ResolveCollision(asteroidField, bot);

            Assert.DoesNotThrow(() => WorldStateService.ApplyAfterTickStateChanges());

            var activeEffect = WorldStateService.GetActiveEffectByType(bot.Id, Effects.AsteroidField);

            Assert.True(activeEffect != default);
            Assert.AreEqual(19, bot.Speed);
        }
Beispiel #29
0
        public void GivenBot_WhenUpdateBotSpeedWithBigBot_ReturnOne()
        {
            WorldStateService.GenerateStartingWorld();
            var state = WorldStateService.GetState();

            state.World.Radius = 1900;

            List <GameObject> asteroidFields = state.AsteroidFields;
            var asteroidField = asteroidFields[0];

            var bot = FakeGameObjectProvider.GetBotAt(
                new Position(asteroidField.Position.X + asteroidField.Size + 5, asteroidField.Position.Y + asteroidField.Size + 5));

            bot.Size  = 340;
            bot.Speed = 1;

            var handler = collisionHandlerResolver.ResolveHandler(asteroidField, bot);

            handler.ResolveCollision(asteroidField, bot);

            Assert.AreEqual(1, bot.Speed);
        }
Beispiel #30
0
        public void GivenWorldState_WhenApplyAfterTickStateChanges_ReturnFoodRemoved()
        {
            WorldStateService.GenerateStartingWorld();
            var state = WorldStateService.GetState();

            List <GameObject> objects = state.GameObjects;
            var countBefore           = objects.Count(a => a.GameObjectType == GameObjectType.Food);
            var distanceFromOrigin    = 0;

            foreach (var food in objects.Where(a => a.GameObjectType == GameObjectType.Food))
            {
                var itemDistance = VectorCalculatorService.GetDistanceBetween(new Position(0, 0), food.Position);
                distanceFromOrigin = distanceFromOrigin > itemDistance ? distanceFromOrigin : itemDistance;
            }

            for (var i = 0; i < EngineConfigFake.Value.MapRadius - (distanceFromOrigin - EngineConfigFake.Value.WorldFood.FoodSize); i++)
            {
                WorldStateService.ApplyAfterTickStateChanges();
            }

            Assert.AreEqual(countBefore - 1, objects.Count(a => a.GameObjectType == GameObjectType.Food));
        }