protected override void Start() { base.Start(); health.Initialized(maxHealth, maxHealth); banditAI = GetComponent <BanditAI>(); StartCoroutine(CheckDistance()); }
string description) GenerateMission(int difficulty, int Round, ref Map map, Player player) { string desc = "Welcome to the mission. "; #region Player Creation List <Player> players = new List <Player>() { player }; //Set player position List <Point> startPos = map.DeterminSpawnPoint(1, SpawnType.road); if (startPos.Count == 0) { startPos = map.DeterminSpawnPoint(1, SpawnType.randomLand); } players[0].troop.Position = startPos[0]; //Generate enemies and set position int enemyNumber = Round + map.width / 15; List <string> botNames = new List <string>() { "Hal", "Test", "Steve", "John", "Duff", "Mike", "Pence", "Alfred", "Bob", "Donald" }; List <Point> spawnPoints = map.DeterminSpawnPoint(enemyNumber, SpawnType.randomLand); for (int i = 0; i < enemyNumber; i++) { string name = botNames[World.World.random.Next(botNames.Count)]; botNames.Remove(name); BanditAI item = new BanditAI(PlayerType.computer, name, map, new Player[] { player }); item.troop = new Troop(name, new Weapon(4 + difficulty / 4 + Round - 1, BaseAttackType.melee, BaseDamageType.blunt, 1, "Fists", 1, false), Resources.enemyScout, 0, map, item) { armours = new List <Armour> { new Armour("Shirt", 32, new List <BodyParts> { BodyParts.LeftUpperArm, BodyParts.RightUpperArm, BodyParts.Torso }, Material.Materials.First(m => m.name == "Cloth"), Quality.Broken, ArmourLayer.clothing), new Armour("Hose", 60, new List <BodyParts> { BodyParts.UpperLegs, BodyParts.LeftLowerLeg, BodyParts.RightLowerLeg, BodyParts.LeftShin, BodyParts.RightShin }, Material.Materials.First(m => m.name == "Cloth"), Quality.Simple, ArmourLayer.clothing) } }; players.Add(item); players[i + 1].troop.Position = spawnPoints[i]; } #endregion Player Creation #region WinCodition Creation List <WinCheck> wins = new List <WinCheck> { deathCheck }; desc += "Kill all the enemies. "; int distance(Point A, Point B) { return(Math.Abs(A.X - B.X) + Math.Abs(A.Y - B.Y)); } //Find goal region Point playerPosition = startPos[0]; List <MapTile> goalLocations = new List <MapTile>(map.goals); if (goalLocations.Count > 1) { goalLocations.Sort((l1, l2) => { int dis1 = distance(l1.position, playerPosition); int dis2 = distance(l2.position, playerPosition); if (dis1 == dis2) { return(0); } else if (dis1 > dis2) { return(-1); } else { return(1); } }); Point goal = goalLocations.First().position; if (distance(goal, playerPosition) > map.width / 2) { desc += $"You can also reach the field [{goal.X}, {goal.Y}] to win."; //Make the player go somewhere map.overlayObjects.Add(new OverlayRectangle(goal.X * MapCreator.fieldSize, goal.Y * MapCreator.fieldSize, MapCreator.fieldSize, MapCreator.fieldSize, Color.Gold, Once: false)); wins.Add((_map, main) => main.humanPlayer != null && goal == main.humanPlayer.troop.Position); } } #endregion WinCodition Creation #region DeathCondition Creation List <WinCheck> deaths = new List <WinCheck> { playerDeath }; desc += "Do not die. "; #endregion DeathCondition Creation desc += "Good luck! "; return(players, wins, deaths, desc); }
string description) GenerateMission(int difficulty, int Round, ref Map map, Player player) { string desc = "Defend the caravan. "; #region Player Creation List <Player> players = new List <Player>() { player }; //Set player position List <Point> startPos = map.DeterminSpawnPoint(1, SpawnType.centralRoad); if (startPos.Count == 0) { startPos = map.DeterminSpawnPoint(1, SpawnType.randomLand); } players[0].troop.Position = startPos[0]; // Add wagon Building caravanWagon = new Building("Wagon", startPos[0], Resources.CaravanWagon, map); map.entities.Add(caravanWagon); map.renderObjects.Add(new EntityRenderObject(caravanWagon, new TeleportPointAnimation(new Point(0, 0), caravanWagon.Position))); //Generate enemies and set position int enemyNumber = difficulty / 2 + 2; List <Point> spawnPoints = map.DeterminSpawnPoint(enemyNumber, SpawnType.randomRoughCircle); for (int i = 0; i < enemyNumber; i++) { Bitmap image = Resources.enemyScout; Weapon weapon = new Weapon(3 + difficulty / 4 + World.World.random.Next(-2, 4), BaseAttackType.melee, BaseDamageType.sharp, 1, "Sword", 1, false); if (World.World.random.Next(5) == 1) { weapon = new RangedWeapon(4 + difficulty / 6, BaseDamageType.sharp, 8, "Bow", 12, false, AmmoType.Arrow, 2); image = Resources.Archer; } string name = PlayerDataResource.GetMaleName(); BanditAI item = new BanditAI(PlayerType.computer, name, map, new Player[] { player }, 2 + difficulty / 5 + World.World.random.Next(-1, 2)); item.troop = new Troop(name, weapon, image, 0, map, item) { armours = new List <Armour> { new Armour("Shirt", 32, new List <BodyParts> { BodyParts.LeftUpperArm, BodyParts.RightUpperArm, BodyParts.Torso }, Material.Materials.First(m => m.name == "Cloth"), Quality.Broken, ArmourLayer.clothing), new Armour("Hose", 60, new List <BodyParts> { BodyParts.UpperLegs, BodyParts.LeftLowerLeg, BodyParts.RightLowerLeg, BodyParts.LeftShin, BodyParts.RightShin }, Material.Materials.First(m => m.name == "Cloth"), Quality.Simple, ArmourLayer.clothing) } }; item.troop.health.RawValue += World.World.random.Next(2, 5); players.Add(item); players[i + 1].troop.Position = spawnPoints[i]; } #endregion Player Creation #region WinCodition Creation List <WinCheck> wins = new List <WinCheck> { deathCheck }; desc += "Kill all the enemies. "; #endregion WinCodition Creation #region DeathCondition Creation List <WinCheck> deaths = new List <WinCheck> { playerDeath }; desc += "Do not die. "; #endregion DeathCondition Creation desc += "Good luck! "; return(players, wins, deaths, desc); }