public void GivenTwoPositions_WhenGetDistanceBetween_ThenReturnDistance20() { var bot1 = FakeGameObjectProvider.GetBotAt(new Position(0, 0)); var bot2 = FakeGameObjectProvider.GetBotAt(new Position(20, 0)); var distanceBetween = vectorCalculatorService.GetDistanceBetween(bot1.Position, bot2.Position); Assert.True(distanceBetween == 20); }
public void GivenListOf4PlayerSeedsAndEmptyList_WhenGeneratePlayerStartingFood_ThenReturnListOfFood() { var positions = new List <Position>(); for (var i = 0; i < EngineConfigFake.Value.BotCount; i++) { positions.Add( VectorCalculatorService.GetNewPlayerStartingPosition( i, EngineConfigFake.Value.BotCount, EngineConfigFake.Value.StartRadius)); } var playerSeeds = new List <int> { 12354789, 58228, 656846, 7108040 }; List <GameObject> foodList = worldObjectGenerationService.GeneratePlayerStartingFood(playerSeeds, new List <GameObject>()); for (int i = 0; i < foodList.Count; i++) { var playerIndex = (int)Math.Floor((double)i / EngineConfigFake.Value.WorldFood.PlayerSafeFood); var distanceBetween = VectorCalculatorService.GetDistanceBetween(positions[playerIndex], foodList[i].Position); Assert.IsTrue( EngineConfigFake.Value.StartingPlayerSize + EngineConfigFake.Value.WorldFood.MinSeparation <= distanceBetween); Assert.IsTrue(distanceBetween <= EngineConfigFake.Value.WorldFood.MaxSeparation); } Assert.AreEqual(EngineConfigFake.Value.WorldFood.PlayerSafeFood * EngineConfigFake.Value.BotCount, foodList.Count); }
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 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 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 GivenListenGameObjects_WhenGenerateWormholes_ThenReturnListOfWormholePairs() { var gameObjects = new List <GameObject>(); var wormholeSeed = EngineConfigFake.Value.Wormholes.Seed ?? new Random().Next(EngineConfigFake.Value.Wormholes.MinSeed, EngineConfigFake.Value.Wormholes.MaxSeed); List <Tuple <GameObject, GameObject> > wormholePairs = worldObjectGenerationService.GenerateWormholes(gameObjects, wormholeSeed); Assert.AreEqual(EngineConfigFake.Value.Wormholes.Count / 2, wormholePairs.Count); Assert.AreEqual(EngineConfigFake.Value.Wormholes.Count, gameObjects.Count); foreach (Tuple <GameObject, GameObject> pair in wormholePairs) { Tuple <GameObject, GameObject> mainPair = pair; foreach (Tuple <GameObject, GameObject> internalPair in wormholePairs) { if (mainPair.Equals(internalPair)) { continue; } var distanceBetween1 = VectorCalculatorService.GetDistanceBetween(mainPair.Item1.Position, internalPair.Item1.Position); var distanceBetween2 = VectorCalculatorService.GetDistanceBetween(mainPair.Item1.Position, internalPair.Item2.Position); var distanceBetween3 = VectorCalculatorService.GetDistanceBetween(mainPair.Item2.Position, internalPair.Item1.Position); var distanceBetween4 = VectorCalculatorService.GetDistanceBetween(mainPair.Item2.Position, internalPair.Item2.Position); var distanceBetween5 = VectorCalculatorService.GetDistanceBetween(mainPair.Item1.Position, mainPair.Item2.Position); var distanceBetween6 = VectorCalculatorService.GetDistanceBetween( internalPair.Item1.Position, internalPair.Item2.Position); Assert.IsTrue( distanceBetween1 >= EngineConfigFake.Value.Wormholes.MinSeparation + EngineConfigFake.Value.Wormholes.MaxSize * 2); Assert.IsTrue( distanceBetween2 >= EngineConfigFake.Value.Wormholes.MinSeparation + EngineConfigFake.Value.Wormholes.MaxSize * 2); Assert.IsTrue( distanceBetween3 >= EngineConfigFake.Value.Wormholes.MinSeparation + EngineConfigFake.Value.Wormholes.MaxSize * 2); Assert.IsTrue( distanceBetween4 >= EngineConfigFake.Value.Wormholes.MinSeparation + EngineConfigFake.Value.Wormholes.MaxSize * 2); Assert.IsTrue( distanceBetween5 >= EngineConfigFake.Value.Wormholes.MinSeparation + EngineConfigFake.Value.Wormholes.MaxSize * 2); Assert.IsTrue( distanceBetween6 >= EngineConfigFake.Value.Wormholes.MinSeparation + EngineConfigFake.Value.Wormholes.MaxSize * 2); } } }
public void GivenPlayerSeedsAndStartingFood_WhenGenerateWorldFood_ThenReturnListOfWorldFood() { var playerSeeds = new List <int> { 12354789, 58228, 656846, 7108040 }; List <GameObject> startingFoodList = worldObjectGenerationService.GeneratePlayerStartingFood(playerSeeds, new List <GameObject>()); List <GameObject> placedFoodList = worldObjectGenerationService.GenerateWorldFood(startingFoodList, playerSeeds, new List <GameObject>()); var foodPerOrigin = (EngineConfigFake.Value.WorldFood.StartingFoodCount - EngineConfigFake.Value.BotCount * EngineConfigFake.Value.WorldFood.PlayerSafeFood) / (EngineConfigFake.Value.BotCount * EngineConfigFake.Value.WorldFood.PlayerSafeFood); for (var j = 0; j <= playerSeeds.Count; j++) { for (var i = foodPerOrigin * j; i < foodPerOrigin * (j + 1) - 1; i++) { var distanceBetween = VectorCalculatorService.GetDistanceBetween( placedFoodList[i].Position, placedFoodList[i + 1].Position); Assert.IsTrue( EngineConfigFake.Value.WorldFood.FoodSize * 2 + EngineConfigFake.Value.WorldFood.MinSeparation <= distanceBetween); Assert.IsTrue(distanceBetween <= EngineConfigFake.Value.WorldFood.MaxSeparation); } } Assert.AreEqual( EngineConfigFake.Value.WorldFood.StartingFoodCount - EngineConfigFake.Value.BotCount * EngineConfigFake.Value.WorldFood.PlayerSafeFood, placedFoodList.Count + 4); List <GameObject> placedSuperfoodList = placedFoodList.FindAll(p => p.GameObjectType == GameObjectType.Superfood); Assert.AreEqual(80, placedSuperfoodList.Count); }
public void GivenWorldSetup_WhenPlaceWormholeWithOrigin_ThenReturnGameObject() { var gameObjects = new List <GameObject>(); var wormholeSeed = 4648964; var worldCenter = new Position(0, 0); var maxPlacementDistance = EngineConfigFake.Value.MapRadius; for (var j = 0; j < EngineConfigFake.Value.Wormholes.Count / 2; j++) { var wormhole = worldObjectGenerationService.PlaceWormholeWithOrigin( gameObjects, ref wormholeSeed, worldCenter, maxPlacementDistance, 0, true); var distanceBetween = VectorCalculatorService.GetDistanceBetween(worldCenter, wormhole.Position); Assert.True(distanceBetween <= maxPlacementDistance); } Assert.AreEqual(EngineConfigFake.Value.Wormholes.Count / 2, gameObjects.Count); }
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)); }