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);
                }
            }
コード例 #2
0
            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.");
                }
            }
コード例 #3
0
        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);
            }
        }
コード例 #4
0
        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);
            }
        }
コード例 #5
0
        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;
        }
コード例 #6
0
        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;
        }
コード例 #7
0
ファイル: Utility.cs プロジェクト: jnkyacc/CombatRealism
        /// <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);
        }
コード例 #8
0
            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);
                    }
                }
            }