From 241be37185b84ce6d3fd0c8b5672bb41c926a4e0 Mon Sep 17 00:00:00 2001 From: ArchRBX <5040911+ArchRBX@users.noreply.github.com> Date: Tue, 24 Sep 2024 18:02:51 +0100 Subject: [PATCH] AstroNav GPS Cartridge (#32194) * 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 --- .../GPS/Components/HandheldGPSComponent.cs | 9 ----- .../GPS/Systems/HandheldGpsSystem.cs | 2 +- .../GPS/UI/HandheldGpsStatusControl.cs | 15 +++++--- .../Cartridges/AstroNavCartridgeComponent.cs | 9 +++++ .../Cartridges/AstroNavCartridgeSystem.cs | 32 ++++++++++++++++++ Content.Server/Entry/IgnoredComponents.cs | 1 - .../GPS/Components/HandheldGPSComponent.cs | 10 ++++++ .../Components/SharedHandheldGPSComponent.cs | 9 ----- .../en-US/cartridge-loader/cartridges.ftl | 2 ++ .../Catalog/Fills/Lockers/heads.yml | 1 + .../Entities/Objects/Devices/cartridges.yml | 19 +++++++++++ .../Entities/Objects/Devices/pda.yml | 7 ++++ .../Devices/cartridge.rsi/cart-nav.png | Bin 0 -> 300 bytes .../Objects/Devices/cartridge.rsi/meta.json | 11 +++--- 14 files changed, 99 insertions(+), 28 deletions(-) delete mode 100644 Content.Client/GPS/Components/HandheldGPSComponent.cs create mode 100644 Content.Server/CartridgeLoader/Cartridges/AstroNavCartridgeComponent.cs create mode 100644 Content.Server/CartridgeLoader/Cartridges/AstroNavCartridgeSystem.cs create mode 100644 Content.Shared/GPS/Components/HandheldGPSComponent.cs delete mode 100644 Content.Shared/Tools/Components/SharedHandheldGPSComponent.cs create mode 100644 Resources/Textures/Objects/Devices/cartridge.rsi/cart-nav.png diff --git a/Content.Client/GPS/Components/HandheldGPSComponent.cs b/Content.Client/GPS/Components/HandheldGPSComponent.cs deleted file mode 100644 index 0f5271fd80..0000000000 --- a/Content.Client/GPS/Components/HandheldGPSComponent.cs +++ /dev/null @@ -1,9 +0,0 @@ -using Content.Shared.GPS; - -namespace Content.Client.GPS.Components -{ - [RegisterComponent] - public sealed partial class HandheldGPSComponent : SharedHandheldGPSComponent - { - } -} diff --git a/Content.Client/GPS/Systems/HandheldGpsSystem.cs b/Content.Client/GPS/Systems/HandheldGpsSystem.cs index cc2b888da3..3f38a3b695 100644 --- a/Content.Client/GPS/Systems/HandheldGpsSystem.cs +++ b/Content.Client/GPS/Systems/HandheldGpsSystem.cs @@ -1,4 +1,4 @@ -using Content.Client.GPS.Components; +using Content.Shared.GPS.Components; using Content.Client.GPS.UI; using Content.Client.Items; diff --git a/Content.Client/GPS/UI/HandheldGpsStatusControl.cs b/Content.Client/GPS/UI/HandheldGpsStatusControl.cs index 7dcf3f29c5..57645e386e 100644 --- a/Content.Client/GPS/UI/HandheldGpsStatusControl.cs +++ b/Content.Client/GPS/UI/HandheldGpsStatusControl.cs @@ -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 index 0000000000..fd616a1c80 --- /dev/null +++ b/Content.Server/CartridgeLoader/Cartridges/AstroNavCartridgeComponent.cs @@ -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 index 0000000000..60d14789fa --- /dev/null +++ b/Content.Server/CartridgeLoader/Cartridges/AstroNavCartridgeSystem.cs @@ -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(OnCartridgeAdded); + SubscribeLocalEvent(OnCartridgeRemoved); + } + + private void OnCartridgeAdded(Entity ent, ref CartridgeAddedEvent args) + { + EnsureComp(args.Loader); + } + + private void OnCartridgeRemoved(Entity ent, ref CartridgeRemovedEvent args) + { + // only remove when the program itself is removed + if (!_cartridgeLoaderSystem.HasProgram(args.Loader)) + { + RemComp(args.Loader); + } + } +} diff --git a/Content.Server/Entry/IgnoredComponents.cs b/Content.Server/Entry/IgnoredComponents.cs index d9b81c8e5a..04c4566227 100644 --- a/Content.Server/Entry/IgnoredComponents.cs +++ b/Content.Server/Entry/IgnoredComponents.cs @@ -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 index 0000000000..a0af090986 --- /dev/null +++ b/Content.Shared/GPS/Components/HandheldGPSComponent.cs @@ -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 index 3c30738857..0000000000 --- a/Content.Shared/Tools/Components/SharedHandheldGPSComponent.cs +++ /dev/null @@ -1,9 +0,0 @@ - -namespace Content.Shared.GPS -{ - public abstract partial class SharedHandheldGPSComponent : Component - { - [DataField("updateRate")] - public float UpdateRate = 1.5f; - } -} diff --git a/Resources/Locale/en-US/cartridge-loader/cartridges.ftl b/Resources/Locale/en-US/cartridge-loader/cartridges.ftl index 2db27f5be0..804da0992f 100644 --- a/Resources/Locale/en-US/cartridge-loader/cartridges.ftl +++ b/Resources/Locale/en-US/cartridge-loader/cartridges.ftl @@ -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 diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml b/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml index 31ebad6183..2ca2b0f740 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml @@ -17,6 +17,7 @@ - id: RubberStampApproved - id: RubberStampDenied - id: RubberStampQm + - id: AstroNavCartridge - type: entity id: LockerQuarterMasterFilled diff --git a/Resources/Prototypes/Entities/Objects/Devices/cartridges.yml b/Resources/Prototypes/Entities/Objects/Devices/cartridges.yml index 91493f48cd..aee26b0776 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/cartridges.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/cartridges.yml @@ -116,3 +116,22 @@ - 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 diff --git a/Resources/Prototypes/Entities/Objects/Devices/pda.yml b/Resources/Prototypes/Entities/Objects/Devices/pda.yml index f8109ca3ee..c6952fdd6a 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/pda.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/pda.yml @@ -400,6 +400,13 @@ 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 index 0000000000000000000000000000000000000000..427129da0ed3c3745dda6f4c80f872b860497315 GIT binary patch literal 300 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCilI0(?STIXOAi)zzh>qzsLm9GpV@0y3)i7{Z&C&V0|Ns=K|!GM zuz-^+K#H#<$S?RmGGK5$aOVV2hO@vUvKXk~FbFdq&tH)O6fE>~aSXBWe|zCBSAzmi zL*Re2vv+>)&kJtX)Lrs>-)sl|?2L@d{8jP|k&_N{O1xh7rdBWB=p4I42J3s11K&F~ zvT8B-oG=zL4skrfytwB=eW3XYVIdaL9~+rpc(48DEVFIlyJ`cUu)&Rm^Hj$ Ys#v327E!^u8E83!r>mdKI;Vst0BSF1{Qv*} literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Devices/cartridge.rsi/meta.json b/Resources/Textures/Objects/Devices/cartridge.rsi/meta.json index d5fad56006..e7415fe1c2 100644 --- a/Resources/Textures/Objects/Devices/cartridge.rsi/meta.json +++ b/Resources/Textures/Objects/Devices/cartridge.rsi/meta.json @@ -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" }