public void ConstructComponents() { this.worldObjects = new WorldObjectsHolder(); this.factionManager = new FactionManager(); this.uniqueIDsManager = new UniqueIDsManager(); this.worldPawns = new WorldPawns(); this.settings = new WorldSettings(); this.gameConditionManager = new GameConditionManager(null); this.storyState = new StoryState(this); this.renderer = new WorldRenderer(); this.UI = new WorldInterface(); this.debugDrawer = new WorldDebugDrawer(); this.dynamicDrawManager = new WorldDynamicDrawManager(); this.pathFinder = new WorldPathFinder(); this.pathPool = new WorldPathPool(); this.reachability = new WorldReachability(); this.floodFiller = new WorldFloodFiller(); this.ticksAbsCache = new ConfiguredTicksAbsAtGameStartCache(); this.components.Clear(); this.FillComponents(); }
public override void PostExposeData(object obj) { if (Scribe.mode == LoadSaveMode.PostLoadInit) { Map map = obj as Map; if (map != null) { if (map.retainedCaravanData == null) { map.retainedCaravanData = new RetainedCaravanData(map); } if (map.wildAnimalSpawner == null) { map.wildAnimalSpawner = new WildAnimalSpawner(map); } if (map.wildPlantSpawner == null) { map.wildPlantSpawner = new WildPlantSpawner(map); } } Thing thing = obj as Thing; if (thing != null && thing.def.useHitPoints && thing.MaxHitPoints != thing.HitPoints && Mathf.Abs((float)thing.HitPoints / (float)thing.MaxHitPoints - 0.617f) < 0.02f && thing.Stuff == ThingDefOf.WoodLog) { thing.HitPoints = thing.MaxHitPoints; } Pawn pawn = obj as Pawn; if (pawn != null && !pawn.Destroyed && !pawn.Dead && pawn.needs == null) { Log.Error(pawn.ToStringSafe() + " has null needs tracker even though he's not dead. Fixing..."); pawn.needs = new Pawn_NeedsTracker(pawn); pawn.needs.SetInitialLevels(); } History history = obj as History; if (history != null && history.archive == null) { history.archive = new Archive(); } WorldInfo worldInfo = obj as WorldInfo; if (worldInfo != null && worldInfo.persistentRandomValue == 0) { worldInfo.persistentRandomValue = Rand.Int; } Caravan caravan = obj as Caravan; if (caravan != null) { if (caravan.forage == null) { caravan.forage = new Caravan_ForageTracker(caravan); } if (caravan.needs == null) { caravan.needs = new Caravan_NeedsTracker(caravan); } if (caravan.carryTracker == null) { caravan.carryTracker = new Caravan_CarryTracker(caravan); } if (caravan.beds == null) { caravan.beds = new Caravan_BedsTracker(caravan); } } PlaySettings playSettings = obj as PlaySettings; if (playSettings != null) { playSettings.defaultCareForColonyHumanlike = MedicalCareCategory.Best; playSettings.defaultCareForColonyAnimal = MedicalCareCategory.HerbalOrWorse; playSettings.defaultCareForColonyPrisoner = MedicalCareCategory.HerbalOrWorse; playSettings.defaultCareForNeutralFaction = MedicalCareCategory.HerbalOrWorse; playSettings.defaultCareForNeutralAnimal = MedicalCareCategory.HerbalOrWorse; playSettings.defaultCareForHostileFaction = MedicalCareCategory.HerbalOrWorse; } } if (Scribe.mode == LoadSaveMode.LoadingVars) { Hediff hediff = obj as Hediff; if (hediff != null) { Scribe_Values.Look(ref hediff.temp_partIndexToSetLater, "partIndex", -1); } Bill_Medical bill_Medical = obj as Bill_Medical; if (bill_Medical != null) { Scribe_Values.Look(ref bill_Medical.temp_partIndexToSetLater, "partIndex", -1); } FactionRelation factionRelation = obj as FactionRelation; if (factionRelation != null) { bool value = false; Scribe_Values.Look(ref value, "hostile", defaultValue: false); if (value || factionRelation.goodwill <= -75) { factionRelation.kind = FactionRelationKind.Hostile; } else if (factionRelation.goodwill >= 75) { factionRelation.kind = FactionRelationKind.Ally; } } HediffComp_GetsPermanent hediffComp_GetsPermanent = obj as HediffComp_GetsPermanent; if (hediffComp_GetsPermanent != null) { bool value2 = false; Scribe_Values.Look(ref value2, "isOld", defaultValue: false); if (value2) { hediffComp_GetsPermanent.isPermanentInt = true; } } if (obj is World) { UniqueIDsManager target = null; Scribe_Deep.Look(ref target, "uniqueIDsManager"); if (target != null) { Current.Game.uniqueIDsManager = target; } } WorldFeature worldFeature = obj as WorldFeature; if (worldFeature != null && worldFeature.maxDrawSizeInTiles == 0f) { Vector2 value3 = Vector2.zero; Scribe_Values.Look(ref value3, "maxDrawSizeInTiles"); worldFeature.maxDrawSizeInTiles = value3.x; } } if (Scribe.mode != LoadSaveMode.ResolvingCrossRefs) { return; } Hediff hediff2 = obj as Hediff; if (hediff2 != null && hediff2.temp_partIndexToSetLater >= 0 && hediff2.pawn != null) { if (hediff2.temp_partIndexToSetLater == 0) { hediff2.Part = hediff2.pawn.RaceProps.body.GetPartAtIndex(hediff2.temp_partIndexToSetLater); } else { hediff2.pawn.health.hediffSet.hediffs.Remove(hediff2); } hediff2.temp_partIndexToSetLater = -1; } Bill_Medical bill_Medical2 = obj as Bill_Medical; if (bill_Medical2 != null) { if (bill_Medical2.temp_partIndexToSetLater == 0) { bill_Medical2.Part = bill_Medical2.GiverPawn.RaceProps.body.GetPartAtIndex(bill_Medical2.temp_partIndexToSetLater); } else { bill_Medical2.GiverPawn.BillStack.Bills.Remove(bill_Medical2); } bill_Medical2.temp_partIndexToSetLater = -1; } }
public bool LoadData(string path, TabControl tabControl) { tabControl.TabPages.Clear(); Animals.Clear(); //try { SaveDocument = XDocument.Load(path); GameData = new GameData(SaveDocument.Root.XPathSelectElement("game/tickManager")); uniqueIdsManager = new UniqueIDsManager(SaveDocument.Root.XPathSelectElement("game/uniqueIDsManager")); var playerFactionDef = EvaluateSingle <XElement>("scenario/playerFaction/factionDef").Value; foreach (var element in SaveDocument.Root.XPathSelectElements("game/world/factionManager/allFactions/li")) { Faction faction = new Faction(element); if (faction.Def.Equals(playerFactionDef)) { PlayerFaction = faction; } Factions[faction.FactionIDString] = faction; PawnsByFactions[faction] = new List <Pawn>(); } //Console.WriteLine($"playerFaction:{playerFaction}, colonyFaction:{colonyFaction}"); Dictionary <String, List <PawnData> > pawnDataDir = new Dictionary <string, List <PawnData> >(); foreach (var pawnData in SaveDocument.Descendants("pawn")) { String key = pawnData.GetValue(); List <PawnData> pawnDataList; if (!pawnDataDir.TryGetValue(key, out pawnDataList)) { pawnDataList = new List <PawnData>(); pawnDataDir[key] = pawnDataList; } pawnDataList.Add(new PawnData(pawnData.Parent)); } foreach (var pawn in SaveDocument.Root.XPathSelectElements("game/world/worldPawns/pawnsAlive/li")) { Pawn p = new Pawn(pawn); if (p.Faction != null) { List <PawnData> pawnDataList; if (!pawnDataDir.TryGetValue(p.PawnId, out pawnDataList)) { pawnDataList = new List <PawnData>(); } p.addPawnData(pawnDataList); PawnsById[p.PawnId] = p; Faction faction = Factions[p.Faction]; PawnsByFactions[faction].Add(p); } } SaveThingsByClass = new Dictionary <string, List <SaveThing> >(); foreach (var thing in SaveDocument.Descendants("thing")) { if ((string)thing.Attribute("Class") == "Pawn") { Pawn p = new Pawn(thing); if (p.Faction != null) { List <PawnData> pawnDataList; if (!pawnDataDir.TryGetValue(p.PawnId, out pawnDataList)) { pawnDataList = new List <PawnData>(); } p.addPawnData(pawnDataList); PawnsById[p.PawnId] = p; Faction faction = Factions[p.Faction]; PawnsByFactions[faction].Add(p); } } else { SaveThing SaveThing = new SaveThing(thing); String key = SaveThing.Class; if (SaveThing.BaseThing != null && SaveThing.BaseThing.BaseName == "BuildingBase") { key = SaveThing.BaseThing.BaseName; } if (SaveThingsByClass.TryGetValue(key, out List <SaveThing> list)) { list.Add(SaveThing); } else { List <SaveThing> newList = new List <SaveThing>(); newList.Add(SaveThing); SaveThingsByClass.Add(key, newList); } } } if (PawnsByFactions[PlayerFaction].Count == 0) { throw new Exception("No characters found!\nTry playing the game a little more."); } colonistPage = new ColonistPage(); colonistPage.Dock = DockStyle.Fill; animalPage = new AnimalPage(); animalPage.Dock = DockStyle.Fill; itemsPage = new ItemsPage(); itemsPage.Dock = DockStyle.Fill; buidingsPage = new BuildingsPage(); buidingsPage.Dock = DockStyle.Fill; relationsPage = new RelationPage(); generalPage = new GeneralPage(); TabPage colonisTabPage = new TabPage("Colonists"); TabPage animalsTabPage = new TabPage("Animals"); TabPage relationsTabPage = new TabPage("Relations"); TabPage gameDataTabPage = new TabPage("General"); TabPage itemsTabPage = new TabPage("Items"); TabPage buildingsTabPage = new TabPage("Buildings"); colonisTabPage.Controls.Add(colonistPage); animalsTabPage.Controls.Add(animalPage); itemsTabPage.Controls.Add(itemsPage); relationsTabPage.Controls.Add(relationsPage); gameDataTabPage.Controls.Add(generalPage); buildingsTabPage.Controls.Add(buidingsPage); tabControl.TabPages.Add(gameDataTabPage); tabControl.TabPages.Add(colonisTabPage); tabControl.TabPages.Add(animalsTabPage); tabControl.TabPages.Add(relationsTabPage); tabControl.TabPages.Add(itemsTabPage); tabControl.TabPages.Add(buildingsTabPage); return(true); }
public static int GetNextTagId() => UniqueIDsManager.GetNextID(ref instance.nextTagId);