public Map GenerateMap(MapBiome mapBiome = null) { if (mapBiome is null) { mapBiome = new GrasslandMapBiome(); } Map map = new Map() { mapBiome = mapBiome }; Thread mapCreator = new Thread(() => map.SetupMap(mapBiome.DefaultParameters().PerlinDiff, World.World.random.Next(), mapBiome.DefaultParameters().HeightDiff + mission.heightDiff, mapBiome)); mapCreator.Start(); mapCreator.Priority = ThreadPriority.Highest; bool validMap = false; bool finished = mapCreator.Join(Map.creationTime); int counter = 20; while (!(finished && validMap)) { int seed = World.World.random.Next(); mapCreator = new Thread(() => map.SetupMap(mapBiome.DefaultParameters().PerlinDiff, World.World.random.Next(), mapBiome.DefaultParameters().HeightDiff + mission.heightDiff, mapBiome)); mapCreator.Start(); mapCreator.Priority = ThreadPriority.Highest; finished = mapCreator.Join(Map.creationTime); validMap = mission.MapValidity(map); counter--; if (counter == 0) { throw new Exception("Can not find valid map!"); } } return(map); }
/// <summary> /// Initialises next mission in the campaign. Returns true if there is a next mission, false if the campaign is over /// </summary> public bool Next() { if (playedGames.Count + 1 == numberOfGames) { return(false); } if (activeGame is null) { throw new Exception(); } playedGames.Add(activeGame); mission = DecideMission(Round); //Setup map Map map = new Map(); Thread mapCreator; do { mapCreator = new Thread(() => map.SetupMap(0.1, World.World.random.Next(), 0)) { Priority = ThreadPriority.Highest }; mapCreator.Start(); } while (!mapCreator.Join(Map.creationTime) && !mission.MapValidity(map)); player.map = map; player.troop.Map = map; //Finish initialisation player.active = false; activeGame = new MainGameWindow(map, player, mission, trees, difficulty, Round); return(true); }