// Convert Colony Bases to Settlements (this.Colony) for loading private void ConvertToCurrentGameSettlements() { var toAdd = new List <Settlement>(); var toRemove = new List <Colony>(); foreach (var mapParent in this.WorldData.WorldObjectsHolder.MapParents) { if (!(mapParent is Colony)) { continue; } var colony = (Colony)mapParent; if (this.Colony == null || colony.PersistentColonyData == null || this.Colony.ColonyData == null || colony.PersistentColonyData.UniqueId != this.Colony.ColonyData.UniqueId) { continue; } if (colony.Map == null) { var map = Current.Game.FindMap(colony.Tile); if (map != null) { map.info.parent = colony; } else { Log.Error("Null map for colony " + colony.PersistentColonyData.UniqueId + " at " + colony.Tile); continue; } } var settlement = (Settlement)WorldObjectSameIDMaker.MakeWorldObject(WorldObjectDefOf.Settlement, colony.ID); settlement.SetFaction(Faction.OfPlayer); colony.Map.info.parent = settlement; settlement.Tile = colony.Tile; settlement.Name = colony.Name; settlement.namedByPlayer = colony.NamedByPlayer; // Prevents non-stop renaming. toAdd.Add(settlement); toRemove.Add(colony); } toAdd.Do(settlement => this.WorldData.WorldObjectsHolder.Add(settlement)); toAdd.Clear(); toRemove.Do(colony => this.WorldData.WorldObjectsHolder.Remove(colony)); toRemove.Clear(); }
// Convert Settlements to Colony Bases (this.Colony) for saving private void ConvertCurrentGameSettlements() { // Concurrency errors :/ var toAdd = new List <Colony>(); var toRemove = new List <Settlement>(); foreach (var settlement in this.Game.World.worldObjects.Settlements) { if (settlement.Faction != Faction.OfPlayer) { continue; } if (settlement.Map?.info == null) { continue; } var colony = (Colony)WorldObjectSameIDMaker.MakeWorldObject(PersistentWorldsDefOf.Colony, settlement.ID); settlement.Map.info.parent = colony; colony.Tile = settlement.Tile; colony.Name = settlement.Name; colony.NamedByPlayer = settlement.namedByPlayer; colony.PersistentColonyData = this.LoadSaver.Status == PersistentWorldLoadSaver.PersistentWorldLoadStatus.Converting ? this.Colonies[0].ColonyData : this.Colony.ColonyData; toAdd.Add(colony); toRemove.Add(settlement); } toAdd.Do(colony => this.Game.World.worldObjects.Add(colony)); toAdd.Clear(); toRemove.Do(settlement => { // Try to fix errors in conversion? try { this.Game.World.worldObjects.Remove(settlement); } catch (NullReferenceException) { Log.Warning($"{nameof(ConvertCurrentGameSettlements)}: NRE thrown while removing WorldObject. ID: {settlement.ID}"); } }); toRemove.Clear(); }
// Convert Settlements to Colony Bases (this.Colony) for saving private void ConvertCurrentGameSettlements() { // Concurrency errors :/ var toAdd = new List <Colony>(); var toRemove = new List <Settlement>(); foreach (var settlement in this.Game.World.worldObjects.Settlements) { if (settlement.Faction != Faction.OfPlayer) { continue; } if (settlement.Map?.info == null) { continue; } var colony = (Colony)WorldObjectSameIDMaker.MakeWorldObject(PersistentWorldsDefOf.Colony, settlement.ID); settlement.Map.info.parent = colony; colony.Tile = settlement.Tile; colony.Name = settlement.Name; colony.NamedByPlayer = settlement.namedByPlayer; colony.PersistentColonyData = this.LoadSaver.Status == PersistentWorldLoadSaver.PersistentWorldLoadStatus.Converting ? this.Colonies[0].ColonyData : this.Colony.ColonyData; toAdd.Add(colony); toRemove.Add(settlement); } toAdd.Do(colony => this.Game.World.worldObjects.Add(colony)); toAdd.Clear(); toRemove.Do(settlement => this.Game.World.worldObjects.Remove(settlement)); toRemove.Clear(); }
private void ConvertColoniesToAbandonedColonies(PersistentColony persistentColony) { var toAdd = new List <AbandonedColony>(); var toRemove = new List <Settlement>(); foreach (var settlement in this.WorldData.WorldObjectsHolder.Settlements) { if (settlement.Faction != Faction.OfPlayer) { continue; } if (settlement.Map?.info == null) { continue; } var abandonedColony = (AbandonedColony)WorldObjectSameIDMaker.MakeWorldObject(PersistentWorldsDefOf.AbandonedColony, settlement.ID); settlement.Map.info.parent = abandonedColony; abandonedColony.Tile = settlement.Tile; abandonedColony.Name = persistentColony.ColonyData.ColonyFaction.Name; toAdd.Add(abandonedColony); toRemove.Add(settlement); } toAdd.Do(abandonedColony => this.WorldData.WorldObjectsHolder.Add(abandonedColony)); toAdd.Clear(); toRemove.Do(settlement => this.WorldData.WorldObjectsHolder.Remove(settlement)); toRemove.Clear(); }