public void ChangeFaction(Faction faction) { if ((faction != null) && (this.BelongedFaction != null)) { if (this.BelongedLegion.BelongedFaction != faction) { this.BelongedLegion.BelongedFaction.RemoveLegion(this.BelongedLegion); faction.AddLegion(this.BelongedLegion); if ((this.BelongedLegion.Kind == LegionKind.Offensive) && (this.BelongedLegion.WillArchitecture.BelongedFaction == faction)) { this.BelongedLegion.Kind = LegionKind.Defensive; } } this.BelongedFaction.Troops.Remove(this); this.BelongedFaction.RemoveTroopKnownAreaData(this); foreach (Person person in this.Persons) { this.BelongedFaction.RemovePerson(person); } foreach (Captive captive in this.Captives) { this.BelongedFaction.RemoveCaptive(captive); } this.BelongedFaction.RemoveMilitary(this.Army); this.BelongedFaction = null; faction.AddTroop(this); faction.AddTroopKnownAreaData(this); foreach (Person person in this.Persons) { faction.AddPerson(person); } foreach (Captive captive in this.Captives.GetList()) { if (captive.CaptiveFaction == faction) { captive.CaptivePerson.MoveToArchitecture(captive.CaptiveFaction.Capital); captive.CaptivePerson.BelongedCaptive = null; this.RemoveCaptive(captive); captive.CaptiveFaction.RemoveSelfCaptive(captive); base.Scenario.Captives.Remove(captive); } else { faction.AddCaptive(captive); } } faction.AddMilitary(this.Army); this.RefreshWithPersonList(this.Persons.GetList()); } }