Exemplo n.º 1
0
 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);
             }
         }
     }
 }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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);
        }