public void Upgrade() { upgraded = true; upgradeWorkDone = upgradeWorkTotal; // Set health to max health if (parent.def.useHitPoints) { parent.HitPoints = parent.MaxHitPoints; } // Update turret top if (parent is Building_TurretGun gunTurret && Props.turretGunDef != null) { gunTurret.gun.Destroy(); gunTurret.gun = ThingMaker.MakeThing(Props.turretGunDef); NonPublicMethods.Building_TurretGun_UpdateGunVerbs(gunTurret); } // Update barrel durability if (parent.TryGetComp <CompRefuelable>() is CompRefuelable refuelableComp) { float newFuel = (float)NonPublicFields.CompRefuelable_fuel.GetValue(refuelableComp) * Props.fuelMultiplierFactor; NonPublicFields.CompRefuelable_fuel.SetValue(refuelableComp, newFuel); } // Reset CompPowerTrader if (parent.TryGetComp <CompPowerTrader>() is CompPowerTrader powerComp) { powerComp.SetUpPowerVars(); } // Force redraw parent.Map.mapDrawer.SectionAt(parent.Position).RegenerateAllLayers(); }
private static float TurretCooldown(StatRequest req, BuildingProperties buildingProps) { if (req.Thing is Building_TurretGun gunTurret) { return(NonPublicMethods.Building_TurretGun_BurstCooldownTime(gunTurret)); } return(buildingProps.turretBurstCooldownTime > 0 ? buildingProps.turretBurstCooldownTime : buildingProps.turretGunDef.GetStatValueAbstract(StatDefOf.RangedWeapon_Cooldown)); }
public static bool Prefix(VerbProperties __instance, Verb ownerVerb, Pawn attacker, ref float __result) { // Vanilla gun turret if (ownerVerb.Caster is Building_TurretGun gunTurret) { __result = TurretExtensionsUtility.AdjustedTurretBurstWarmupTicks(gunTurret.def.building.turretBurstWarmupTime.SecondsToTicks(), gunTurret).TicksToSeconds() + NonPublicMethods.Building_TurretGun_BurstCooldownTime(gunTurret) + ((__instance.burstShotCount - 1) * __instance.ticksBetweenBurstShots).TicksToSeconds(); return(false); } return(true); }
public static void Postfix(Building_TurretGun __instance, LocalTargetInfo ___forcedTarget) { // If the turret has CompSmartForcedTarget and is attacking a pawn that just got downed, automatically make it target something else var smartTargetComp = __instance.TryGetComp <CompSmartForcedTarget>(); if (smartTargetComp != null && ___forcedTarget.Thing is Pawn pawn) { if (!pawn.Downed && !smartTargetComp.attackingNonDownedPawn && (!smartTargetComp.Props.onlyApplyWhenUpgraded || __instance.IsUpgraded(out CompUpgradable upgradableComp))) { smartTargetComp.attackingNonDownedPawn = true; } else if (pawn.Downed && smartTargetComp.attackingNonDownedPawn) { smartTargetComp.attackingNonDownedPawn = false; NonPublicMethods.Building_TurretGun_ResetForcedTarget(__instance); } } }