From 11eb591c54f80408c21d18ae7f2addb926ba257b Mon Sep 17 00:00:00 2001 From: WlarusFromDaSpace <44726328+WlarusFromDaSpace@users.noreply.github.com> Date: Sat, 5 Feb 2022 13:33:24 +0000 Subject: [PATCH] Adds door remotes from SS13 (#6335) --- Content.Client/Entry/IgnoredComponents.cs | 3 +- Content.Server/Remotes/DoorRemoteComponent.cs | 21 +++ Content.Server/Remotes/DoorRemoteSystem.cs | 93 ++++++++++++ .../Locale/en-US/door-remote/door-remote.ftl | 3 + .../Catalog/Fills/Lockers/heads.yml | 7 + .../Entities/Objects/Devices/door_remote.yml | 137 ++++++++++++++++++ .../door_remote.rsi/door_remotebase.png | Bin 0 -> 5456 bytes .../door_remotelightscolour.png | Bin 0 -> 5000 bytes .../door_remotescreencolour.png | Bin 0 -> 5022 bytes .../Objects/Devices/door_remote.rsi/meta.json | 20 +++ 10 files changed, 283 insertions(+), 1 deletion(-) create mode 100644 Content.Server/Remotes/DoorRemoteComponent.cs create mode 100644 Content.Server/Remotes/DoorRemoteSystem.cs create mode 100644 Resources/Locale/en-US/door-remote/door-remote.ftl create mode 100644 Resources/Prototypes/Entities/Objects/Devices/door_remote.yml create mode 100644 Resources/Textures/Objects/Devices/door_remote.rsi/door_remotebase.png create mode 100644 Resources/Textures/Objects/Devices/door_remote.rsi/door_remotelightscolour.png create mode 100644 Resources/Textures/Objects/Devices/door_remote.rsi/door_remotescreencolour.png create mode 100644 Resources/Textures/Objects/Devices/door_remote.rsi/meta.json diff --git a/Content.Client/Entry/IgnoredComponents.cs b/Content.Client/Entry/IgnoredComponents.cs index 4bd03bc2f0..defc8e2649 100644 --- a/Content.Client/Entry/IgnoredComponents.cs +++ b/Content.Client/Entry/IgnoredComponents.cs @@ -301,7 +301,8 @@ namespace Content.Client.Entry "ArtifactInteractionTrigger", "Artifact", "RandomArtifactSprite", - "EnergySword" + "EnergySword", + "DoorRemote", }; } } diff --git a/Content.Server/Remotes/DoorRemoteComponent.cs b/Content.Server/Remotes/DoorRemoteComponent.cs new file mode 100644 index 0000000000..e4a78ce176 --- /dev/null +++ b/Content.Server/Remotes/DoorRemoteComponent.cs @@ -0,0 +1,21 @@ +using Robust.Shared.Analyzers; +using Robust.Shared.GameObjects; + +namespace Content.Server.Remotes +{ + [RegisterComponent] + [Friend(typeof(DoorRemoteSystem))] + public class DoorRemoteComponent : Component + { + public override string Name => "DoorRemote"; + + public OperatingMode Mode = OperatingMode.OpenClose; + + public enum OperatingMode : byte + { + OpenClose, + ToggleBolts + // ToggleEmergencyAccess + } + } +} diff --git a/Content.Server/Remotes/DoorRemoteSystem.cs b/Content.Server/Remotes/DoorRemoteSystem.cs new file mode 100644 index 0000000000..f2c2b23b4f --- /dev/null +++ b/Content.Server/Remotes/DoorRemoteSystem.cs @@ -0,0 +1,93 @@ +using Robust.Shared.GameObjects; +using Robust.Shared.Localization; +using Robust.Shared.Player; +using Robust.Shared.IoC; +using Robust.Shared.Audio; +using Content.Shared.Interaction; +using Content.Shared.Popups; +using Content.Shared.Doors.Components; +using Content.Shared.Doors.Systems; +using Content.Shared.Physics; +using Content.Shared.Access.Components; +using Content.Server.Doors.Systems; +using Content.Server.Doors.Components; + +namespace Content.Server.Remotes +{ + public sealed class DoorRemoteSystem : EntitySystem + { + [Dependency] private readonly SharedPopupSystem _popupSystem = default!; + [Dependency] private readonly SharedDoorSystem _sharedDoorSystem = default!; + [Dependency] private readonly DoorSystem _doorSystem = default!; + [Dependency] private readonly SharedInteractionSystem _interactionSystem = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnInHandActivation); + SubscribeLocalEvent(OnAfterInteract); + } + + public void OnInHandActivation(EntityUid user, DoorRemoteComponent component, UseInHandEvent args) + { + switch (component.Mode) + { + case DoorRemoteComponent.OperatingMode.OpenClose: + component.Mode = DoorRemoteComponent.OperatingMode.ToggleBolts; + _popupSystem.PopupEntity(Loc.GetString("door-remote-switch-state-toggle-bolts"), args.User, Filter.Entities(args.User)); + break; + case DoorRemoteComponent.OperatingMode.ToggleBolts: + component.Mode = DoorRemoteComponent.OperatingMode.OpenClose; // TODO: Swítch to ToggleEmergencyAcces when EA is implemented + _popupSystem.PopupEntity(Loc.GetString("door-remote-switch-state-open-close"), args.User, Filter.Entities(args.User)); // TODO: See the above comment + break; + /* + case DoorRemoteComponent.OperatingMode.ToggleEmergencyAccess: + component.Mode = DoorRemoteComponent.OperatingMode.OpenClose; + _popupSystem.PopupEntity(Loc.GetString("door-remote-switch-state-open-close"), args.User, Filter.Entities(args.User)); + break; + */ + } + } + + private void OnAfterInteract(EntityUid uid, DoorRemoteComponent component, AfterInteractEvent args) + { + if (args.Handled + || args.Target == null + || !TryComp(args.Target, out var doorComponent) // If it isn't a door we don't use it + || !HasComp(args.Target) // Remotes do not work on doors without access requirements + || !TryComp(args.Target, out var airlockComponent) // Remotes only work on airlocks + || !_interactionSystem.InRangeUnobstructed(args.User, doorComponent.Owner, -1f, CollisionGroup.Opaque)) + { + return; + } + + args.Handled = true; + + if (component.Mode == DoorRemoteComponent.OperatingMode.OpenClose) + { + _sharedDoorSystem.TryToggleDoor(doorComponent.Owner, user: args.Used); + } + + if (component.Mode == DoorRemoteComponent.OperatingMode.ToggleBolts + && airlockComponent.IsPowered()) + { + if (_doorSystem.HasAccess(doorComponent.Owner, args.Used)) + { + airlockComponent.SetBoltsWithAudio(!airlockComponent.IsBolted()); + } + else + { + if (doorComponent.State != DoorState.Open) + { + _sharedDoorSystem.Deny(airlockComponent.Owner, user: args.User); + } + else if (doorComponent.DenySound != null) + { + SoundSystem.Play(Filter.Pvs(args.Target.Value), doorComponent.DenySound.GetSound(), args.Target.Value); + } + } + } + } + } +} diff --git a/Resources/Locale/en-US/door-remote/door-remote.ftl b/Resources/Locale/en-US/door-remote/door-remote.ftl new file mode 100644 index 0000000000..fa35d4d659 --- /dev/null +++ b/Resources/Locale/en-US/door-remote/door-remote.ftl @@ -0,0 +1,3 @@ +door-remote-switch-state-open-close = You switch the remote to open and close doors +door-remote-switch-state-toggle-bolts = You switch the remote to toggle bolts +door-remote-switch-state-toggle-emergency-access = You switch the remote to toggle emergency access diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml b/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml index 320724e9e5..e7d2aed8f3 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml @@ -25,6 +25,7 @@ prob: 1 - id: CigPackGreen prob: 0.50 + - id: DoorRemoteCargo - type: entity id: LockerCaptainFilled @@ -63,6 +64,7 @@ - id: CigarGoldCase prob: 0.25 - id: ClothingBeltSheathFilled + - id: DoorRemoteCommand - type: entity id: LockerHeadOfPersonnelFilled @@ -94,6 +96,7 @@ - id: CigarGoldCase prob: 0.10 # Fuck the HoP they don't deserve fucking cigars. + - id: DoorRemoteService - type: entity id: LockerChiefEngineerFilled @@ -114,6 +117,7 @@ - id: ClothingHandsGlovesColorYellow - id: CigarCase prob: 0.15 + - id: DoorRemoteEngineering - type: entity id: LockerChiefMedicalOfficerFilled @@ -135,6 +139,7 @@ - id: ClothingOuterHardsuitMedical - id: Hypospray - id: HandheldCrewMonitor + - id: DoorRemoteMedical - type: entity id: LockerResearchDirectorFilled @@ -157,6 +162,7 @@ prob: 1 - id: PlushieSlime prob: 0.1 + - id: DoorRemoteResearch - type: entity id: LockerHeadOfSecurityFilled @@ -205,3 +211,4 @@ prob: 1 - id: CigarGoldCase prob: 0.50 + - id: DoorRemoteSecurity diff --git a/Resources/Prototypes/Entities/Objects/Devices/door_remote.yml b/Resources/Prototypes/Entities/Objects/Devices/door_remote.yml new file mode 100644 index 0000000000..1be90036ac --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Devices/door_remote.yml @@ -0,0 +1,137 @@ +- type: entity + parent: BaseItem + id: DoorRemoteDefault + name: door remote + description: A gadget which can open and bolt doors remotely + abstract: true + components: + - type: Sprite + sprite: Objects/Devices/door_remote.rsi + netsync: false + - type: Access + - type: DoorRemote + +- type: entity + parent: DoorRemoteDefault + id: DoorRemoteCommand + name: command door remote + components: + - type: Sprite + layers: + - state: door_remotebase + - state: door_remotelightscolour + color: "#e6e600" + - state: door_remotescreencolour + color: "#9f9f00" + - type: Access + tags: + - Captain + - HeadOfPersonnel + - Command + +- type: entity + parent: DoorRemoteDefault + id: DoorRemoteSecurity + name: security door remote + components: + - type: Sprite + layers: + - state: door_remotebase + - state: door_remotelightscolour + color: "#cb0000" + - state: door_remotescreencolour + color: "#830000" + - type: Access + tags: + - HeadOfSecurity + - Security + +- type: entity + parent: DoorRemoteDefault + id: DoorRemoteService + name: service door remote + components: + - type: Sprite + layers: + - state: door_remotebase + - state: door_remotelightscolour + color: "#58c800" + - state: door_remotescreencolour + color: "#3a7231" + - type: Access + tags: + - HeadOfPersonnel + - Service + - Bar + - Janitor + - Theatre + - Kitchen + - Hydroponics + +- type: entity + parent: DoorRemoteDefault + id: DoorRemoteResearch + name: research door remote + components: + - type: Sprite + layers: + - state: door_remotebase + - state: door_remotelightscolour + color: "#a53aaa" + - state: door_remotescreencolour + color: "#652368" + - type: Access + tags: + - ResearchDirector + - Research + +- type: entity + parent: DoorRemoteDefault + id: DoorRemoteCargo + name: cargo door remote + components: + - type: Sprite + layers: + - state: door_remotebase + - state: door_remotelightscolour + color: "#b18644" + - state: door_remotescreencolour + color: "#5b4523" + - type: Access + tags: + - Cargo + - Quartermaster + +- type: entity + parent: DoorRemoteDefault + id: DoorRemoteMedical + name: medical door remote + components: + - type: Sprite + layers: + - state: door_remotebase + - state: door_remotelightscolour + color: "#68aed6" + - state: door_remotescreencolour + color: "#325f7a" + - type: Access + tags: + - Medical + - ChiefMedicalOfficer + +- type: entity + parent: DoorRemoteDefault + id: DoorRemoteEngineering + name: engineering door remote + components: + - type: Sprite + layers: + - state: door_remotebase + - state: door_remotelightscolour + color: "#ffa62b" + - state: door_remotescreencolour + color: "#bc5b00" + - type: Access + tags: + - ChiefEngineer + - Engineering diff --git a/Resources/Textures/Objects/Devices/door_remote.rsi/door_remotebase.png b/Resources/Textures/Objects/Devices/door_remote.rsi/door_remotebase.png new file mode 100644 index 0000000000000000000000000000000000000000..d9aee6992a4a55507d87de9458f0cbdaaaf1a4d2 GIT binary patch literal 5456 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 K57`$SpYt2SwpQW* literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Devices/door_remote.rsi/meta.json b/Resources/Textures/Objects/Devices/door_remote.rsi/meta.json new file mode 100644 index 0000000000..ffb1be00d3 --- /dev/null +++ b/Resources/Textures/Objects/Devices/door_remote.rsi/meta.json @@ -0,0 +1,20 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Command remote copied from tgstation, rest are recolors", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "door_remotebase" + }, + { + "name": "door_remotelightscolour" + }, + { + "name": "door_remotescreencolour" + } + ] +}