-using Content.Client.Power.APC.UI;
+using Content.Client.Power.APC.UI;
+using Content.Shared.Access.Systems;
using Content.Shared.APC;
using JetBrains.Annotations;
-using Robust.Client.GameObjects;
using Robust.Client.UserInterface;
+using Robust.Shared.Player;
namespace Content.Client.Power.APC
{
_menu = this.CreateWindow<ApcMenu>();
_menu.SetEntity(Owner);
_menu.OnBreaker += BreakerPressed;
+
+ var hasAccess = false;
+ if (PlayerManager.LocalEntity != null)
+ {
+ var accessReader = EntMan.System<AccessReaderSystem>();
+ hasAccess = accessReader.IsAllowed((EntityUid)PlayerManager.LocalEntity, Owner);
+ }
+ _menu?.SetAccessEnabled(hasAccess);
}
protected override void UpdateState(BoundUserInterfaceState state)
-using Robust.Client.AutoGenerated;
+using Robust.Client.AutoGenerated;
using Robust.Client.UserInterface.XAML;
using Robust.Client.GameObjects;
using Robust.Shared.IoC;
{
var castState = (ApcBoundInterfaceState) state;
- if (BreakerButton != null)
+ if (!BreakerButton.Disabled)
{
- if(castState.HasAccess == false)
- {
- BreakerButton.Disabled = true;
- BreakerButton.ToolTip = Loc.GetString("apc-component-insufficient-access");
- }
- else
- {
- BreakerButton.Disabled = false;
- BreakerButton.ToolTip = null;
- BreakerButton.Pressed = castState.MainBreaker;
- }
+ BreakerButton.Pressed = castState.MainBreaker;
}
if (PowerLabel != null)
}
}
+ public void SetAccessEnabled(bool hasAccess)
+ {
+ if(hasAccess)
+ {
+ BreakerButton.Disabled = false;
+ BreakerButton.ToolTip = null;
+ }
+ else
+ {
+ BreakerButton.Disabled = true;
+ BreakerButton.ToolTip = Loc.GetString("apc-component-insufficient-access");
+ }
+ }
+
private void UpdateChargeBarColor(float charge)
{
if (ChargeBar == null)
[DataField("enabled")]
public bool MainBreakerEnabled = true;
- // TODO: remove this since it probably breaks when 2 people use it
- [DataField("hasAccess")]
- public bool HasAccess = false;
/// <summary>
/// APC state needs to always be updated after first processing tick.
using Content.Server.Popups;
using Content.Server.Power.Components;
using Content.Server.Power.Pow3r;
-using Content.Shared.Access.Components;
using Content.Shared.Access.Systems;
using Content.Shared.APC;
using Content.Shared.Emag.Components;
component.NeedStateUpdate = true;
}
- //Update the HasAccess var for UI to read
private void OnBoundUiOpen(EntityUid uid, ApcComponent component, BoundUIOpenedEvent args)
{
- // TODO: this should be per-player not stored on the apc
- component.HasAccess = _accessReader.IsAllowed(args.Actor, uid);
UpdateApcState(uid, component);
}
// TODO: Fix ContentHelpers or make a new one coz this is cooked.
var charge = ContentHelpers.RoundToNearestLevels(battery.CurrentStorage / battery.Capacity, 1.0, 100 / ChargeAccuracy) / 100f * ChargeAccuracy;
- var state = new ApcBoundInterfaceState(apc.MainBreakerEnabled, apc.HasAccess,
+ var state = new ApcBoundInterfaceState(apc.MainBreakerEnabled,
(int) MathF.Ceiling(battery.CurrentSupply), apc.LastExternalState,
charge);
public sealed class ApcBoundInterfaceState : BoundUserInterfaceState, IEquatable<ApcBoundInterfaceState>
{
public readonly bool MainBreaker;
- public readonly bool HasAccess;
public readonly int Power;
public readonly ApcExternalPowerState ApcExternalPower;
public readonly float Charge;
- public ApcBoundInterfaceState(bool mainBreaker, bool hasAccess, int power, ApcExternalPowerState apcExternalPower, float charge)
+ public ApcBoundInterfaceState(bool mainBreaker, int power, ApcExternalPowerState apcExternalPower, float charge)
{
MainBreaker = mainBreaker;
- HasAccess = hasAccess;
Power = power;
ApcExternalPower = apcExternalPower;
Charge = charge;
if (ReferenceEquals(null, other)) return false;
if (ReferenceEquals(this, other)) return true;
return MainBreaker == other.MainBreaker &&
- HasAccess == other.HasAccess &&
Power == other.Power &&
ApcExternalPower == other.ApcExternalPower &&
MathHelper.CloseTo(Charge, other.Charge);
public override int GetHashCode()
{
- return HashCode.Combine(MainBreaker, HasAccess, Power, (int) ApcExternalPower, Charge);
+ return HashCode.Combine(MainBreaker, Power, (int) ApcExternalPower, Charge);
}
}
type: ApcBoundUserInterface
- type: ActivatableUI
inHandsOnly: false
- singleUser: true
key: enum.ApcUiKey.Key
- type: Construction
graph: APC