コード例 #1
0
        /// <summary>
        /// Initialises campaign and generates map and enemies for first mission
        /// </summary>
        public void Start()
        {
            //Setup map
            mission = DecideMission(Round);
            Map map = GenerateMap();

            player.map       = map;
            player.troop.Map = map;

            //Finish initialisation
            activeGame = new MainGameWindow(map, player, mission, trees, difficulty, Round);
        }
コード例 #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);
        }
コード例 #3
0
        public static MissionResult GenerateRewardAndHeal(HumanPlayer player, MainGameWindow mainWindow, Mission.Mission mission, int healthRegen, double progression, string closeButtonText)
        {
            //Reset troop stats
            foreach (Weapon weapon in player.troop.weapons)
            {
                if (weapon.type != BaseAttackType.range)
                {
                    weapon.SetAttacks(weapon.MaxAttacks());
                }
            }

            player.mana.RawValue          = player.mana.MaxValue().Value;
            player.troop.health.RawValue += healthRegen;
            player.troop.health.RawValue  = player.troop.health.Value > player.troop.health.MaxValue().Value ? player.troop.health.MaxValue().Value : player.troop.health.Value;

            List <Armour> loot = new List <Armour>();

            if (mission.lootDead)
            {
                //Generate loot from dead players
                List <Armour> lootableArmour = new List <Armour>();
                foreach (var deadPlayer in mainWindow.killedPlayers)
                {
                    lootableArmour.AddRange(deadPlayer.troop.armours);
                }

                lootableArmour = lootableArmour.OrderBy(a => World.World.random.Next()).ToList(); // I know it is not the most effiecent but that does not matter here

                int chosen = 0;
                foreach (var lootpiece in lootableArmour)
                {
                    if (World.World.random.NextDouble() < 1d / (chosen + 1d))
                    {
                        lootpiece.active = false;
                        loot.Add(lootpiece);
                        chosen++;
                    }
                }
            }
            //Show world map
            MissionResult worldView = new MissionResult(player, progression, mission, loot, closeButtonText);

            return(worldView);
        }