Adding an AccessReader to a particle accelerator with engineering access (#30394)

Adding an AccessReader to a particle accelerator
This commit is contained in:
chavonadelal
2024-07-30 14:29:32 +03:00
committed by GitHub
parent 89b8ec713a
commit 0b95de1efc
2 changed files with 16 additions and 3 deletions

View File

@@ -3,6 +3,7 @@ using Content.Client.Message;
using Content.Client.Resources; using Content.Client.Resources;
using Content.Client.UserInterface.Controls; using Content.Client.UserInterface.Controls;
using Content.Shared.Singularity.Components; using Content.Shared.Singularity.Components;
using Content.Shared.Access.Systems;
using Robust.Client.Animations; using Robust.Client.Animations;
using Robust.Client.AutoGenerated; using Robust.Client.AutoGenerated;
using Robust.Client.Graphics; using Robust.Client.Graphics;
@@ -13,6 +14,7 @@ using Robust.Client.UserInterface.XAML;
using Robust.Shared.Noise; using Robust.Shared.Noise;
using Robust.Shared.Prototypes; using Robust.Shared.Prototypes;
using Robust.Shared.Timing; using Robust.Shared.Timing;
using Robust.Client.Player;
namespace Content.Client.ParticleAccelerator.UI; namespace Content.Client.ParticleAccelerator.UI;
@@ -21,6 +23,11 @@ public sealed partial class ParticleAcceleratorControlMenu : FancyWindow
{ {
[Dependency] private readonly IResourceCache _cache = default!; [Dependency] private readonly IResourceCache _cache = default!;
[Dependency] private readonly IEntityManager _entityManager = default!;
[Dependency] private readonly IPlayerManager _player = default!;
private readonly AccessReaderSystem _accessReader;
private readonly FastNoiseLite _drawNoiseGenerator; private readonly FastNoiseLite _drawNoiseGenerator;
private readonly Animation _alarmControlAnimation; private readonly Animation _alarmControlAnimation;
@@ -44,6 +51,7 @@ public sealed partial class ParticleAcceleratorControlMenu : FancyWindow
RobustXamlLoader.Load(this); RobustXamlLoader.Load(this);
IoCManager.InjectDependencies(this); IoCManager.InjectDependencies(this);
_accessReader = _entityManager.System<AccessReaderSystem>();
_drawNoiseGenerator = new(); _drawNoiseGenerator = new();
_drawNoiseGenerator.SetFractalType(FastNoiseLite.FractalType.FBm); _drawNoiseGenerator.SetFractalType(FastNoiseLite.FractalType.FBm);
_drawNoiseGenerator.SetFrequency(0.5f); _drawNoiseGenerator.SetFrequency(0.5f);
@@ -150,7 +158,7 @@ public sealed partial class ParticleAcceleratorControlMenu : FancyWindow
private bool StrengthSpinBoxValid(int n) private bool StrengthSpinBoxValid(int n)
{ {
return n >= 0 && n <= _maxStrength ; return n >= 0 && n <= _maxStrength;
} }
protected override DragMode GetDragModeFor(Vector2 relativeMousePos) protected override DragMode GetDragModeFor(Vector2 relativeMousePos)
@@ -201,13 +209,16 @@ public sealed partial class ParticleAcceleratorControlMenu : FancyWindow
private void UpdateUI(bool assembled, bool blocked, bool enabled, bool powerBlock) private void UpdateUI(bool assembled, bool blocked, bool enabled, bool powerBlock)
{ {
bool hasAccess = _player.LocalSession?.AttachedEntity is {} player
&& _accessReader.IsAllowed(player, _entity);
OnButton.Pressed = enabled; OnButton.Pressed = enabled;
OffButton.Pressed = !enabled; OffButton.Pressed = !enabled;
var cantUse = !assembled || blocked || powerBlock; var cantUse = !assembled || blocked || powerBlock || !hasAccess;
OnButton.Disabled = cantUse; OnButton.Disabled = cantUse;
OffButton.Disabled = cantUse; OffButton.Disabled = cantUse;
ScanButton.Disabled = blocked; ScanButton.Disabled = blocked || !hasAccess;
var cantChangeLevel = !assembled || blocked || !enabled || cantUse; var cantChangeLevel = !assembled || blocked || !enabled || cantUse;
StateSpinBox.SetButtonDisabled(cantChangeLevel); StateSpinBox.SetButtonDisabled(cantChangeLevel);

View File

@@ -25,6 +25,8 @@
- type: Wires - type: Wires
boardName: wires-board-name-pa boardName: wires-board-name-pa
layoutId: ParticleAccelerator layoutId: ParticleAccelerator
- type: AccessReader
access: [["Engineering"]]
# Unfinished # Unfinished