Beispiel #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);
        }
Beispiel #2
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_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);
        }
        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 #5
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);
        }
Beispiel #6
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);
        }
Beispiel #7
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 #9
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 #10
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 #11
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));
        }
Beispiel #12
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);
        }
Beispiel #14
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));
        }
Beispiel #15
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);
        }
        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);
        }