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; }
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 p in persons.GetList()) { troop.persons.Add(p); p.LocationTroop = troop; if (p.LocationArchitecture != null) { p.LocationArchitecture = null; p.OldWorkKind = p.WorkKind; p.WorkKind = ArchitectureWorkKind.无; } } 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.SetMapTileTroop(troop); troop.Scenario.Troops.AddTroopWithEvent(troop); if (troop.OnTroopCreate != null) { troop.OnTroopCreate(troop); } troop.Scenario.ClearPersonStatusCache(); //troop.Persons.ApplyInfluences(); troop.RefreshAllData(); ExtensionInterface.call("CreateTroop", new Object[] { troop.Scenario, troop }); return troop; }