]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
AstroNav GPS Cartridge (#32194)
authorArchRBX <5040911+ArchRBX@users.noreply.github.com>
Tue, 24 Sep 2024 17:02:51 +0000 (18:02 +0100)
committerGitHub <noreply@github.com>
Tue, 24 Sep 2024 17:02:51 +0000 (19:02 +0200)
* initial commit

* adds astronav cartridge to QM locker

* changes requested in review

* fix merge conflicts

* fixes the statuscontrol disappearing if you eject the cartridge but still have it installed

* fix notificationsenabled on salv pda proto

* fixes lingering statuscontrol on eject while held

---------

Co-authored-by: archrbx <punk.gear5260@fastmail.com>
14 files changed:
Content.Client/GPS/Components/HandheldGPSComponent.cs [deleted file]
Content.Client/GPS/Systems/HandheldGpsSystem.cs
Content.Client/GPS/UI/HandheldGpsStatusControl.cs
Content.Server/CartridgeLoader/Cartridges/AstroNavCartridgeComponent.cs [new file with mode: 0644]
Content.Server/CartridgeLoader/Cartridges/AstroNavCartridgeSystem.cs [new file with mode: 0644]
Content.Server/Entry/IgnoredComponents.cs
Content.Shared/GPS/Components/HandheldGPSComponent.cs [new file with mode: 0644]
Content.Shared/Tools/Components/SharedHandheldGPSComponent.cs [deleted file]
Resources/Locale/en-US/cartridge-loader/cartridges.ftl
Resources/Prototypes/Catalog/Fills/Lockers/heads.yml
Resources/Prototypes/Entities/Objects/Devices/cartridges.yml
Resources/Prototypes/Entities/Objects/Devices/pda.yml
Resources/Textures/Objects/Devices/cartridge.rsi/cart-nav.png [new file with mode: 0644]
Resources/Textures/Objects/Devices/cartridge.rsi/meta.json

diff --git a/Content.Client/GPS/Components/HandheldGPSComponent.cs b/Content.Client/GPS/Components/HandheldGPSComponent.cs
deleted file mode 100644 (file)
index 0f5271f..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-using Content.Shared.GPS;
-
-namespace Content.Client.GPS.Components
-{
-    [RegisterComponent]
-    public sealed partial class HandheldGPSComponent : SharedHandheldGPSComponent
-    {
-    }
-}
index cc2b888da37f3d46e98aa8200630d50ccfc75562..3f38a3b69529a8a738e18412fa39ede044a2b6a7 100644 (file)
@@ -1,4 +1,4 @@
-using Content.Client.GPS.Components;
+using Content.Shared.GPS.Components;
 using Content.Client.GPS.UI;
 using Content.Client.Items;
 
index 7dcf3f29c5197e0527838cb3eef1a904a019c2d8..57645e386e7390b127ab6cf6960ceaf69118a4e4 100644 (file)
@@ -1,4 +1,4 @@
-using Content.Client.GPS.Components;
+using Content.Shared.GPS.Components;
 using Content.Client.Message;
 using Content.Client.Stylesheets;
 using Robust.Client.GameObjects;
@@ -30,6 +30,13 @@ public sealed class HandheldGpsStatusControl : Control
     {
         base.FrameUpdate(args);
 
+        // don't display the label if the gps component is being removed
+        if (_parent.Comp.LifeStage > ComponentLifeStage.Running)
+        {
+            _label.Visible = false;
+            return;
+        }
+
         _updateDif += args.DeltaSeconds;
         if (_updateDif < _parent.Comp.UpdateRate)
             return;
@@ -44,9 +51,9 @@ public sealed class HandheldGpsStatusControl : Control
         var posText = "Error";
         if (_entMan.TryGetComponent(_parent, out TransformComponent? transComp))
         {
-            var pos =  _transform.GetMapCoordinates(_parent.Owner, xform: transComp);
-            var x = (int) pos.X;
-            var y = (int) pos.Y;
+            var pos = _transform.GetMapCoordinates(_parent.Owner, xform: transComp);
+            var x = (int)pos.X;
+            var y = (int)pos.Y;
             posText = $"({x}, {y})";
         }
         _label.SetMarkup(Loc.GetString("handheld-gps-coordinates-title", ("coordinates", posText)));
diff --git a/Content.Server/CartridgeLoader/Cartridges/AstroNavCartridgeComponent.cs b/Content.Server/CartridgeLoader/Cartridges/AstroNavCartridgeComponent.cs
new file mode 100644 (file)
index 0000000..fd616a1
--- /dev/null
@@ -0,0 +1,9 @@
+using Content.Shared.CartridgeLoader.Cartridges;
+using Content.Shared.GPS;
+
+namespace Content.Server.CartridgeLoader.Cartridges;
+
+[RegisterComponent]
+public sealed partial class AstroNavCartridgeComponent : Component
+{
+}
diff --git a/Content.Server/CartridgeLoader/Cartridges/AstroNavCartridgeSystem.cs b/Content.Server/CartridgeLoader/Cartridges/AstroNavCartridgeSystem.cs
new file mode 100644 (file)
index 0000000..60d1478
--- /dev/null
@@ -0,0 +1,32 @@
+using Content.Shared.CartridgeLoader;
+using Content.Shared.CartridgeLoader.Cartridges;
+using Content.Shared.GPS.Components;
+
+namespace Content.Server.CartridgeLoader.Cartridges;
+
+public sealed class AstroNavCartridgeSystem : EntitySystem
+{
+    [Dependency] private readonly CartridgeLoaderSystem _cartridgeLoaderSystem = default!;
+
+    public override void Initialize()
+    {
+        base.Initialize();
+
+        SubscribeLocalEvent<AstroNavCartridgeComponent, CartridgeAddedEvent>(OnCartridgeAdded);
+        SubscribeLocalEvent<AstroNavCartridgeComponent, CartridgeRemovedEvent>(OnCartridgeRemoved);
+    }
+
+    private void OnCartridgeAdded(Entity<AstroNavCartridgeComponent> ent, ref CartridgeAddedEvent args)
+    {
+        EnsureComp<HandheldGPSComponent>(args.Loader);
+    }
+
+    private void OnCartridgeRemoved(Entity<AstroNavCartridgeComponent> ent, ref CartridgeRemovedEvent args)
+    {
+        // only remove when the program itself is removed
+        if (!_cartridgeLoaderSystem.HasProgram<AstroNavCartridgeComponent>(args.Loader))
+        {
+            RemComp<HandheldGPSComponent>(args.Loader);
+        }
+    }
+}
index d9b81c8e5a5bf34cbd57b9dee689840b10c41692..04c45662272b4c3d88d99fa1da1587517fb8e2eb 100644 (file)
@@ -12,7 +12,6 @@ namespace Content.Server.Entry
             "GuideHelp",
             "Clickable",
             "Icon",
-            "HandheldGPS",
             "CableVisualizer",
             "SolutionItemStatus",
             "UIFragment",
diff --git a/Content.Shared/GPS/Components/HandheldGPSComponent.cs b/Content.Shared/GPS/Components/HandheldGPSComponent.cs
new file mode 100644 (file)
index 0000000..a0af090
--- /dev/null
@@ -0,0 +1,10 @@
+using Robust.Shared.GameStates;
+
+namespace Content.Shared.GPS.Components;
+
+[RegisterComponent, NetworkedComponent]
+public sealed partial class HandheldGPSComponent : Component
+{
+    [DataField]
+    public float UpdateRate = 1.5f;
+}
diff --git a/Content.Shared/Tools/Components/SharedHandheldGPSComponent.cs b/Content.Shared/Tools/Components/SharedHandheldGPSComponent.cs
deleted file mode 100644 (file)
index 3c30738..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-
-namespace Content.Shared.GPS
-{
-    public abstract partial class SharedHandheldGPSComponent : Component
-    {
-        [DataField("updateRate")]
-        public float UpdateRate = 1.5f;
-    }
-}
index 2db27f5be09aec062848ec48e5206cc5188c8790..804da0992fa3b78212c489b3490695cc7098bdad 100644 (file)
@@ -20,6 +20,8 @@ log-probe-label-time = Time
 log-probe-label-accessor = Accessed by
 log-probe-label-number = #
 
+astro-nav-program-name = AstroNav
+
 # Wanted list cartridge
 wanted-list-program-name = Wanted list
 wanted-list-label-no-records = It's all right, cowboy
index 31ebad6183703277b6e933e7bd759e14a31cadf8..2ca2b0f740468cdd2ba12a8fb8f7c160fe232ada 100644 (file)
@@ -17,6 +17,7 @@
     - id: RubberStampApproved
     - id: RubberStampDenied
     - id: RubberStampQm
+    - id: AstroNavCartridge
 
 - type: entity
   id: LockerQuarterMasterFilled
index 91493f48cd1f50f07946fde6e34a67db21675851..aee26b0776985de8752c67c0c2d6cadbe78a4fa2 100644 (file)
   - type: WantedListCartridge
   - type: StealTarget
     stealGroup: WantedListCartridge
+
+- type: entity
+  parent: BaseItem
+  id: AstroNavCartridge
+  name: AstroNav cartridge
+  description: A program for navigation that provides GPS coordinates.
+  components:
+    - type: Sprite
+      sprite: Objects/Devices/cartridge.rsi
+      state: cart-nav
+    - type: Icon
+      sprite: Objects/Devices/cartridge.rsi
+      state: cart-nav
+    - type: Cartridge
+      programName: astro-nav-program-name
+      icon:
+        sprite: Objects/Devices/gps.rsi
+        state: icon
+    - type: AstroNavCartridge
index f8109ca3ee485f8c201ead1380bedab2f519b13f..c6952fdd6aa217e61c0d21bd533e50cfcfae08fe 100644 (file)
     accentVColor: "#8900c9"
   - type: Icon
     state: pda-miner
+  - type: CartridgeLoader
+    uiKey: enum.PdaUiKey.Key
+    preinstalled:
+      - CrewManifestCartridge
+      - NotekeeperCartridge
+      - NewsReaderCartridge
+      - AstroNavCartridge
 
 - type: entity
   parent: BasePDA
diff --git a/Resources/Textures/Objects/Devices/cartridge.rsi/cart-nav.png b/Resources/Textures/Objects/Devices/cartridge.rsi/cart-nav.png
new file mode 100644 (file)
index 0000000..427129d
Binary files /dev/null and b/Resources/Textures/Objects/Devices/cartridge.rsi/cart-nav.png differ
index d5fad560062193d545e2ef74d512a91d26d5b1b1..e7415fe1c271c5e7a722018c522da3494a43c8e2 100644 (file)
@@ -1,7 +1,7 @@
 {
   "version": 1,
   "license": "CC-BY-SA-3.0",
-  "copyright": "Taken from vgstation at https://github.com/vgstation-coders/vgstation13/commit/1cdfb0230cc96d0ba751fa002d04f8aa2f25ad7d and tgstation at tgstation at https://github.com/tgstation/tgstation/commit/0c15d9dbcf0f2beb230eba5d9d889ef2d1945bb8, cart-log made by Skarletto (github), cart-sec made by dieselmohawk (discord)",
+  "copyright": "Taken from vgstation at https://github.com/vgstation-coders/vgstation13/commit/1cdfb0230cc96d0ba751fa002d04f8aa2f25ad7d and tgstation at tgstation at https://github.com/tgstation/tgstation/commit/0c15d9dbcf0f2beb230eba5d9d889ef2d1945bb8, cart-log made by Skarletto (github), cart-sec made by dieselmohawk (discord), cart-nav made by ArchRBX (github)",
   "size": {
     "x": 32,
     "y": 32
@@ -58,6 +58,9 @@
     {
       "name": "cart-mi"
     },
+    {
+      "name": "cart-nav"
+    },
     {
       "name": "cart-ord"
     },
@@ -70,6 +73,9 @@
     {
       "name": "cart-s"
     },
+    {
+      "name": "cart-sec"
+    },
     {
       "name": "cart-tear"
     },
@@ -79,9 +85,6 @@
     {
       "name": "cart-y"
     },
-    {
-      "name": "cart-sec"
-    },
     {
       "name": "insert_overlay"
     }