]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Add navmap beacon to armed nukes (#20394)
authordeltanedas <39013340+deltanedas@users.noreply.github.com>
Sat, 23 Sep 2023 19:15:05 +0000 (20:15 +0100)
committerGitHub <noreply@github.com>
Sat, 23 Sep 2023 19:15:05 +0000 (11:15 -0800)
Content.Server/Nuke/NukeSystem.cs
Content.Server/Pinpointer/NavMapSystem.cs
Content.Shared/Pinpointer/NavMapBeaconComponent.cs
Resources/Prototypes/Entities/Objects/Devices/nuke.yml

index 97c3b6c94f494f9c3fbd2e3072e06240a56102ab..ca0b0e01137c3d55af7baf3019e79118b6ec6b4d 100644 (file)
@@ -2,6 +2,7 @@ using Content.Server.AlertLevel;
 using Content.Server.Audio;
 using Content.Server.Chat.Systems;
 using Content.Server.Explosion.EntitySystems;
+using Content.Server.Pinpointer;
 using Content.Server.Popups;
 using Content.Server.Station.Systems;
 using Content.Shared.Audio;
@@ -29,6 +30,7 @@ public sealed class NukeSystem : EntitySystem
     [Dependency] private readonly IRobustRandom _random = default!;
     [Dependency] private readonly ITileDefinitionManager _tileDefManager = default!;
     [Dependency] private readonly ItemSlotsSystem _itemSlots = default!;
+    [Dependency] private readonly NavMapSystem _navMap = default!;
     [Dependency] private readonly PointLightSystem _pointLight = default!;
     [Dependency] private readonly PopupSystem _popups = default!;
     [Dependency] private readonly ServerGlobalSoundSystem _sound = default!;
@@ -458,6 +460,8 @@ public sealed class NukeSystem : EntitySystem
 
         // turn on the spinny light
         _pointLight.SetEnabled(uid, true);
+        // enable the navmap beacon for people to find it
+        _navMap.SetBeaconEnabled(uid, true);
 
         _itemSlots.SetLock(uid, component.DiskSlot, true);
         if (!nukeXform.Anchored)
@@ -500,6 +504,8 @@ public sealed class NukeSystem : EntitySystem
 
         // turn off the spinny light
         _pointLight.SetEnabled(uid, false);
+        // disable the navmap beacon now that its disarmed
+        _navMap.SetBeaconEnabled(uid, false);
 
         // start bomb cooldown
         _itemSlots.SetLock(uid, component.DiskSlot, false);
index 140f016558b66d1ab942921d17f215e8eeda796e..a62c5155202e50b41379ca7226cc5eef80423356 100644 (file)
@@ -130,7 +130,7 @@ public sealed class NavMapSystem : SharedNavMapSystem
 
         while (beaconQuery.MoveNext(out var beaconUid, out var beacon, out var xform))
         {
-            if (xform.GridUid != uid || !CanBeacon(beaconUid, xform))
+            if (!beacon.Enabled || xform.GridUid != uid || !CanBeacon(beaconUid, xform))
                 continue;
 
             // TODO: Make warp points use metadata name instead.
@@ -236,4 +236,28 @@ public sealed class NavMapSystem : SharedNavMapSystem
 
         Dirty(component);
     }
+
+    /// <summary>
+    /// Sets the beacon's Enabled field and refreshes the grid.
+    /// </summary>
+    public void SetBeaconEnabled(EntityUid uid, bool enabled, NavMapBeaconComponent? comp = null)
+    {
+        if (!Resolve(uid, ref comp) || comp.Enabled == enabled)
+            return;
+
+        comp.Enabled = enabled;
+
+        RefreshNavGrid(uid);
+    }
+
+    /// <summary>
+    /// Toggles the beacon's Enabled field and refreshes the grid.
+    /// </summary>
+    public void ToggleBeacon(EntityUid uid, NavMapBeaconComponent? comp = null)
+    {
+        if (!Resolve(uid, ref comp))
+            return;
+
+        SetBeaconEnabled(uid, !comp.Enabled, comp);
+    }
 }
index dfe958d1d12cff921da54adf6fa3e953c3d7bb91..b9cb8d4488b83a2e7fb18e44153f087ebbd39f56 100644 (file)
@@ -5,15 +5,21 @@ namespace Content.Shared.Pinpointer;
 /// <summary>
 /// Will show a marker on a NavMap.
 /// </summary>
-[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
+[RegisterComponent, Access(typeof(SharedNavMapSystem))]
 public sealed partial class NavMapBeaconComponent : Component
 {
     /// <summary>
     /// Defaults to entity name if nothing found.
     /// </summary>
-    [ViewVariables(VVAccess.ReadWrite), DataField("text"), AutoNetworkedField]
+    [ViewVariables(VVAccess.ReadWrite), DataField]
     public string? Text;
 
-    [ViewVariables(VVAccess.ReadWrite), DataField("color"), AutoNetworkedField]
+    [ViewVariables(VVAccess.ReadWrite), DataField]
     public Color Color = Color.Orange;
+
+    /// <summary>
+    /// Only enabled beacons can be seen on a station map.
+    /// </summary>
+    [ViewVariables(VVAccess.ReadWrite), DataField]
+    public bool Enabled = true;
 }
index abb6ae1b9b8072f201f43e5e39370b881deac965..878353f80fe8e18cbe6bb8d728a88d6addc622e1 100644 (file)
     mask: /Textures/Effects/LightMasks/double_cone.png
   - type: RotatingLight
     speed: 120
+  - type: NavMapBeacon
+    color: "#ff0000"
+    text: nuclear fission explosive
+    enabled: false
   - type: NukeLabel
   - type: Nuke
     explosionType: Default