private static IEnumerable <Vector2D> GetPathForCreep(this GameLevel gameLevel) { var storedPaths = gameLevel.GetStoredPaths(); if (storedPaths.Count == 1) { return(storedPaths[0].GetListOfCoordinates()); } int max = 0; int min = 0; for (int i = 1; i < storedPaths.Count; i++) { if (storedPaths[i].FinalCost < storedPaths[min].FinalCost) { min = i; } else if (storedPaths[i].FinalCost > storedPaths[max].FinalCost) { max = i; } } var valueMin = storedPaths[min].FinalCost / storedPaths[min].GetListOfCoordinates().Count; var valueMax = storedPaths[max].FinalCost / storedPaths[max].GetListOfCoordinates().Count; return(Math.Abs(valueMax - valueMin) <= 50 ? storedPaths[Randomizer.Current.Get(0, storedPaths.Count)].GetListOfCoordinates() : storedPaths[min].GetListOfCoordinates()); }
public static void CleanLevel(this GameLevel level) { if (level == null) { return; } level.RemoveTowers(); level.RemoveCreeps(); level.GetStoredPaths().Clear(); level.RemoveCurrentTracers(); ResetPlayerGoldAndLives(); level.DeadCreepCount = 0; level.ExitReachedCreepCount = 0; level.WaveGenerator.Dispose(); level.IsCompleted = false; }
public static bool UpdatePathsIfPossible(this GameLevel gameLevel) { for (int i = 0; i < gameLevel.SpawnPoints.Count; i++) { for (int j = 0; j < gameLevel.GoalPoints.Count; j++) { var list = gameLevel.GetPath(gameLevel.SpawnPoints[i], gameLevel.GoalPoints[j]); if (list.GetListOfCoordinates().Count == 0) { return(false); } var storedPaths = gameLevel.GetStoredPaths(); storedPaths[i * gameLevel.SpawnPoints.Count + j] = list; } } gameLevel.UpdateTracers(); return(true); }