예제 #1
0
        public static void StanceTick(Stance_Warmup __instance)
        {
            if (SimpleSidearms.RangedCombatAutoSwitch == false)
            {
                return;
            }
            Pawn pawn = __instance.stanceTracker.pawn;

            if (IsHunting(pawn))
            {
                return;
            }
            if (!SimpleSidearms.CEOverride && !(__instance.verb is Verb_Shoot))
            {
                return;
            }
            if (SimpleSidearms.CEOverride && !(CERangedVerb.IsAssignableFrom(__instance.verb.GetType())))
            {
                return;
            }
            float statValue = pawn.GetStatValue(StatDefOf.AimingDelayFactor, true);
            int   ticks     = (__instance.verb.verbProps.warmupTime * statValue).SecondsToTicks();

            if (__instance.ticksLeft / (float)ticks < 1f - SimpleSidearms.RangedCombatAutoSwitchMaxWarmup.Value)
            {
                return;
            }

            LocalTargetInfo target = __instance.focusTarg;

            WeaponAssingment.trySwapToMoreAccurateRangedWeapon(pawn, target, MiscUtils.shouldDrop(DroppingModeEnum.Combat), pawn.IsColonistPlayerControlled);
        }
예제 #2
0
        public static void StanceTick(Stance_Warmup __instance)
        {
            if (Settings.RangedCombatAutoSwitch == false)
            {
                return;
            }
            Pawn pawn = __instance.stanceTracker.pawn;

            if (IsHunting(pawn))
            {
                return;
            }
            if (!pawn.IsValidSidearmsCarrier())
            {
                return;
            }
            if (!(__instance.verb is Verb_Shoot))
            {
                return;
            }

            /*if (!SimpleSidearms.CEOverride && !(__instance.verb is Verb_Shoot))
             *  return;
             * if (SimpleSidearms.CEOverride && !(CERangedVerb.IsAssignableFrom(__instance.verb.GetType())))
             *  return;*/
            float statValue = pawn.GetStatValue(StatDefOf.AimingDelayFactor, true);
            int   ticks     = (__instance.verb.verbProps.warmupTime * statValue).SecondsToTicks();

            if (__instance.ticksLeft / (float)ticks < 1f - Settings.RangedCombatAutoSwitchMaxWarmup)
            {
                return;
            }

            LocalTargetInfo target  = __instance.focusTarg;
            var             EMPGood = false;

            if (target.Pawn != null)
            {
                if (target.Pawn.RaceProps.IsMechanoid)
                {
                    EMPGood = true;
                }
                //unfortunately pawns with EMP grenades dont seem to know they work on shield belts => without forcing the target, the pawn stops attacking

                /*else if(target.Pawn.apparel.WornApparel.Where(a => a is ShieldBelt).Any(b => (b as ShieldBelt).ShieldState == ShieldState.Active)) //check for active shield belts
                 * {
                 *  EMPGood = true;
                 * } */
            }


            bool skipManualUse = true;
            bool skipDangerous = pawn.IsColonistPlayerControlled && Settings.SkipDangerousWeapons;
            bool skipEMP       = (pawn.IsColonistPlayerControlled && Settings.SkipEMPWeapons) || !EMPGood;

            WeaponAssingment.trySwapToMoreAccurateRangedWeapon(pawn, target, MiscUtils.shouldDrop(pawn, DroppingModeEnum.Combat, false), skipManualUse, skipDangerous, skipEMP);
        }
        private static void StanceTick(Stance_Warmup __instance)
        {
            if (SimpleSidearms.RangedCombatAutoSwitch == false)
            {
                return;
            }
            Pawn pawn = __instance.stanceTracker.pawn;

            if (SwapControlsHandler.GetHandlerForPawn(pawn).currentWeaponLocked)
            {
                return;
            }
            if (IsHunting(pawn))
            {
                return;
            }
            if (!SimpleSidearms.CEOverride && !(__instance.verb is Verb_Shoot))
            {
                return;
            }
            if (SimpleSidearms.CEOverride && !(CERangedVerb.IsAssignableFrom(__instance.verb.GetType())))
            {
                return;
            }
            float statValue = pawn.GetStatValue(StatDefOf.AimingDelayFactor, true);
            int   ticks     = (__instance.verb.verbProps.warmupTime * statValue).SecondsToTicks();

            if (__instance.ticksLeft / (float)ticks < 1f - SimpleSidearms.RangedCombatAutoSwitchMaxWarmup.Value)
            {
                return;
            }

            LocalTargetInfo targ = __instance.focusTarg;

            if (pawn.inventory.innerContainer.Any((Thing x) => x.def.IsRangedWeapon))
            {
                CellRect cellRect = (!targ.HasThing) ? CellRect.SingleCell(targ.Cell) : targ.Thing.OccupiedRect();
                float    range    = cellRect.ClosestDistSquaredTo(pawn.Position);
                WeaponAssingment.trySwapToMoreAccurateRangedWeapon(pawn, MiscUtils.shouldDrop(DroppingModeEnum.Range), range, pawn.IsColonistPlayerControlled);
            }
            else
            {
            }
        }