public static void Postfix(Building_TurretGun __instance) { var artilleryComp = __instance.TryGetComp <CompLongRangeArtillery>(); if (artilleryComp != null && artilleryComp.targetedTile != TargetInfo.Invalid) { var edgeCell = artilleryComp.FacingEdgeCell; // Warmup pie if (artilleryComp.CanLaunch) { if (artilleryComp.warmupTicksLeft > 0) { GenDraw.DrawAimPie(__instance, edgeCell, (int)(artilleryComp.warmupTicksLeft * 0.5f), __instance.def.size.x * 0.5f); } } // Targeting lines var a = __instance.TrueCenter(); var b = edgeCell.CenterVector3; a.y = AltitudeLayer.MetaOverlays.AltitudeFor(); b.y = a.y; GenDraw.DrawLineBetween(a, b, Building_TurretGun.ForcedTargetLineMat); } }
public static void Postfix(Building_TurretGun __instance, ref bool __result) { // If the turret isn't mannable, is player-controlled and is set to be able to force target, do so if (__instance.Faction != Faction.OfPlayer) { return; } var extensionValues = TurretFrameworkExtension.Get(__instance.def); var upgradableComp = __instance.TryGetComp <CompUpgradable>(); // Upgradable comp doesn't exist/isn't upgraded and can force attack, or exists and upgraded and can force attack if (upgradableComp == null || upgradableComp.Props.canForceAttack != null && (upgradableComp.upgraded || !extensionValues.canForceAttack) && (!upgradableComp.upgraded || !upgradableComp.Props.canForceAttack.Value)) { return; } if (!__instance.def.HasComp(typeof(CompMannable))) { __result = true; } else { Log.Warning($"Turret (defName={__instance.def.defName}) has canForceAttack set to true and CompMannable; canForceAttack is redundant in this case."); } }
public static void Listener(Building_TurretGun __instance) { CompRemotelyControlledTurret crt = __instance.TryGetComp <CompRemotelyControlledTurret>(); //Si pas de controlleur alors on ne peut pas controller la tourelle if (crt == null || crt.controller == null) { return; } CompSkyMind csm = __instance.TryGetComp <CompSkyMind>(); CompSurrogateOwner csc = crt.controller.TryGetComp <CompSurrogateOwner>(); if (csm != null && csm.connected && crt.controller != null && csc != null && csc.skyCloudHost != null && csc.skyCloudHost.Map == __instance.Map) { GenDraw.DrawLineBetween(__instance.TrueCenter(), csc.skyCloudHost.TrueCenter(), SimpleColor.Red); } }
public static void Listener(Building_TurretGun __instance) { var crt = __instance.TryGetComp <CompRemotelyControlledTurret>(); if (crt?.controller == null) { return; } CompSurrogateOwner csc = null; var csm = __instance.TryGetComp <CompSkyMind>(); csc = crt.controller.TryGetComp <CompSurrogateOwner>(); if (csm != null && csm.connected && crt.controller != null && csc != null && csc.skyCloudHost != null && csc.skyCloudHost.Map == __instance.Map) { GenDraw.DrawLineBetween(__instance.TrueCenter(), csc.skyCloudHost.TrueCenter(), SimpleColor.Red); } }
public static void Listener(Building_TurretGun __instance, ref bool __result) { var crt = __instance.TryGetComp <CompRemotelyControlledTurret>(); if (crt?.controller == null) { return; } var mannable = (CompMannable)mannableComp.GetValue(__instance); __result = __result || mannable == null; }
public static void Listener(Building_TurretGun __instance, ref bool __result) { CompRemotelyControlledTurret crt = __instance.TryGetComp <CompRemotelyControlledTurret>(); //Si pas de controlleur alors on ne peut pas controller la tourelle if (crt == null || crt.controller == null) { return; } CompMannable mannable = (CompMannable)mannableComp.GetValue(__instance); // bool controlled = (bool)PlayerControlled.GetValue(__instance); __result = __result || mannable == null; }
/// <summary> /// Attempts to find a turret operator. Accepts any Thing as input and does a sanity check to make sure it is an actual turret. /// </summary> /// <param name="thing">The turret to check for an operator</param> /// <returns>Turret operator if one is found, null if not</returns> public static Pawn TryGetTurretOperator(Thing thing) { Pawn manningPawn = null; Building_TurretGun turret = thing as Building_TurretGun; if (turret != null) { CompMannable comp = turret.TryGetComp <CompMannable>(); if (comp != null && comp.MannedNow) { manningPawn = comp.ManningPawn; } } return(manningPawn); }
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); } } }