mirror of
https://github.com/WWhiteDreamProject/wwdpublic.git
synced 2026-04-24 00:58:01 +03:00
# Description I am trying to port over the AI turrets being implemented into wizden made by chromiumboy. It looks fantastic and would like to port this now and work on any issues that might show. --- # Original PRs https://github.com/space-wizards/space-station-14/issues/35223 https://github.com/space-wizards/space-station-14/pull/35025 https://github.com/space-wizards/space-station-14/pull/35031 https://github.com/space-wizards/space-station-14/pull/35058 https://github.com/space-wizards/space-station-14/pull/35123 https://github.com/space-wizards/space-station-14/pull/35149 https://github.com/space-wizards/space-station-14/pull/35235 https://github.com/space-wizards/space-station-14/pull/35236 --- # TODO - [x] Port all related PRs to EE. - [x] Patch any bugs with turrets or potential issues. - [x] Cleanup my shitcode or changes. --- # Changelog 🆑 - add: Added recharging sentry turrets, one is AI-based or the other is Sec can make. - add: The sentry turrets can be made after researching in T3 arsenal. The boards are made in the sec fab. - add: New ID permissions for borgs and minibots for higher turret options. - tweak: Turrets stop shooting after someone goes crit. --------- Co-authored-by: Nathaniel Adams <60526456+Nathaniel-Adams@users.noreply.github.com> (cherry picked from commit 209d0537401cbda448a03e910cca9a898c9d566f)
65 lines
1.8 KiB
C#
65 lines
1.8 KiB
C#
using Content.Server.NPC.Systems;
|
|
using Robust.Shared.Audio;
|
|
|
|
namespace Content.Server.NPC.Components;
|
|
|
|
/// <summary>
|
|
/// Added to an NPC doing ranged combat.
|
|
/// </summary>
|
|
[RegisterComponent]
|
|
public sealed partial class NPCRangedCombatComponent : Component
|
|
{
|
|
[ViewVariables]
|
|
public EntityUid Target;
|
|
|
|
[ViewVariables]
|
|
public CombatStatus Status = CombatStatus.Normal;
|
|
|
|
// Most of the below is to deal with turrets.
|
|
|
|
/// <summary>
|
|
/// If null it will instantly turn.
|
|
/// </summary>
|
|
[ViewVariables(VVAccess.ReadWrite)] public Angle? RotationSpeed;
|
|
|
|
/// <summary>
|
|
/// Maximum distance, between our rotation and the target's, to consider shooting it.
|
|
/// </summary>
|
|
[ViewVariables(VVAccess.ReadWrite)]
|
|
public Angle AccuracyThreshold = Angle.FromDegrees(30);
|
|
|
|
/// <summary>
|
|
/// How long until the last line of sight check.
|
|
/// </summary>
|
|
[ViewVariables(VVAccess.ReadWrite)]
|
|
public float LOSAccumulator = 0f;
|
|
|
|
/// <summary>
|
|
/// Is the target still considered in LOS since the last check.
|
|
/// </summary>
|
|
[ViewVariables(VVAccess.ReadWrite)]
|
|
public bool TargetInLOS = false;
|
|
|
|
/// <summary>
|
|
/// If true, only opaque objects will block line of sight.
|
|
/// </summary>
|
|
[ViewVariables(VVAccess.ReadWrite)]
|
|
// ReSharper disable once InconsistentNaming
|
|
public bool UseOpaqueForLOSChecks = false;
|
|
|
|
/// <summary>
|
|
/// Delay after target is in LOS before we start shooting.
|
|
/// </summary>
|
|
[ViewVariables(VVAccess.ReadWrite)]
|
|
public float ShootDelay = 0.2f;
|
|
|
|
[ViewVariables(VVAccess.ReadWrite)]
|
|
public float ShootAccumulator;
|
|
|
|
/// <summary>
|
|
/// Sound to play if the target enters line of sight.
|
|
/// </summary>
|
|
[ViewVariables(VVAccess.ReadWrite)]
|
|
public SoundSpecifier? SoundTargetInLOS;
|
|
}
|