public static void Postfix(ref ModuleWeapon __instance) { if (!__instance.FireControl && __instance.block.tank.IsAIControlled()) { TargetAimer targetAimer = (TargetAimer)m_TargetAimer.GetValue(__instance); if (targetAimer.HasTarget) { Vector3 actualTargetPosition = (Vector3)m_TargetPosition2.GetValue(targetAimer); m_TargetPosition.SetValue(__instance, actualTargetPosition); IModuleWeapon weaponComponent = (IModuleWeapon)m_WeaponComponent.GetValue(__instance); float range = weaponComponent.GetRange(); Transform fireTransform = weaponComponent.GetFireTransform(); Vector3 position = fireTransform.position; if ((actualTargetPosition - position).sqrMagnitude < range * range) { if (weaponComponent is ModuleWeaponGun && ((ModuleWeaponGun)weaponComponent).m_SeekingRounds) { __instance.FireControl = true; } else if (Vector3.Angle(fireTransform.forward, actualTargetPosition - __instance.block.trans.position) < tolerance) { __instance.FireControl = true; } } } } }
public float GetRange() => WrappedModule.GetRange();