Predict ActivatableUIRequiresPower (#28405)

A lot of BUIs aren't going to handle the state coming in cleanly but we can fix em as we find em.

(cherry picked from commit e4a5f2a1450d226bf281e46f1323f41213707bb6)
This commit is contained in:
metalgearsloth
2024-05-30 10:32:16 +03:00
committed by Spatison
parent bf1995c862
commit eb84ecc7d9
4 changed files with 57 additions and 18 deletions

View File

@@ -1,21 +1,27 @@
using Content.Client.Power.EntitySystems;
using Content.Shared.Popups;
using Content.Shared.Power.Components;
using Content.Shared.Power.EntitySystems;
using Content.Shared.UserInterface;
using Content.Shared.Wires;
namespace Content.Client.Power;
public sealed class ActivatableUIRequiresPowerSystem : EntitySystem
public sealed class ActivatableUIRequiresPowerSystem : SharedActivatableUIRequiresPowerSystem
{
public override void Initialize()
{
base.Initialize();
[Dependency] private readonly SharedPopupSystem _popup = default!;
SubscribeLocalEvent<ActivatableUIRequiresPowerComponent, ActivatableUIOpenAttemptEvent>(OnActivate);
}
private void OnActivate(EntityUid uid, ActivatableUIRequiresPowerComponent component, ActivatableUIOpenAttemptEvent args)
protected override void OnActivate(Entity<ActivatableUIRequiresPowerComponent> ent, ref ActivatableUIOpenAttemptEvent args)
{
// Client can't predict the power properly at the moment so rely upon the server to do it.
if (args.Cancelled || this.IsPowered(ent.Owner, EntityManager))
{
return;
}
if (TryComp<WiresPanelComponent>(ent.Owner, out var panel) && panel.Open)
return;
_popup.PopupClient(Loc.GetString("base-computer-ui-component-not-powered", ("machine", ent.Owner)), args.User, args.User);
args.Cancel();
}
}