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); }
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); }
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 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 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); }
public void GivenWorldState_WhenApplyAfterTickStateChanges_ReturnShrunkRadius() { WorldStateService.GenerateStartingWorld(); var state = WorldStateService.GetState(); var radius = state.World.Radius; WorldStateService.ApplyAfterTickStateChanges(); Assert.True(state.World.Radius < radius); }
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); }
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 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 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)); }
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); }