public static Troop Create(Architecture from, GameObjectList persons, Person leader, Military military, int food, Point position) { Troop troop = new Troop(); troop.Scenario = from.Scenario; troop.destination = position; troop.realDestination = position; troop.StartingArchitecture = from; troop.ID = troop.Scenario.Troops.GetFreeGameObjectID(); foreach (Person person in persons.GetList()) { troop.AddPerson(person); from.RemovePerson(person); } troop.SetLeader(leader); if (from.BelongedFaction != null) { from.BelongedFaction.AddTroop(troop); troop.TechnologyIncrement = from.Technology / 50; if (military.ShelledMilitary == null) { from.RemoveMilitary(military); } else { from.RemoveMilitary(military.ShelledMilitary); from.Scenario.Militaries.AddMilitary(military); } } troop.Army = military; if (food < 0) { if (from.Food > (6 * military.FoodMax)) { troop.Food = military.FoodMax; } else if (from.Food > (3 * military.FoodMax)) { troop.Food = military.FoodCostPerDay * ((int) Math.Ceiling((double) (((float) military.RationDays) / 2f))); } else if (from.Food > military.FoodMax) { troop.Food = military.FoodCostPerDay * (1 + (military.RationDays / 4)); } else if (from.Food > (military.FoodCostPerDay * (1 + (military.RationDays / 6)))) { troop.Food = military.FoodCostPerDay * (1 + (military.RationDays / 6)); } else if (from.Food > military.FoodCostPerDay) { troop.Food = military.FoodCostPerDay; } else { troop.Food = 0; } } else { troop.Food = food; } if (troop.Food > 0) { from.DecreaseFood(troop.Food); } troop.InitializePosition(position); troop.Scenario.Troops.AddTroopWithEvent(troop); if (troop.OnTroopCreate != null) { troop.OnTroopCreate(troop); } return troop; }
private void CheckCaptiveOnOccupy(Architecture a) { if ((this.BelongedFaction != null) && (a.BelongedFaction != null)) { PersonList personlist = new PersonList(); foreach (Person person in a.Persons) { if (!(person.ImmunityOfCaptive || (GameObject.Random(this.CaptiveAblility) <= GameObject.Random(person.CaptiveAbility + 200)))) { personlist.Add(person); } } if (personlist.Count > 0) { foreach (Person person in personlist) { a.RemovePerson(person); Captive captive = Captive.Create(base.Scenario, person, this.BelongedFaction); if (captive != null) { this.AddCaptive(captive); } } if (this.OnGetNewCaptive != null) { this.OnGetNewCaptive(this, personlist); } } } }