예제 #1
0
 public static Troop CreateSimulateTroop(Architecture architecture, GameObjectList persons, Person Leader, Military military, int rationdays, Point startPosition)
 {
     Troop troop = new Troop();
     troop.Scenario = architecture.Scenario;
     troop.BelongedFaction = architecture.BelongedFaction;
     troop.Simulating = true;
     troop.TechnologyIncrement = architecture.Technology / 50;
     troop.StartingArchitecture = architecture;
     if (persons != null)
     {
         foreach (Person person in persons)
         {
             troop.AddPerson(person);
         }
         troop.SetLeader(Leader);
     }
     if (military != null)
     {
         troop.BackupArmyLeaderID = (military.Leader != null) ? military.Leader.ID : -1;
         troop.BackupArmyLeaderExperience = military.LeaderExperience;
         troop.BackupArmyLeader = military.Leader;
         troop.Army = military;
         troop.Food = military.FoodCostPerDay * rationdays;
     }
     if (persons != null)
     {
         troop.SimulateInitializePosition(startPosition);
         foreach (Person person in persons)
         {
             person.LocationTroop = null;
         }
     }
     troop.Simulating = false;
     if (military != null)
     {
         military.Leader = troop.BackupArmyLeader;
         military.LeaderExperience = troop.BackupArmyLeaderExperience;
         military.LeaderID = troop.BackupArmyLeaderID;
     }
     return troop;
 }
예제 #2
0
 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;
 }
예제 #3
0
 public static Troop CreateSimulateTroop(GameObjectList persons, Military military, Point startPosition)
 {
     Troop troop = new Troop();
     troop.Scenario = military.Scenario;
     troop.Simulating = true;
     if (persons != null)
     {
         foreach (Person person in persons)
         {
             troop.AddPerson(person);
         }
         troop.SetLeader(persons[0] as Person);
         troop.BackupArmyLeaderID = (military.Leader != null) ? military.Leader.ID : -1;
         troop.BackupArmyLeaderExperience = military.LeaderExperience;
         troop.BackupArmyLeader = military.Leader;
         troop.Army = military;
         troop.SimulateInitializePosition(startPosition);
         foreach (Person person in persons)
         {
             person.LocationTroop = null;
         }
     }
     troop.Simulating = false;
     military.Leader = troop.BackupArmyLeader;
     military.LeaderExperience = troop.BackupArmyLeaderExperience;
     military.LeaderID = troop.BackupArmyLeaderID;
     return troop;
 }
예제 #4
0
 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;
 }