コード例 #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
ファイル: WorldView.cs プロジェクト: quajak/StartGame
        private void RunMission(int difficulty, Mission.Mission selected, StartMission action = null)
        {
            World.Instance.campaign.mission = selected;
            MapBiome biome = new GrasslandMapBiome();

            if (mapBiomes.ContainsKey(World.Instance.worldMap[player.WorldPosition.X, player.WorldPosition.Y].type))
            {
                biome = mapBiomes[World.Instance.worldMap[player.WorldPosition.X, player.WorldPosition.Y].type];
            }
            Map map = World.Instance.campaign.GenerateMap(biome);

            player.map       = map;
            player.troop.Map = map;
            MainGameWindow mainGame = new MainGameWindow(map, player, selected, World.Instance.trees, difficulty, World.WORLD_DIFFICULTY);

            biome.ManipulateMission(mainGame, selected);
            mainGame.RenderMap(true, true, true);
            controller.Stop();
            mainGame.ShowDialog();
            if (action != null)
            {
                action.MissionEnded(mainGame.giveReward);
            }
            if (mainGame.dead)
            {
                //as player is dead campaign is over
                Close();
                return;
            }
            if (mainGame.giveReward)
            {
                //Now give reward
                MissionResult r = CampaignController.GenerateRewardAndHeal(player, mainGame, selected, player.vitality.Value, (player.level / 25d).Cut(0, 1), "Close");
                r.ShowDialog();
            }
            if (running)
            {
                controller.Start();
            }
            World.Instance.missionsCompleted++;
            World.Instance.actors.RemoveAll(p => (p is MissionWorldPlayer wp) && wp.WorldPosition == player.WorldPosition);
            World.Instance.GenerateNewMission();
            Render();
        }