// Copyright (c) 2022 bradson // This Source Code Form is subject to the terms of the Mozilla Public // License, v. 2.0. If a copy of the MPL was not distributed with this // file, You can obtain one at https://mozilla.org/MPL/2.0/. #if disabled namespace PerformanceFish; public static class MapPawnsPatches { public static List GetAllPawns(MapPawns instance) { List allPawnsUnspawned = instance.AllPawnsUnspawned; if (allPawnsUnspawned.Count == 0) return instance.pawnsSpawned; instance.allPawnsResult.Clear(); instance.allPawnsResult.AddRange(instance.pawnsSpawned); instance.allPawnsResult.AddRange(allPawnsUnspawned); return instance.allPawnsResult; } public static List AllPawnsUnspawned(MapPawns instance) { instance.allPawnsUnspawnedResult.Clear(); ThingOwnerUtility.GetAllThingsRecursively(instance.map, ThingRequest.ForGroup(ThingRequestGroup.Pawn), instance.allPawnsUnspawnedResult, allowUnreal: true, null, alsoGetSpawnedThings: false); for (int num = instance.allPawnsUnspawnedResult.Count - 1; num >= 0; num--) { if (instance.allPawnsUnspawnedResult[num].Dead) instance.allPawnsUnspawnedResult.RemoveAt(num); } return instance.allPawnsUnspawnedResult; } public static List PawnsInFaction(MapPawns instance, Faction faction) { if (faction == null) { Log.Error("Called PawnsInFaction with null faction."); return new List(); } if (!instance.pawnsInFactionResult.TryGetValue(faction, out var value)) { value = new List(); instance.pawnsInFactionResult.Add(faction, value); } value.Clear(); var allPawns = instance.AllPawns; for (var i = 0; i < allPawns.Count; i++) { if (allPawns[i].Faction == faction) value.Add(allPawns[i]); } return value; } public static List FreeHumanlikesOfFaction(MapPawns instance, Faction faction) { if (!instance.freeHumanlikesOfFactionResult.TryGetValue(faction, out var value)) { value = new List(); instance.freeHumanlikesOfFactionResult.Add(faction, value); } value.Clear(); List allPawns = instance.AllPawns; for (int i = 0; i < allPawns.Count; i++) { if (allPawns[i].Faction == faction && (allPawns[i].HostFaction == null || allPawns[i].IsSlave) && allPawns[i].RaceProps.Humanlike) value.Add(allPawns[i]); } return value; } public static List FreeColonistsAndPrisoners(MapPawns instance) { List freeColonists = instance.FreeColonists; List prisonersOfColony = instance.PrisonersOfColony; if (prisonersOfColony.Count == 0) return freeColonists; instance.freeColonistsAndPrisonersResult.Clear(); instance.freeColonistsAndPrisonersResult.AddRange(freeColonists); instance.freeColonistsAndPrisonersResult.AddRange(prisonersOfColony); return instance.freeColonistsAndPrisonersResult; } public static List PrisonersOfColony(MapPawns instance) { instance.prisonersOfColonyResult.Clear(); List allPawns = instance.AllPawns; for (int i = 0; i < allPawns.Count; i++) { if (allPawns[i].IsPrisonerOfColony) instance.prisonersOfColonyResult.Add(allPawns[i]); } return instance.prisonersOfColonyResult; } } #endif