Пример #1
0
        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);
        }
Пример #2
0
        /// <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);
        }