private static void SaveCurrentState(List <Pawn> pawns) { int currentMap = Find.VisibleMap.uniqueID; //Save current state foreach (Pawn p in pawns) { //find colonist on the current zone in the current map AssignLink link = AssignManager.links.Find( x => x.colonist.Equals(p) && x.zone == AssignManager.GetActivePolicy().id&& x.mapId == currentMap); if (link != null) { //colonist found! save link.outfit = p.outfits.CurrentOutfit; link.drugPolicy = p.drugs.CurrentPolicy; link.hostilityResponse = p.playerSettings.hostilityResponse; if (Widget_CombatExtended.CombatExtendedAvailable) { link.loadoutId = Widget_CombatExtended.GetLoadoutId(p); } } else { //colonist not found. So add it to the AssignLink list int loadoutId = 0; if (Widget_CombatExtended.CombatExtendedAvailable) { loadoutId = Widget_CombatExtended.GetLoadoutId(p); } Outfit outfit = p.outfits.CurrentOutfit; if (p.outfits.CurrentOutfit == Current.Game.outfitDatabase.AllOutfits[0]) { outfit = AssignManager.DefaultOutfit; } AssignManager.links.Add( new AssignLink( AssignManager.GetActivePolicy().id, p, outfit, p.drugs.CurrentPolicy, p.playerSettings.hostilityResponse, loadoutId, currentMap)); } } }
public override void DoWindowContents(Rect fillRect) { if (AssignManager.DirtyPolicy) { LoadState( AssignManager.links, this.Pawns.ToList(), AssignManager.GetActivePolicy()); AssignManager.DirtyPolicy = false; } float num = 5f; base.DoWindowContents(fillRect); Rect position = new Rect(0f, 0f, fillRect.width, 65f); GUI.BeginGroup(position); Text.Font = GameFont.Tiny; Text.Anchor = TextAnchor.LowerCenter; Rect rect1 = new Rect(num, -8f, 165f, Mathf.Round(position.height / 3f)); Widgets.Label(rect1, "BPC.CurrentAssignPolicy".Translate()); GUI.EndGroup(); Text.Font = GameFont.Small; Text.Anchor = TextAnchor.UpperLeft; Rect rect2 = new Rect( num, Mathf.Round(position.height / 4f) - 4f, rect1.width, Mathf.Round(position.height / 4f) + 4f); if (Widgets.ButtonText( rect2, AssignManager.GetActivePolicy().label, true, false, true)) { //CleanDeadColonists(this.pawns); SaveCurrentState(this.Pawns.ToList()); OpenAssignPolicySelectMenu( AssignManager.links, this.Pawns.ToList()); } num += rect1.width; Rect rect3 = new Rect( num, 0f, 20f, Mathf.Round(position.height / 2f)); if (Widgets.ButtonText(rect3, "", true, false, true)) { Find.WindowStack.Add( new Dialog_ManagePolicies(Find.VisibleMap)); } Rect rect4 = new Rect(num + 3f, rect3.height / 4f, 14f, 14f); GUI.DrawTexture(rect4, Resources.Settings); TooltipHandler.TipRegion(rect4, "BPC.Settings".Translate()); }
public override void PreOpen() { base.PreOpen(); AssignManager.CleanDeadMaps(); AssignManager.UpdateState( AssignManager.links, this.Pawns.ToList(), AssignManager.GetActivePolicy()); AssignManager.LoadState( AssignManager.links, this.Pawns.ToList(), AssignManager.GetActivePolicy()); AssignManager.CleanDeadColonists(this.Pawns.ToList()); }
internal static void SaveCurrentState(List <Pawn> pawns) { int currentMap = Find.CurrentMap.uniqueID; //Save current state foreach (Pawn p in pawns) { //find colonist on the current zone in the current map AssignLink link = AssignManager.links.Find( x => p.Equals(x.colonist) && x.zone == AssignManager.GetActivePolicy().id&& x.mapId == currentMap); if (link != null) { //colonist found! save link.outfit = p.outfits.CurrentOutfit; link.drugPolicy = p.drugs.CurrentPolicy; link.hostilityResponse = p.playerSettings.hostilityResponse; link.foodPolicy = p.foodRestriction.CurrentFoodRestriction; if (Widget_CombatExtended.CombatExtendedAvailable) { link.loadoutId = Widget_CombatExtended.GetLoadoutId(p); } } else { //colonist not found. So add it to the AssignLink list int loadoutId = 0; if (Widget_CombatExtended.CombatExtendedAvailable) { loadoutId = Widget_CombatExtended.GetLoadoutId(p); } Outfit outfit = p.outfits.CurrentOutfit; if (outfit == Current.Game.outfitDatabase.DefaultOutfit()) { outfit = AssignManager.DefaultOutfit; } DrugPolicy drug = p.drugs.CurrentPolicy; if (drug == Current.Game.drugPolicyDatabase.DefaultDrugPolicy()) { drug = AssignManager.DefaultDrugPolicy; } FoodRestriction food = p.foodRestriction.CurrentFoodRestriction; if (food == Current.Game.foodRestrictionDatabase.DefaultFoodRestriction()) { food = AssignManager.DefaultFoodPolicy; } AssignManager.links.Add( new AssignLink( AssignManager.GetActivePolicy().id, p, outfit, food, drug, p.playerSettings.hostilityResponse, loadoutId, currentMap)); } } }