public override void PreOpen() { base.PreOpen(); WorkManager.CleanDeadMaps(); WorkManager.LoadState( WorkManager.links, this.Pawns.ToList(), WorkManager.GetActivePolicy()); WorkManager.CleanDeadColonists(this.Pawns.ToList()); }
internal static void PasteToActivePolicy() { Policy policy = GetActivePolicy(); if (!WorkManager.clipboard.NullOrEmpty() && WorkManager.clipboard[0].zone != policy.id) { WorkManager.links.RemoveAll(x => x.zone == policy.id); foreach (WorkLink copiedLink in WorkManager.clipboard) { copiedLink.zone = policy.id; WorkManager.links.Add(new WorkLink(copiedLink)); } WorkManager.LoadState(links, Find.CurrentMap.mapPawns.FreeColonists.ToList(), policy); } }
private static void DoColumn( Rect rect, Policy policy, Resources.Type type) { GUI.BeginGroup(rect); WidgetRow widgetRow = new WidgetRow(0f, 0f, UIDirection.RightThenUp, 99999f, 4f); widgetRow.Gap(4f); if (policy != null) { widgetRow.Label(policy.label, 138f); if (widgetRow.ButtonText( "BPC.Rename".Translate(), null, true, false)) { Find.WindowStack.Add(new Dialog_RenamePolicy(policy, type)); } if (policy.id > 0 && widgetRow.ButtonIcon( ContentFinder <Texture2D> .Get( "UI/Buttons/Delete", true), null)) { switch (type) { case Resources.Type.assign: AssignManager.DeletePolicy(policy); break; case Resources.Type.animal: AnimalManager.DeletePolicy(policy); break; case Resources.Type.restrict: RestrictManager.DeletePolicy(policy); break; case Resources.Type.work: WorkManager.DeletePolicy(policy); break; } } } GUI.EndGroup(); }
internal static void OpenWorkPolicySelectMenu( List <WorkLink> links, List <Pawn> pawns) { List <FloatMenuOption> list = new List <FloatMenuOption>(); foreach (Policy workPolicy in WorkManager.policies) { list.Add( new FloatMenuOption( workPolicy.label, delegate { WorkManager.LoadState( links, pawns, workPolicy); }, MenuOptionPriority.Default, null, null, 0f, null)); } Find.WindowStack.Add(new FloatMenu(list)); }
internal static void CleanDeadMaps() { for (int i = 0; i < WorkManager.activePolicies.Count; i++) { MapActivePolicy map = WorkManager.activePolicies[i]; if (!Find.Maps.Any(x => x.uniqueID == map.mapId)) { if (Find.Maps.Count == 1 && !WorkManager.ActivePoliciesContainsValidMap()) { //this means the player was on the move without any base //and just re-settled. So, let's move the settings to //the new map int mapid = Find.CurrentMap.uniqueID; WorkManager.MoveLinksToMap(mapid); map.mapId = mapid; } else { WorkManager.DeleteLinksInMap(map.mapId); WorkManager.DeleteMap(map); } } } }
public override void ExposeData() { base.ExposeData(); if (Scribe.mode == LoadSaveMode.LoadingVars || Scribe.mode == LoadSaveMode.Saving) { Scribe_References.Look <Outfit>( ref AssignManager._defaultOutfit, "DefaultOutfit"); Scribe_References.Look <DrugPolicy>( ref AssignManager._defaultDrugPolicy, "DefaultDrugPolicy"); Scribe_References.Look <FoodRestriction>( ref AssignManager._defaultFoodPolicy, "DefaultFoodPolicy"); Scribe_References.Look <FoodRestriction>( ref AssignManager._defaultPrisonerFoodPolicy, "DefaultPrisonerFoodPolicy"); Scribe_Collections.Look <Policy>( ref AssignManager.policies, "AssignPolicies", LookMode.Deep); Scribe_Collections.Look <AssignLink>( ref AssignManager.links, "AssignLinks", LookMode.Deep); if (AssignManager.links == null) { //this is only required if the save file contains //empty links AssignManager.InstantiateLinks(); } Scribe_Collections.Look <string>( ref AssignManager.Prisoners, "Prisoners", LookMode.Value); if (AssignManager.Prisoners == null) { //this is only required if the save file contains //empty prisoners AssignManager.InstantiatePrisoners(); } Scribe_Collections.Look <MapActivePolicy>( ref AssignManager.activePolicies, "AssignActivePolicies", LookMode.Deep); Scribe_Collections.Look <Policy>( ref AnimalManager.policies, "AnimalPolicies", LookMode.Deep); Scribe_Collections.Look <AnimalLink>( ref AnimalManager.links, "AnimalLinks", LookMode.Deep); if (AnimalManager.links == null) { //this is only required if the save file contains //empty links. Not sure how this can happen though :( AnimalManager.InstantiateLinks(); } Scribe_Collections.Look <MapActivePolicy>( ref AnimalManager.activePolicies, "AnimalActivePolicies", LookMode.Deep); Scribe_Collections.Look <Policy>( ref RestrictManager.policies, "RestrictPolicies", LookMode.Deep); Scribe_Collections.Look <RestrictLink>( ref RestrictManager.links, "RestrictLinks", LookMode.Deep); if (RestrictManager.links == null) { //this is only required if the save file contains //empty links. Not sure how this can happen though :( RestrictManager.InstantiateLinks(); } Scribe_Collections.Look <Policy>( ref WorkManager.policies, "WorkPolicies", LookMode.Deep); Scribe_Collections.Look <WorkLink>( ref WorkManager.links, "WorkLinks", LookMode.Deep); Scribe_Collections.Look <MapActivePolicy>( ref WorkManager.activePolicies, "WorkActivePolicies", LookMode.Deep); if (WorkManager.links == null) { //this is only required if the save file contains //empty links. Not sure how this can happen though :( WorkManager.InstantiateLinks(); } if (Scribe.mode == LoadSaveMode.LoadingVars && WorkManager.activePolicies == null) { //this only happens with existing saves prior. Existing saves //have no WorkPolicy data so let's initialize! WorkManager.ForceInit(); } } if (Scribe.mode == LoadSaveMode.ResolvingCrossRefs) { Scribe_References.Look <Outfit>( ref AssignManager._defaultOutfit, "DefaultOutfit"); Scribe_References.Look <DrugPolicy>( ref AssignManager._defaultDrugPolicy, "DefaultDrugPolicy"); Scribe_References.Look <FoodRestriction>( ref AssignManager._defaultFoodPolicy, "DefaultFoodPolicy"); Scribe_References.Look <FoodRestriction>( ref AssignManager._defaultPrisonerFoodPolicy, "DefaultPrisonerFoodPolicy"); } }
//public class DataStorage : WorldComponent //{ // public DataStorage(World world) : base(world) // { // } public override void ExposeData() { base.ExposeData(); if (Scribe.mode == LoadSaveMode.LoadingVars) { //Let's make sure all static variables are cleaned. //This shows there's a fundamental problem with this code //A code refractor is require to remove the Static Managers //and replace it with GameComponents AssignManager.Prisoners = null; AssignManager.links = null; AssignManager.policies = null; AssignManager.activePolicies = null; AssignManager.DefaultDrugPolicy = null; AssignManager.DefaultFoodPolicy = null; AssignManager.DefaultOutfit = null; AssignManager.DefaultPrisonerFoodPolicy = null; AnimalManager.links = null; AnimalManager.policies = null; AnimalManager.activePolicies = null; WorkManager.links = null; WorkManager.policies = null; WorkManager.activePolicies = null; RestrictManager.links = null; RestrictManager.policies = null; RestrictManager.activePolicies = null; AlertManager.alertLevelsList = null; System.GC.Collect(); } if (Scribe.mode == LoadSaveMode.LoadingVars || Scribe.mode == LoadSaveMode.Saving) { Scribe_References.Look <Outfit>( ref AssignManager._defaultOutfit, "DefaultOutfit"); Scribe_References.Look <DrugPolicy>( ref AssignManager._defaultDrugPolicy, "DefaultDrugPolicy"); Scribe_References.Look <FoodRestriction>( ref AssignManager._defaultFoodPolicy, "DefaultFoodPolicy"); Scribe_References.Look <FoodRestriction>( ref AssignManager._defaultPrisonerFoodPolicy, "DefaultPrisonerFoodPolicy"); Scribe_Collections.Look <Policy>( ref AssignManager.policies, "AssignPolicies", LookMode.Deep); Scribe_Collections.Look <AssignLink>( ref AssignManager.links, "AssignLinks", LookMode.Deep); Scribe_Collections.Look <string>( ref AssignManager.Prisoners, "Prisoners", LookMode.Value); if (AssignManager.Prisoners == null) { //this is only required if the save file contains //empty prisoners AssignManager.InstantiatePrisoners(); } Scribe_Collections.Look <MapActivePolicy>( ref AssignManager.activePolicies, "AssignActivePolicies", LookMode.Deep); Scribe_Collections.Look <Policy>( ref AnimalManager.policies, "AnimalPolicies", LookMode.Deep); Scribe_Collections.Look <AnimalLink>( ref AnimalManager.links, "AnimalLinks", LookMode.Deep); Scribe_Collections.Look <MapActivePolicy>( ref AnimalManager.activePolicies, "AnimalActivePolicies", LookMode.Deep); Scribe_Collections.Look <Policy>( ref RestrictManager.policies, "RestrictPolicies", LookMode.Deep); Scribe_Collections.Look <RestrictLink>( ref RestrictManager.links, "RestrictLinks", LookMode.Deep); Scribe_Collections.Look <MapActivePolicy>( ref RestrictManager.activePolicies, "RestrictActivePolicies", LookMode.Deep); Scribe_Collections.Look <Policy>( ref WorkManager.policies, "WorkPolicies", LookMode.Deep); Scribe_Collections.Look <WorkLink>( ref WorkManager.links, "WorkLinks", LookMode.Deep); Scribe_Collections.Look <MapActivePolicy>( ref WorkManager.activePolicies, "WorkActivePolicies", LookMode.Deep); Scribe_Values.Look <int>( ref AlertManager._alertLevel, "ActiveLevel", 0, true); Scribe_Values.Look <bool>( ref AlertManager._automaticPawnsInterrupt, "AutomaticPawnsInterrupt", true, true); Scribe_Collections.Look <AlertLevel>( ref AlertManager.alertLevelsList, "AlertLevelsList", LookMode.Deep); if (Scribe.mode == LoadSaveMode.LoadingVars && WorkManager.activePolicies == null) { //this only happens with existing saves. Existing saves //have no WorkPolicy data so let's initialize! WorkManager.ForceInit(); } if (Scribe.mode == LoadSaveMode.LoadingVars && RestrictManager.activePolicies == null) { //temporary code to be removed on the next version. To fix saves games without activePolicies RestrictManager.FixActivePolicies(); } } if (Scribe.mode == LoadSaveMode.ResolvingCrossRefs) { Scribe_References.Look <Outfit>( ref AssignManager._defaultOutfit, "DefaultOutfit"); Scribe_References.Look <DrugPolicy>( ref AssignManager._defaultDrugPolicy, "DefaultDrugPolicy"); Scribe_References.Look <FoodRestriction>( ref AssignManager._defaultFoodPolicy, "DefaultFoodPolicy"); Scribe_References.Look <FoodRestriction>( ref AssignManager._defaultPrisonerFoodPolicy, "DefaultPrisonerFoodPolicy"); } }
public override void DoWindowContents(Rect fillRect) { if (WorkManager.DirtyPolicy) { WorkManager.LoadState( WorkManager.links, this.Pawns.ToList(), WorkManager.GetActivePolicy()); WorkManager.DirtyPolicy = false; } float offsetX = 160f; 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(offsetX, -8f, 165f, Mathf.Round(position.height / 3f)); Widgets.Label(rect1, "BPC.CurrentWorkPolicy".Translate()); GUI.EndGroup(); Text.Font = GameFont.Small; Text.Anchor = TextAnchor.UpperLeft; Rect rect2 = new Rect( offsetX, Mathf.Round(position.height / 4f) - 4f, rect1.width, Mathf.Round(position.height / 4f) + 4f); if (Widgets.ButtonText( rect2, WorkManager.GetActivePolicy().label, true, false, true)) { WorkManager.SaveCurrentState(this.Pawns.ToList()); OpenWorkPolicySelectMenu( WorkManager.links, this.Pawns.ToList()); } offsetX += rect1.width; Rect rect3 = new Rect( offsetX, 0f, 20f, Mathf.Round(position.height / 2f)); if (Widgets.ButtonText(rect3, "", true, false, true)) { Find.WindowStack.Add( new Dialog_ManagePolicies(Find.CurrentMap)); } Rect rect4 = new Rect(offsetX + 3f, rect3.height / 4f, 14f, 14f); GUI.DrawTexture(rect4, Resources.Settings); TooltipHandler.TipRegion(rect4, "BPC.Settings".Translate()); offsetX += rect3.width; Rect rect5 = new Rect(offsetX + 3f, rect3.height / 4f - 6f, 21f, 28f); if (Widgets.ButtonImage(rect5, ContentFinder <Texture2D> .Get("UI/Buttons/Copy", true))) { WorkManager.CopyToClipboard(); SoundDefOf.Tick_High.PlayOneShotOnCamera(null); showPaste = true; } TooltipHandler.TipRegion(rect5, "BPC.Copy".Translate()); if (showPaste) { offsetX += rect3.width; Rect rect6 = new Rect(offsetX + 3f, rect3.height / 4f - 6f, 21f, 28f); if (Widgets.ButtonImage(rect6, ContentFinder <Texture2D> .Get("UI/Buttons/Paste", true))) { WorkManager.PasteToActivePolicy(); SoundDefOf.Tick_Low.PlayOneShotOnCamera(null); } TooltipHandler.TipRegion(rect6, "BPC.Paste".Translate()); } }