예제 #1
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);
        }
예제 #2
0
        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);
        }
예제 #3
0
        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);
        }
예제 #4
0
        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);
        }
예제 #5
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 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);
        }
        public void GivenBotAndSuperfood_WhenResolveCollision_ReturnBotWithActiveEffects()
        {
            WorldStateService.GenerateStartingWorld();
            var state     = WorldStateService.GetState();
            var superfood = FakeGameObjectProvider.GetSuperfoodAt(new Position(0, 10));

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

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

            handler.ResolveCollision(superfood, bot);

            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);
        }