public void ExposeHealingPawns() { if (Scribe.mode == LoadSaveMode.Saving) { // Store healing pawns data in separate lists. this.pawns.Clear(); this.originMaps.Clear(); this.healEndTicks.Clear(); foreach (HealingPawn healingPawn in this.healingPawns) { this.pawns.Add(healingPawn.pawn); this.originMaps.Add(healingPawn.originMap); this.healEndTicks.Add(healingPawn.healEndTick); } } Scribe_Collections.Look <Pawn>(ref this.pawns, "pawnList", LookMode.Deep); Scribe_Collections.Look <Map>(ref this.originMaps, "originMapList", LookMode.Reference); Scribe_Collections.Look <int>(ref this.healEndTicks, "healEndTickList"); if (Scribe.mode == LoadSaveMode.PostLoadInit) { // Restore healing pawns data from separate lists. this.healingPawns.Clear(); if (this.pawns != null) { for (int pawnIndex = 0; pawnIndex < pawns.Count; pawnIndex++) { HealingPawn healingPawn = new HealingPawn(pawns[pawnIndex], originMaps[pawnIndex], healEndTicks[pawnIndex]); this.healingPawns.Add(healingPawn); } } } }
public bool TrySendPawnBackToSurface(HealingPawn healedPawn) { bool pawnIsSent = false; // First try to send pawn back to its original map. Map originMap = healedPawn.originMap; if (Find.Maps.Contains(originMap) && originMap.IsPlayerHome) { pawnIsSent = SendPawnBackToMap(healedPawn.pawn, originMap); if (pawnIsSent) { return(true); } } // Else try with any player home map. foreach (Map randomMap in Find.Maps.InRandomOrder()) { if (randomMap.IsPlayerHome) { pawnIsSent = SendPawnBackToMap(healedPawn.pawn, randomMap); if (pawnIsSent) { return(true); } } } return(false); }
public void Notify_PawnStartingOrbitalHealing(Pawn pawn, Map originMap) { int removedHediffsCount = HealTreatableHediffs(pawn); int healDurationInTicks = removedHediffsCount * healDurationPerHediffInTicks; healDurationInTicks = Math.Min(healDurationInTicks, 5 * GenDate.TicksPerDay); HealingPawn attendedPawn = new HealingPawn(pawn, originMap, Find.TickManager.TicksGame + healDurationInTicks); this.healingPawns.Add(attendedPawn); }
public bool TrySendPawnBackToSurface(HealingPawn attendedPawn) { Map originMap = attendedPawn.originMap; if (Find.Maps.Contains(originMap) && originMap.IsPlayerHome) { return(SendPawnBackToMap(attendedPawn.pawn, originMap)); } else { Map randomPlayerMap = Find.AnyPlayerHomeMap; if (randomPlayerMap != null) { return(SendPawnBackToMap(attendedPawn.pawn, randomPlayerMap)); } } return(false); }