public static void DestroyStartingColonistFamily(Pawn pawn) { foreach (Pawn pawn2 in pawn.relations.RelatedPawns.ToList <Pawn>()) { if (!Find.GameInitData.startingAndOptionalPawns.Contains(pawn2)) { WorldPawnSituation situation = Find.WorldPawns.GetSituation(pawn2); if (situation == WorldPawnSituation.Free || situation == WorldPawnSituation.Dead) { Find.WorldPawns.RemovePawn(pawn2); Find.WorldPawns.PassToWorld(pawn2, PawnDiscardDecideMode.Discard); } } } }
public static void SituationSCPEvent(Pawn p, ref WorldPawnSituation __result, WorldPawns __instance) { if (__result == WorldPawnSituation.Free && p.kindDef == PawnKindDefOf_SCP.SCP_939_PawnKindDef) { Log.Message("Checking " + p.LabelShort); foreach (Map map in Find.Maps) { if (map.GameConditionManager.ActiveConditions.Any(x => x is GameCondition_SCP939 && (x as GameCondition_SCP939).ActiveSCPInArea.Contains(p))) { Log.Message("Result Changed "); __result = WorldPawnSituation.InTravelingTransportPod; return; } } } }
public int GetPawnsBySituationCount(WorldPawnSituation situation) { int num = 0; foreach (Pawn p in this.pawnsAlive) { if (this.GetSituation(p) == situation) { num++; } } foreach (Pawn p2 in this.pawnsDead) { if (this.GetSituation(p2) == situation) { num++; } } return(num); }
public int GetPawnsBySituationCount(WorldPawnSituation situation) { int num = 0; foreach (Pawn item in pawnsAlive) { if (GetSituation(item) == situation) { num++; } } foreach (Pawn item2 in pawnsDead) { if (GetSituation(item2) == situation) { num++; } } return(num); }
/// <summary> /// Prevent RimWorld Garbage Collection from snatching up VehiclePawn inhabitants and VehicleCaravan's VehiclePawn inhabitants by changing /// the WorldPawnSituation of pawns onboard vehicles /// </summary> /// <param name="p"></param> /// <param name="__result"></param> public static void SituationBoardedVehicle(Pawn p, ref WorldPawnSituation __result) { if (__result == WorldPawnSituation.Free && p.Faction != null && p.Faction == Faction.OfPlayerSilentFail) { if (p is VehiclePawn aerialVehicle && aerialVehicle.CompVehicleLauncher.inFlight) { __result = WorldPawnSituation.InTravelingTransportPod; return; } foreach (Map map in Find.Maps) { foreach (VehiclePawn vehicle in map.mapPawns.AllPawnsSpawned.Where(v => v is VehiclePawn vehicle && v.Faction == Faction.OfPlayer)) { if (vehicle.AllPawnsAboard.Contains(p)) { __result = WorldPawnSituation.CaravanMember; return; } } } foreach (Caravan c in Find.WorldObjects.Caravans) { foreach (VehiclePawn vehicle in c.PawnsListForReading.Where(v => v is VehiclePawn vehicle)) { if (vehicle.AllPawnsAboard.Contains(p)) { __result = WorldPawnSituation.CaravanMember; return; } } } foreach (VehiclePawn vehicle in Find.WorldPawns.AllPawnsAlive.Where(v => v is VehiclePawn vehicle)) { if (vehicle.AllPawnsAboard.Contains(p)) { __result = WorldPawnSituation.InTravelingTransportPod; return; } } } }
public void LogWorldPawns() { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.AppendLine("======= World Pawns ======="); stringBuilder.AppendLine("Count: " + this.AllPawnsAliveOrDead.Count <Pawn>()); stringBuilder.AppendLine(string.Format("(Live: {0} - Mothballed: {1} - Dead: {2}; {3} forcefully kept)", new object[] { this.pawnsAlive.Count, this.pawnsMothballed.Count, this.pawnsDead.Count, this.pawnsForcefullyKeptAsWorldPawns.Count })); WorldPawnSituation[] array = (WorldPawnSituation[])Enum.GetValues(typeof(WorldPawnSituation)); for (int i = 0; i < array.Length; i++) { WorldPawnSituation worldPawnSituation = array[i]; if (worldPawnSituation != WorldPawnSituation.None) { stringBuilder.AppendLine(); stringBuilder.AppendLine("== " + worldPawnSituation + " =="); foreach (Pawn current in from x in this.GetPawnsBySituation(worldPawnSituation) orderby(x.Faction != null) ? x.Faction.loadID : -1 select x) { string text = (current.Name == null) ? current.LabelCap : current.Name.ToStringFull; stringBuilder.AppendLine(string.Concat(new object[] { text, ", ", current.KindLabel, ", ", current.Faction })); } } } stringBuilder.AppendLine("==========================="); Log.Message(stringBuilder.ToString(), false); }
public IEnumerable <Pawn> GetPawnsBySituation(WorldPawnSituation situation) { return(from x in this.AllPawnsAliveOrDead where this.GetSituation(x) == situation select x); }
public IEnumerable <Pawn> GetPawnsBySituation(WorldPawnSituation situation) { return(AllPawnsAliveOrDead.Where((Pawn x) => GetSituation(x) == situation)); }