protected override Job TryGiveJob(Pawn pawn)
        {
            Job job = null;

            if (pawn.IsActivated() && (pawn.ShouldRecharge() || pawn.ShouldBeMaintained()))
            {
                pawn.drafter.Drafted = false;
                ExtendedPawnData pawnData = Base.Instance.GetExtendedDataStorage().GetExtendedDataFor(pawn);
                pawnData.isActive = false;
            }
            if (pawn.OnBaseMechanoidPlatform() || pawn.OnHackingTable())
            {
                job = new Job(WTH_DefOf.WTH_Mechanoid_Rest, pawn.CurrentBed());
            }
            else
            {
                Building_BaseMechanoidPlatform closestAvailablePlatform = Utilities.GetAvailableMechanoidPlatform(pawn, pawn);
                if (!pawn.Downed && closestAvailablePlatform != null && pawn.CanReserve(closestAvailablePlatform))
                {
                    if (pawn.CurJob != null)
                    {
                        pawn.jobs.EndCurrentJob(JobCondition.InterruptForced);
                    }
                    job = new Job(WTH_DefOf.WTH_Mechanoid_Rest, closestAvailablePlatform);
                }
            }
            if (job != null)
            {
                if (pawn.CurJob != null && pawn.CurJob.def != WTH_DefOf.WTH_Mechanoid_Rest)
                {
                    pawn.jobs.EndCurrentJob(JobCondition.InterruptForced);
                }
            }
            return(job);
        }
Beispiel #2
0
        protected override Job TryGiveJob(Pawn pawn)
        {
            Job job = null;

            if (pawn.OnBaseMechanoidPlatform() || pawn.OnHackingTable())
            {
                job = new Job(WTH_DefOf.WTH_Mechanoid_Rest, pawn.CurrentBed());
            }
            else
            {
                Building_BaseMechanoidPlatform closestAvailablePlatform = Utilities.GetAvailableMechanoidPlatform(pawn, pawn);
                if (!pawn.Downed && closestAvailablePlatform != null && pawn.CanReserve(closestAvailablePlatform))
                {
                    if (pawn.CurJob != null)
                    {
                        pawn.jobs.EndCurrentJob(JobCondition.InterruptForced);
                    }
                    job = new Job(WTH_DefOf.WTH_Mechanoid_Rest, closestAvailablePlatform);
                }
            }
            if (job != null)
            {
                if (pawn.CurJob != null && pawn.CurJob.def != WTH_DefOf.WTH_Mechanoid_Rest)
                {
                    pawn.jobs.EndCurrentJob(JobCondition.InterruptForced);
                }
            }
            return(job);
        }
Beispiel #3
0
        private static Gizmo CreateGizmo_SearchAndDestroy(Pawn __instance, ExtendedPawnData pawnData)
        {
            string disabledReason = "";
            bool   disabled       = false;

            if (__instance.Downed)
            {
                disabled       = true;
                disabledReason = "WTH_Reason_MechanoidDowned".Translate();
            }
            else if (__instance.ShouldRecharge())
            {
                disabled       = true;
                disabledReason = "WTH_Reason_PowerLow".Translate();
            }
            else if (__instance.ShouldBeMaintained())
            {
                disabled       = true;
                disabledReason = "WTH_Reason_MaintenanceLow".Translate();
            }
            Gizmo gizmo = new Command_Toggle
            {
                defaultLabel   = "WTH_Gizmo_SearchAndDestroy_Label".Translate(),
                defaultDesc    = "WTH_Gizmo_SearchAndDestroy_Description".Translate(),
                disabled       = disabled,
                disabledReason = disabledReason,
                icon           = ContentFinder <Texture2D> .Get(("UI/" + "Enable_SD"), true),
                isActive       = () => pawnData.isActive,
                toggleAction   = () =>
                {
                    pawnData.isActive = !pawnData.isActive;
                    if (pawnData.isActive)
                    {
                        if (__instance.GetLord() == null || __instance.GetLord().LordJob == null)
                        {
                            LordMaker.MakeNewLord(Faction.OfPlayer, new LordJob_SearchAndDestroy(), __instance.Map, new List <Pawn> {
                                __instance
                            });
                        }
                        __instance.jobs.EndCurrentJob(JobCondition.InterruptForced);
                        if (__instance.relations == null) //Added here to fix existing saves.
                        {
                            __instance.relations = new Pawn_RelationsTracker(__instance);
                        }
                    }
                    else
                    {
                        __instance.jobs.EndCurrentJob(JobCondition.InterruptForced);
                        Building_BaseMechanoidPlatform closestAvailablePlatform = Utilities.GetAvailableMechanoidPlatform(__instance, __instance);
                        if (closestAvailablePlatform != null)
                        {
                            Job job = new Job(WTH_DefOf.WTH_Mechanoid_Rest, closestAvailablePlatform);
                            __instance.jobs.TryTakeOrderedJob(job);
                        }
                    }
                }
            };

            return(gizmo);
        }
Beispiel #4
0
        /*
         * If the mech has no reason to leave a platform, or if it should go to a platform, override the job it intended to do with a mechanoid_rest job.
         */
        public override ThinkResult TryIssueJobPackage(Pawn pawn, JobIssueParams jobParams)
        {
            ThinkResult result = base.TryIssueJobPackage(pawn, jobParams);

            //Log.Message("result JobDef: " + result.Job.def.defName);
            if (result.Job == null && !pawn.IsActivated())
            {
                Job job = null;
                if (pawn.OnBaseMechanoidPlatform())//If the mech is already on a platform, let it stay on it.
                {
                    job = new Job(WTH_DefOf.WTH_Mechanoid_Rest, pawn.CurrentBed());
                }
                else//Else, let if find another platform. If it can't find one, let it continue work or idling.
                {
                    Building_BaseMechanoidPlatform closestAvailablePlatform = Utilities.GetAvailableMechanoidPlatform(pawn, pawn);
                    if (closestAvailablePlatform != null && pawn.CanReserve(closestAvailablePlatform))
                    {
                        if (pawn.CurJob != null)
                        {
                            pawn.jobs.EndCurrentJob(JobCondition.InterruptForced);
                        }
                        job = new Job(WTH_DefOf.WTH_Mechanoid_Rest, closestAvailablePlatform);
                    }
                }
                if (job != null)
                {
                    result = new ThinkResult(job, this);
                }
            }
            return(result);
        }
        static void Postfix(ref Pawn_JobTracker __instance, ref ThinkResult __result)
        {
            Pawn pawn = Traverse.Create(__instance).Field("pawn").GetValue <Pawn>();

            if (!pawn.RaceProps.IsMechanoid)
            {
                return;
            }

            ExtendedDataStorage store = Base.Instance.GetExtendedDataStorage();

            if (store != null)
            {
                //de-activate if should auto recharge and power is very low.
                ExtendedPawnData pawnData  = store.GetExtendedDataFor(pawn);
                Need_Power       powerNeed = pawn.needs.TryGetNeed(WTH_DefOf.WTH_Mechanoid_Power) as Need_Power;
                if (powerNeed != null &&
                    powerNeed.CurCategory >= PowerCategory.LowPower &&
                    pawnData.shouldAutoRecharge &&
                    pawn.IsActivated()
                    )
                {
                    pawn.drafter.Drafted = false;
                    pawnData.isActive    = false;
                }
            }

            if (pawn.Faction == Faction.OfPlayer && pawn.IsHacked() && !pawn.IsActivated() && pawn.OnBaseMechanoidPlatform() && pawn.CanReserve(pawn.CurrentBed()))
            {
                Job job = new Job(WTH_DefOf.WTH_Mechanoid_Rest, pawn.CurrentBed());
                job.count = 1;
                __result  = new ThinkResult(job, __result.SourceNode, __result.Tag, false);
            }

            if (pawn.Downed)
            {
                return;
            }


            if (pawn.IsHacked() && pawn.IsActivated() && pawn.health.hediffSet.HasHediff(WTH_DefOf.WTH_TargetingHackedPoorly))
            {
                HackedPoorlyEvent(pawn);
            }
            if (pawn.Faction == Faction.OfPlayer && pawn.IsHacked() && !pawn.IsActivated() && !pawn.OnBaseMechanoidPlatform() && __result.Job.def != WTH_DefOf.WTH_Mechanoid_Rest)
            {
                Building_BaseMechanoidPlatform closestAvailablePlatform = Utilities.GetAvailableMechanoidPlatform(pawn, pawn);
                if (closestAvailablePlatform != null && pawn.CanReserve(closestAvailablePlatform))
                {
                    Job job = new Job(WTH_DefOf.WTH_Mechanoid_Rest, closestAvailablePlatform);
                    __result = new ThinkResult(job, __result.SourceNode, __result.Tag, false);
                }
            }
        }
        static void Postfix(Pawn __instance)
        {
            Pawn pawn = __instance;
            Pawn_HealthTracker healthTracker = __instance.health;

            pawn.hackableTickCounter++;
            if (!pawn.RaceProps.IsMechanoid)
            {
                return;
            }
            if (pawn.health.hediffSet.HasHediff(WTH_DefOf.WTH_SelfDestructed))
            {
                SelfDestruct(pawn);
                return;
            }

            if (pawn.health.hediffSet.HasHediff(WTH_DefOf.WTH_Repairing))
            {
                TryHealRandomInjury(healthTracker, pawn, 4000f / RimWorld.GenDate.TicksPerDay);
            }

            if (pawn.hackableCurrentBed == null)
            {
                var bed = pawn.CurrentBed();
                if (bed is Building_BaseMechanoidPlatform)
                {
                    pawn.hackableCurrentBed = (Building_BaseMechanoidPlatform)bed;
                }
            }

            Building_BaseMechanoidPlatform platform = pawn.hackableCurrentBed;


            if ((pawn.hackableTickCounter + pawn.thingIDNumber) % 10 == 1 && platform.RepairActive && healthTracker.hediffSet.HasNaturallyHealingInjury() && !pawn.health.hediffSet.HasHediff(WTH_DefOf.WTH_Repairing))
            {
                if (platform.CanHealNow())
                {
                    TryHealRandomInjury(healthTracker, pawn, (platform.GetStatValue(WTH_DefOf.WTH_RepairRate) * 500f) / RimWorld.GenDate.TicksPerDay, platform);
                }
            }
            if ((pawn.hackableTickCounter + pawn.thingIDNumber) % 2 == 0 && !healthTracker.hediffSet.HasNaturallyHealingInjury() && platform.RegenerateActive && platform.refuelableComp.Fuel > 4f) //TODO: no magic number
            {
                TryRegeneratePart(pawn, platform);
                RegainWeapon(pawn);
            }
        }
        private static void TryRegeneratePart(Pawn pawn, Building_BaseMechanoidPlatform platform)
        {
            Hediff_MissingPart hediff = FindBiggestMissingBodyPart(pawn);

            if (hediff == null || pawn.health.hediffSet.HasHediff(WTH_DefOf.WTH_RegeneratedPart))
            {
                return;
            }

            pawn.health.RemoveHediff(hediff);
            float partHealth = hediff.Part.def.GetMaxHealth(pawn);
            float fuelNeeded = Math.Min(4f, partHealth / 5f);//body parts with less health need less parts to regenerate, capped at 4.

            platform.refuelableComp.ConsumeFuel(fuelNeeded);
            //Hediff_Injury injury = new Hediff_Injury();
            DamageWorker_AddInjury addInjury = new DamageWorker_AddInjury();

            addInjury.Apply(new DamageInfo(WTH_DefOf.WTH_RegeneratedPartDamage, hediff.Part.def.GetMaxHealth(pawn) - 1, 0, -1, pawn, hediff.Part), pawn);
        }
        static void Postfix(Pawn_HealthTracker __instance)
        {
            Pawn pawn = __instance.hediffSet.pawn;

            if (!pawn.IsMechanoid())
            {
                return;
            }
            if (pawn.health.hediffSet.HasHediff(WTH_DefOf.WTH_SelfDestructed))
            {
                SelfDestruct(pawn);
                return;
            }

            if (pawn.IsHashIntervalTick(healTickInterval))
            {
                var repairHediff = pawn.health.hediffSet.GetFirstHediffOfDef(WTH_DefOf.WTH_Repairing);
                if (repairHediff != null && repairHediff.def.GetModExtension <DefModextension_Hediff>() is DefModextension_Hediff modExt)
                {
                    TryHealRandomInjury(__instance, pawn, (modExt.repairRate / RimWorld.GenDate.TicksPerDay) * healTickInterval);
                }

                if (!(pawn.CurrentBed() is Building_BaseMechanoidPlatform))
                {
                    return;
                }
                Building_BaseMechanoidPlatform platform = (Building_BaseMechanoidPlatform)pawn.CurrentBed();

                if (platform.RepairActive && __instance.hediffSet.HasNaturallyHealingInjury() && !pawn.health.hediffSet.HasHediff(WTH_DefOf.WTH_Repairing) && platform.CanHealNow())
                {
                    TryHealRandomInjury(__instance, pawn, (platform.GetStatValue(WTH_DefOf.WTH_RepairRate) * healTickInterval) / RimWorld.GenDate.TicksPerDay, platform);
                }
                if (!__instance.hediffSet.HasNaturallyHealingInjury() && platform.RegenerateActive && platform.refuelableComp.Fuel >= 4f) //TODO: no magic number
                {
                    TryRegeneratePart(pawn, platform);
                    RegainWeapon(pawn);
                }
            }
        }
        static void Postfix(Pawn_HealthTracker __instance)
        {
            Pawn pawn = __instance.hediffSet.pawn;

            if (!pawn.RaceProps.IsMechanoid)
            {
                return;
            }
            if (pawn.health.hediffSet.HasHediff(WTH_DefOf.WTH_SelfDestructed))
            {
                SelfDestruct(pawn);
                return;
            }
            int healTickInterval = 200;

            if (pawn.IsHashIntervalTick(healTickInterval) && pawn.health.hediffSet.HasHediff(WTH_DefOf.WTH_Repairing))
            {
                TryHealRandomInjury(__instance, pawn, (400f / RimWorld.GenDate.TicksPerDay) * healTickInterval); //TODO: use stat value instead of magic 400.
            }

            if (!(pawn.CurrentBed() is Building_BaseMechanoidPlatform))
            {
                return;
            }
            Building_BaseMechanoidPlatform platform = (Building_BaseMechanoidPlatform)pawn.CurrentBed();

            if (platform.RepairActive && __instance.hediffSet.HasNaturallyHealingInjury() && !pawn.health.hediffSet.HasHediff(WTH_DefOf.WTH_Repairing))
            {
                if (pawn.IsHashIntervalTick(healTickInterval) && platform.CanHealNow())
                {
                    TryHealRandomInjury(__instance, pawn, (platform.GetStatValue(WTH_DefOf.WTH_RepairRate) * healTickInterval) / RimWorld.GenDate.TicksPerDay, platform);
                }
            }
            if (!__instance.hediffSet.HasNaturallyHealingInjury() && platform.RegenerateActive && pawn.IsHashIntervalTick(100) && platform.refuelableComp.Fuel > 4f) //TODO: no magic number
            {
                TryRegeneratePart(pawn, platform);
                RegainWeapon(pawn);
            }
        }
        private static void TryHealRandomInjury(Pawn_HealthTracker __instance, Pawn pawn, float healAmount, Building_BaseMechanoidPlatform platform = null)
        {
            IEnumerable <Hediff_Injury> hediffs = __instance.hediffSet.GetHediffs <Hediff_Injury>().Where((Hediff_Injury i) => HediffUtility.CanHealNaturally(i));

            if (hediffs.Count() == 0)
            {
                return;
            }
            Hediff_Injury hediff_Injury = hediffs.RandomElement();

            hediff_Injury.Heal(healAmount);
            if (pawn.IsHashIntervalTick(50) && !pawn.IsHashIntervalTick(100) && pawn.Map != null && !pawn.Position.Fogged(pawn.Map))
            {
                MoteMaker.ThrowMetaIcon(pawn.Position, pawn.Map, ThingDefOf.Mote_HealingCross);
            }
            if (platform != null)
            {
                platform.refuelableComp.ConsumeFuel((platform.GetStatValue(WTH_DefOf.WTH_PartConsumptionRate) * 10f) / GenDate.TicksPerDay);//TODO no magic number
            }
        }
Beispiel #11
0
        static bool Prefix(Pawn p, ref Building_Bed __result)
        {
            if (!p.RaceProps.IsMechanoid || p.Map == null)
            {
                return(true);
            }
            if (p.jobs.curDriver == null || ((p.CurJob.def != WTH_DefOf.WTH_Mechanoid_Rest) && p.jobs.posture != PawnPosture.LayingInBed))
            {
                return(true);
            }
            List <Thing> thingList = p.Position.GetThingList(p.Map);



            if (!p.IsHacked())
            {
                Building_HackingTable hackingTable = null;
                for (int i = 0; i < thingList.Count; i++)
                {
                    hackingTable = (thingList[i] as Building_HackingTable);
                    if (hackingTable != null)
                    {
                        break;
                    }
                }
                if (hackingTable == null)
                {
                    return(true);
                }

                if (hackingTable.GetCurOccupant(Building_HackingTable.SLOTINDEX) == p)
                {
                    __result = hackingTable;
                    return(false);
                }
            }
            else
            {
                Building_BaseMechanoidPlatform mechanoidPlatform = null;
                for (int i = 0; i < thingList.Count; i++)
                {
                    mechanoidPlatform = (thingList[i] as Building_BaseMechanoidPlatform);
                    if (mechanoidPlatform != null)
                    {
                        break;
                    }
                }
                if (mechanoidPlatform == null)
                {
                    return(true);
                }

                if (mechanoidPlatform.GetCurOccupant(Building_BaseMechanoidPlatform.SLOTINDEX) == p)
                {
                    __result = mechanoidPlatform;
                    return(false);
                }
            }

            return(true);
        }
        static void Postfix(Pawn_HealthTracker __instance)
        {
            Pawn pawn = Traverse.Create(__instance).Field("pawn").GetValue <Pawn>();

            if (!pawn.RaceProps.IsMechanoid)
            {
                return;
            }
            if (pawn.health.hediffSet.HasHediff(WTH_DefOf.WTH_SelfDestructed))
            {
                SelfDestruct(pawn);
                return;
            }


            if (pawn.HasValidCaravanPlatform() && pawn.GetCaravan() != null && pawn.GetCaravan().HasFuel())
            {
                float powerPerTick = 0.5f * WTH_DefOf.WTH_PortableChargingPlatform.GetCompProperties <CompProperties_Refuelable>().fuelConsumptionRate * 15 / GenDate.TicksPerDay; //TODO: no magic number
                RechargeMechanoid(pawn, pawn.needs.TryGetNeed(WTH_DefOf.WTH_Mechanoid_Power), powerPerTick);
            }
            if (pawn.health.hediffSet.HasHediff(WTH_DefOf.WTH_VanometricModule))
            {
                RechargeMechanoid(pawn, pawn.needs.TryGetNeed(WTH_DefOf.WTH_Mechanoid_Power), 0.0085f);//TODO: no magic number
            }

            if (pawn.IsHashIntervalTick(10) && pawn.health.hediffSet.HasHediff(WTH_DefOf.WTH_Repairing))
            {
                TryHealRandomInjury(__instance, pawn, 4000f / RimWorld.GenDate.TicksPerDay);
            }

            if (!(pawn.CurrentBed() is Building_BaseMechanoidPlatform))
            {
                return;
            }
            Building_BaseMechanoidPlatform platform = (Building_BaseMechanoidPlatform)pawn.CurrentBed();

            if (platform.RepairActive && __instance.hediffSet.HasNaturallyHealingInjury() && !pawn.health.hediffSet.HasHediff(WTH_DefOf.WTH_Repairing))
            {
                if (pawn.IsHashIntervalTick(10) && platform.CanHealNow())
                {
                    TryHealRandomInjury(__instance, pawn, platform.GetStatValue(WTH_DefOf.WTH_MechanitesEffictiveness) * WTH_DefOf.WTH_MechanoidPlatform.building.bed_healPerDay * 10 / RimWorld.GenDate.TicksPerDay, platform);
                }
            }
            if (!__instance.hediffSet.HasNaturallyHealingInjury() && platform.RegenerateActive && pawn.IsHashIntervalTick(100) && platform.refuelableComp.Fuel > 4f) //TODO: no magic number
            {
                TryRegeneratePart(pawn, platform);
                RegainWeapon(pawn);
            }

            if (platform.HasPowerNow())
            {
                Need  powerNeed    = pawn.needs.TryGetNeed(WTH_DefOf.WTH_Mechanoid_Power);
                float powerPerTick = 0;
                if (platform.PowerComp != null)
                {
                    powerPerTick = platform.PowerComp.Props.basePowerConsumption / GenDate.TicksPerDay;
                }
                else
                {
                    platform.refuelableComp.ConsumeFuel(platform.refuelableComp.Props.fuelConsumptionRate / GenDate.TicksPerDay);
                    powerPerTick = platform.refuelableComp.Props.fuelConsumptionRate * 15 / GenDate.TicksPerDay; //TODO: no magic number
                }

                RechargeMechanoid(pawn, powerNeed, powerPerTick);
            }
        }
Beispiel #13
0
        static void Postfix(Pawn_HealthTracker __instance)
        {
            Pawn pawn = Traverse.Create(__instance).Field("pawn").GetValue <Pawn>();

            if (!pawn.RaceProps.IsMechanoid)
            {
                return;
            }

            ExtendedPawnData pawnData = Base.Instance.GetExtendedDataStorage().GetExtendedDataFor(pawn);

            if (pawnData.shouldExplodeNow)
            {
                GenExplosion.DoExplosion(pawn.Position, pawn.Map, 4.5f, DamageDefOf.Bomb, pawn, DamageDefOf.Bomb.defaultDamage, DamageDefOf.Bomb.defaultArmorPenetration, DamageDefOf.Bomb.soundExplosion, null, null, null, null, 0f, 1, false, null, 0f, 1, 0f, false);
                pawn.jobs.startingNewJob = false;
                BodyPartRecord reactorPart = pawn.health.hediffSet.GetNotMissingParts().FirstOrDefault((BodyPartRecord r) => r.def.defName == "Reactor");
                pawn.TakeDamage(new DamageInfo(DamageDefOf.Bomb, reactorPart.def.GetMaxHealth(pawn), 9999, -1, null, reactorPart));
                pawnData.shouldExplodeNow = false;
            }


            if (pawn.HasValidCaravanPlatform() && pawn.GetCaravan() != null && pawn.GetCaravan().HasFuel())
            {
                float powerPerTick = 0.5f * WTH_DefOf.WTH_PortableChargingPlatform.GetCompProperties <CompProperties_Refuelable>().fuelConsumptionRate * 15 / GenDate.TicksPerDay; //TODO: no magic number
                RechargeMechanoid(pawn, pawn.needs.TryGetNeed(WTH_DefOf.WTH_Mechanoid_Power), powerPerTick);
            }
            if (pawn.health.hediffSet.HasHediff(WTH_DefOf.WTH_VanometricModule))
            {
                RechargeMechanoid(pawn, pawn.needs.TryGetNeed(WTH_DefOf.WTH_Mechanoid_Power), 0.0085f);//TODO: no magic number
            }

            if (pawn.health.hediffSet.HasHediff(WTH_DefOf.WTH_Repairing))
            {
                if (pawn.IsHashIntervalTick(10))
                {
                    TryHealRandomInjury(__instance, pawn, 4000f / RimWorld.GenDate.TicksPerDay);
                }
            }

            if (!(pawn.CurrentBed() is Building_BaseMechanoidPlatform))
            {
                return;
            }

            Building_BaseMechanoidPlatform platform = (Building_BaseMechanoidPlatform)pawn.CurrentBed();

            if (platform.RepairActive && __instance.hediffSet.HasNaturallyHealingInjury() && !pawn.health.hediffSet.HasHediff(WTH_DefOf.WTH_Repairing))
            {
                if (pawn.IsHashIntervalTick(10) && platform.CanHealNow())
                {
                    TryHealRandomInjury(__instance, pawn, WTH_DefOf.WTH_MechanoidPlatform.building.bed_healPerDay * 10 / RimWorld.GenDate.TicksPerDay, platform);
                }
            }
            if (!__instance.hediffSet.HasNaturallyHealingInjury() && platform.RegenerateActive && pawn.IsHashIntervalTick(100) && platform.refuelableComp.Fuel > 4f) //TODO: no magic number
            {
                TryRegeneratePart(pawn, platform);
                RegainWeapon(pawn);
            }

            if (platform.HasPowerNow())
            {
                Need  powerNeed    = pawn.needs.TryGetNeed(WTH_DefOf.WTH_Mechanoid_Power);
                float powerPerTick = 0;
                if (platform.PowerComp != null)
                {
                    powerPerTick = 0.75f * platform.PowerComp.Props.basePowerConsumption / GenDate.TicksPerDay; //TODO: no magic number
                }
                else
                {
                    platform.refuelableComp.ConsumeFuel(platform.refuelableComp.Props.fuelConsumptionRate / GenDate.TicksPerDay);
                    powerPerTick = 0.75f * platform.refuelableComp.Props.fuelConsumptionRate * 15 / GenDate.TicksPerDay; //TODO: no magic number
                }

                RechargeMechanoid(pawn, powerNeed, powerPerTick);
            }
        }