예제 #1
0
 static void Postfix(Caravan __instance, ref bool __result)
 {
     if (!__instance.IsHashIntervalTick(60))
     {
         __result = Base.Instance.cachedResult;
         return;
     }
     if (Base.Instance.GetExtendedDataStorage() is ExtendedDataStorage store)
     {
         if (store.GetExtendedDataFor(__instance) is ExtendedCaravanData data)
         {
             if (data.forceRest)
             {
                 __result = true;
             }
             if (data.fullyIgnoreRest)
             {
                 __result = false;
             }
             if (data.almostThere)
             {
                 var estimatedTicks = (float)CaravanArrivalTimeEstimator.EstimatedTicksToArrive(__instance, allowCaching: true);
                 var restTicksLeft  = CaravanNightRestUtility.LeftRestTicksAt(__instance.Tile, Find.TickManager.TicksAbs);
                 estimatedTicks -= restTicksLeft;
                 if (estimatedTicks / GenDate.TicksPerHour < Base.almostThereHours.Value)
                 {
                     __result = false;
                 }
             }
         }
     }
     Base.Instance.cachedResult = __result;
 }
 public virtual void JobTrackerTick()
 {
     jobsGivenThisTick        = 0;
     jobsGivenThisTickTextual = string.Empty;
     if (caravan.IsHashIntervalTick(30))
     {
         //ThinkResult thinkResult = this.DetermineNextConstantThinkTreeJob();
         //if (thinkResult.IsValid && this.ShouldStartJobFromThinkTree(thinkResult))
         //{
         //    this.CheckLeaveJoinableLordBecauseJobIssued(thinkResult);
         //    this.StartJob(thinkResult.Job, JobCondition.InterruptForced, thinkResult.SourceNode, false, false, null, null); //this.caravan.thinker.ConstantThinkTree, thinkResult.Tag);
         //}
     }
     if (curDriver != null)
     {
         curDriver.DriverTick();
     }
     if (curJob == null && //!this.caravan.Dead && this.caravan.mindState.Active &&
         CanDoAnyJob())
     {
         if (debugLog)
         {
             DebugLogEvent("Starting job from Tick because curJob == null.");
         }
         TryFindAndStartJob();
     }
     FinalizeTick();
 }
예제 #3
0
        static void Postfix(Caravan __instance)
        {
            //Consume only fuel every interval of tickperday/fuelConsumptionRate.
            float interval = GenDate.TicksPerDay / WTH_DefOf.WTH_PortableChargingPlatform.GetCompProperties <CompProperties_Refuelable>().fuelConsumptionRate;

            if (__instance.IsHashIntervalTick(Mathf.RoundToInt(interval)))
            {
                ConsumeFuelIfNeeded(__instance);
            }
            if (__instance.IsHashIntervalTick(480))
            {
                List <Thing> allParts = __instance.AllThings.Where((Thing t) => t.def == WTH_DefOf.WTH_MechanoidParts).ToList();
                if (!allParts.NullOrEmpty())
                {
                    List <Pawn> allHackedMechs = __instance.AllThings.Where((Thing t) => t is Pawn pawn && !pawn.Dead && pawn.IsHacked()).Cast <Pawn>().ToList();
                    if (!allHackedMechs.NullOrEmpty())
                    {
                        RepairMechsIfNeeded(__instance, allParts, allHackedMechs);
                        MaintainMechsIfNeeded(__instance, allParts, allHackedMechs);
                    }
                }
            }
        }