-
Notifications
You must be signed in to change notification settings - Fork 187
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Mirror: Door Remote Now Shows Mode in UI (#293)
## Mirror of PR #26162: [Door Remote now shows Mode in UI](space-wizards/space-station-14#26162) from <img src="https://avatars.githubusercontent.com/u/10567778?v=4" alt="space-wizards" width="22"/> [space-wizards](https://github.com/space-wizards)/[space-station-14](https://github.com/space-wizards/space-station-14) ###### `e627a0d24bc8ae89665feb0b0d519b5fbb77ce32` PR opened by <img src="https://avatars.githubusercontent.com/u/58439124?v=4" width="16"/><a href="https://github.com/Plykiya"> Plykiya</a> at 2024-03-15 23:14:52 UTC --- PR changed 7 files with 151 additions and 67 deletions. The PR had the following labels: - Status: Awaiting Changes --- <details open="true"><summary><h1>Original Body</h1></summary> > <!-- Please read these guidelines before opening your PR: https://docs.spacestation14.io/en/getting-started/pr-guideline --> > <!-- The text between the arrows are comments - they will not be visible on your PR. --> > > ## About the PR > <!-- What did you change in this PR? --> > Changed the door remote to show what mode it's in on the UI so you don't have to toggle it to figure out if you're bolting a door or setting it to emergency access... > > ## Why / Balance > <!-- Why was it changed? Link any discussions or issues here. Please discuss how this would affect game balance. --> > There is no indicator and it's awkward to set a door to emergency access instead of bolting it against nukies. > > ## Technical details > <!-- If this is a code change, summarize at high level how your new code works. This makes it easier to review. --> > - Split DoorRemoteSystem into Shared/Server/Client from just Server > - Added door remote status control that updates itself on first pickup and then whenever the mode is toggled > - Got rid of the custom "ShowPopupToUser" function that the DoorRemote used to have in favor of PopupClient/PopupEntity > - Created new Door Remote locale messages. > > The only problem I have with my code change is that I created a shitty fourth placeholder enum so that I could check for a difference on initial pickup with PrevOperatingMode. Without it, the mode string only appears on pickup for 2/3 options instead of 3/3 options because the default PrevOperatingMode would end up matching the current Mode the door remote is set to, thus not updating the UI. Would love a better implementation suggestion for that... > > ## Media > <!-- > PRs which make ingame changes (adding clothing, items, new features, etc) are required to have media attached that showcase the changes. > Small fixes/refactors are exempt. > Any media may be used in SS14 progress reports, with clear credit given. > > If you're unsure whether your PR will require media, ask a maintainer. > > Check the box below to confirm that you have in fact seen this (put an X in the brackets, like [X]): > --> > > - [ X ] I have added screenshots/videos to this PR showcasing its changes ingame, **or** this PR does not require an ingame showcase > > https://github.com/space-wizards/space-station-14/assets/58439124/733eb78a-d1a6-4678-a325-9fda8dc1a4c8 > > > > ## Breaking changes > <!-- > List any breaking changes, including namespace, public class/method/field changes, prototype renames; and provide instructions for fixing them. This will be pasted in #codebase-changes. > --> > DoorRemoteComponent moved from Content.Server.Remotes to Content.Shared.Remotes.Components, DoorRemoteSystem OnInHandActivation changed from Public to Private, DoorRemoteSystem moved from Content.Server to Content.Shared, DoorRemoteSystem is now SharedDoorRemoteSystem > > **Changelog** > <!-- > Make players aware of new features and changes that could affect how they play the game by adding a Changelog entry. Please read the Changelog guidelines located at: https://docs.spacestation14.io/en/getting-started/pr-guideline#changelog > --> > > <!-- > Make sure to take this Changelog template out of the comment block in order for it to show up. > 🆑 > - add: Added fun! > - remove: Removed fun! > - tweak: Changed fun! > - fix: Fixed fun! > --> > 🆑 > - add: Door remote UI now shows the mode it is in. > </details> Signed-off-by: VMSolidus <[email protected]> Co-authored-by: SimpleStation14 <Unknown> Co-authored-by: VMSolidus <[email protected]>
- Loading branch information
1 parent
399bd96
commit 8926496
Showing
7 changed files
with
152 additions
and
65 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
using Content.Client.Remote.UI; | ||
using Content.Client.Items; | ||
using Content.Shared.Remotes.EntitySystems; | ||
using Content.Shared.Remotes.Components; | ||
|
||
namespace Content.Client.Remotes.EntitySystems; | ||
|
||
public sealed class DoorRemoteSystem : SharedDoorRemoteSystem | ||
{ | ||
public override void Initialize() | ||
{ | ||
base.Initialize(); | ||
|
||
Subs.ItemStatus<DoorRemoteComponent>(ent => new DoorRemoteStatusControl(ent)); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
using Content.Client.Message; | ||
using Content.Client.Stylesheets; | ||
using Content.Shared.Remotes.Components; | ||
using Robust.Client.UserInterface; | ||
using Robust.Client.UserInterface.Controls; | ||
using Robust.Shared.Timing; | ||
|
||
namespace Content.Client.Remote.UI; | ||
|
||
public sealed class DoorRemoteStatusControl : Control | ||
{ | ||
private readonly Entity<DoorRemoteComponent> _entity; | ||
private readonly RichTextLabel _label; | ||
|
||
// set to toggle bolts initially just so that it updates on first pickup of remote | ||
private OperatingMode PrevOperatingMode = OperatingMode.placeholderForUiUpdates; | ||
|
||
public DoorRemoteStatusControl(Entity<DoorRemoteComponent> entity) | ||
{ | ||
_entity = entity; | ||
_label = new RichTextLabel { StyleClasses = { StyleNano.StyleClassItemStatus } }; | ||
AddChild(_label); | ||
} | ||
|
||
protected override void FrameUpdate(FrameEventArgs args) | ||
{ | ||
base.FrameUpdate(args); | ||
|
||
// only updates the UI if any of the details are different than they previously were | ||
if (PrevOperatingMode == _entity.Comp.Mode) | ||
return; | ||
|
||
PrevOperatingMode = _entity.Comp.Mode; | ||
|
||
// Update current volume and injector state | ||
var modeStringLocalized = Loc.GetString(_entity.Comp.Mode switch | ||
{ | ||
OperatingMode.OpenClose => "door-remote-open-close-text", | ||
OperatingMode.ToggleBolts => "door-remote-toggle-bolt-text", | ||
OperatingMode.ToggleEmergencyAccess => "door-remote-emergency-access-text", | ||
_ => "door-remote-invalid-text" | ||
}); | ||
|
||
_label.SetMarkup(Loc.GetString("door-remote-mode-label", ("modeString", modeStringLocalized))); | ||
} | ||
} |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
using Robust.Shared.GameStates; | ||
|
||
namespace Content.Shared.Remotes.Components; | ||
|
||
[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] | ||
public sealed partial class DoorRemoteComponent : Component | ||
{ | ||
[AutoNetworkedField] | ||
[DataField] | ||
public OperatingMode Mode = OperatingMode.OpenClose; | ||
} | ||
|
||
public enum OperatingMode : byte | ||
{ | ||
OpenClose, | ||
ToggleBolts, | ||
ToggleEmergencyAccess, | ||
placeholderForUiUpdates | ||
} |
47 changes: 47 additions & 0 deletions
47
Content.Shared/Remotes/EntitySystems/SharedDoorRemoteSystem.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
using Content.Shared.Interaction; | ||
using Content.Shared.Popups; | ||
using Content.Shared.Interaction.Events; | ||
using Content.Shared.Remotes.Components; | ||
|
||
namespace Content.Shared.Remotes.EntitySystems; | ||
|
||
public abstract class SharedDoorRemoteSystem : EntitySystem | ||
{ | ||
[Dependency] protected readonly SharedPopupSystem Popup = default!; | ||
[Dependency] private readonly SharedInteractionSystem _interactionSystem = default!; | ||
// I'm so sorry [Dependency] private readonly SharedAirlockSystem _sharedAirlockSystem = default!; | ||
|
||
public override void Initialize() | ||
{ | ||
SubscribeLocalEvent<DoorRemoteComponent, UseInHandEvent>(OnInHandActivation); | ||
} | ||
|
||
private void OnInHandActivation(Entity<DoorRemoteComponent> entity, ref UseInHandEvent args) | ||
{ | ||
string switchMessageId; | ||
switch (entity.Comp.Mode) | ||
{ | ||
case OperatingMode.OpenClose: | ||
entity.Comp.Mode = OperatingMode.ToggleBolts; | ||
switchMessageId = "door-remote-switch-state-toggle-bolts"; | ||
break; | ||
|
||
// Skip toggle bolts mode and move on from there (to emergency access) | ||
case OperatingMode.ToggleBolts: | ||
entity.Comp.Mode = OperatingMode.ToggleEmergencyAccess; | ||
switchMessageId = "door-remote-switch-state-toggle-emergency-access"; | ||
break; | ||
|
||
// Skip ToggleEmergencyAccess mode and move on from there (to door toggle) | ||
case OperatingMode.ToggleEmergencyAccess: | ||
entity.Comp.Mode = OperatingMode.OpenClose; | ||
switchMessageId = "door-remote-switch-state-open-close"; | ||
break; | ||
default: | ||
throw new InvalidOperationException( | ||
$"{nameof(DoorRemoteComponent)} had invalid mode {entity.Comp.Mode}"); | ||
} | ||
Dirty(entity); | ||
Popup.PopupClient(Loc.GetString(switchMessageId), entity, args.User); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters