BUI bugfixes / improvements (#23881)
* Fix ActivatableUIRequiresPowerCellComponent stopping power draw when one of two people closes the UI. Also fixes it to check UiKey properly. * Remove unnecessary CrewManifestViewer on PDAs This is for a pop-up crew manifest UI, which the PDA doesn't use. * Fix BoundUIClosedEvents that didn't check UI key/not correctly at least. Uses the new helper method in engine. * Fix drone (cargo shuttle) pilot console UI breaking if two people open it and one person closes it. * Fixes for disposal router/tagger UI. Code was badly copy pasted without changing identifiers, never worked. Also cleaned up some of the logic (text trimming, sounds). Also removed the "refuse to work if you have something in your active hand" check like why. * Avoid running most ActivatableUIComponent logic when closing a UI via toggle Activating the UI while it's already open closes it via toggle. Except it still ran 99% of the "attempting to open" logic which makes no sense. This probably fixes a bug or some other dumb behavior somewhere. * Bitch
This commit is contained in:
committed by
GitHub
parent
b51d69184e
commit
123a4147de
@@ -58,22 +58,26 @@ namespace Content.Server.Disposal.Tube
|
||||
SubscribeLocalEvent<DisposalJunctionComponent, GetDisposalsConnectableDirectionsEvent>(OnGetJunctionConnectableDirections);
|
||||
SubscribeLocalEvent<DisposalJunctionComponent, GetDisposalsNextDirectionEvent>(OnGetJunctionNextDirection);
|
||||
|
||||
SubscribeLocalEvent<DisposalRouterComponent, ComponentRemove>(OnComponentRemove);
|
||||
SubscribeLocalEvent<DisposalRouterComponent, GetDisposalsConnectableDirectionsEvent>(OnGetRouterConnectableDirections);
|
||||
SubscribeLocalEvent<DisposalRouterComponent, GetDisposalsNextDirectionEvent>(OnGetRouterNextDirection);
|
||||
|
||||
SubscribeLocalEvent<DisposalTransitComponent, GetDisposalsConnectableDirectionsEvent>(OnGetTransitConnectableDirections);
|
||||
SubscribeLocalEvent<DisposalTransitComponent, GetDisposalsNextDirectionEvent>(OnGetTransitNextDirection);
|
||||
|
||||
SubscribeLocalEvent<DisposalTaggerComponent, ComponentRemove>(OnComponentRemove);
|
||||
SubscribeLocalEvent<DisposalTaggerComponent, GetDisposalsConnectableDirectionsEvent>(OnGetTaggerConnectableDirections);
|
||||
SubscribeLocalEvent<DisposalTaggerComponent, GetDisposalsNextDirectionEvent>(OnGetTaggerNextDirection);
|
||||
|
||||
SubscribeLocalEvent<DisposalRouterComponent, ActivatableUIOpenAttemptEvent>(OnOpenRouterUIAttempt);
|
||||
SubscribeLocalEvent<DisposalTaggerComponent, ActivatableUIOpenAttemptEvent>(OnOpenTaggerUIAttempt);
|
||||
Subs.BuiEvents<DisposalRouterComponent>(DisposalRouterUiKey.Key, subs =>
|
||||
{
|
||||
subs.Event<BoundUIOpenedEvent>(OnOpenRouterUI);
|
||||
subs.Event<SharedDisposalRouterComponent.UiActionMessage>(OnUiAction);
|
||||
});
|
||||
|
||||
SubscribeLocalEvent<DisposalRouterComponent, SharedDisposalRouterComponent.UiActionMessage>(OnUiAction);
|
||||
SubscribeLocalEvent<DisposalTaggerComponent, SharedDisposalTaggerComponent.UiActionMessage>(OnUiAction);
|
||||
Subs.BuiEvents<DisposalTaggerComponent>(DisposalTaggerUiKey.Key, subs =>
|
||||
{
|
||||
subs.Event<BoundUIOpenedEvent>(OnOpenTaggerUI);
|
||||
subs.Event<SharedDisposalTaggerComponent.UiActionMessage>(OnUiAction);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -84,15 +88,13 @@ namespace Content.Server.Disposal.Tube
|
||||
/// <param name="msg">A user interface message from the client.</param>
|
||||
private void OnUiAction(EntityUid uid, DisposalTaggerComponent tagger, SharedDisposalTaggerComponent.UiActionMessage msg)
|
||||
{
|
||||
if (!DisposalTaggerUiKey.Key.Equals(msg.UiKey))
|
||||
return;
|
||||
if (TryComp<PhysicsComponent>(uid, out var physBody) && physBody.BodyType != BodyType.Static)
|
||||
return;
|
||||
|
||||
//Check for correct message and ignore maleformed strings
|
||||
if (msg.Action == SharedDisposalTaggerComponent.UiAction.Ok && SharedDisposalTaggerComponent.TagRegex.IsMatch(msg.Tag))
|
||||
{
|
||||
tagger.Tag = msg.Tag;
|
||||
tagger.Tag = msg.Tag.Trim();
|
||||
_audioSystem.PlayPvs(tagger.ClickSound, uid, AudioParams.Default.WithVolume(-2f));
|
||||
}
|
||||
}
|
||||
@@ -105,8 +107,6 @@ namespace Content.Server.Disposal.Tube
|
||||
/// <param name="msg">A user interface message from the client.</param>
|
||||
private void OnUiAction(EntityUid uid, DisposalRouterComponent router, SharedDisposalRouterComponent.UiActionMessage msg)
|
||||
{
|
||||
if (!DisposalRouterUiKey.Key.Equals(msg.UiKey))
|
||||
return;
|
||||
if (!EntityManager.EntityExists(msg.Session.AttachedEntity))
|
||||
return;
|
||||
if (TryComp<PhysicsComponent>(uid, out var physBody) && physBody.BodyType != BodyType.Static)
|
||||
@@ -118,9 +118,14 @@ namespace Content.Server.Disposal.Tube
|
||||
router.Tags.Clear();
|
||||
foreach (var tag in msg.Tags.Split(',', StringSplitOptions.RemoveEmptyEntries))
|
||||
{
|
||||
var trimmed = tag.Trim();
|
||||
if (trimmed == "")
|
||||
continue;
|
||||
|
||||
router.Tags.Add(tag.Trim());
|
||||
_audioSystem.PlayPvs(router.ClickSound, uid, AudioParams.Default.WithVolume(-2f));
|
||||
}
|
||||
|
||||
_audioSystem.PlayPvs(router.ClickSound, uid, AudioParams.Default.WithVolume(-2f));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -134,16 +139,6 @@ namespace Content.Server.Disposal.Tube
|
||||
DisconnectTube(uid, tube);
|
||||
}
|
||||
|
||||
private void OnComponentRemove(EntityUid uid, DisposalTaggerComponent tagger, ComponentRemove args)
|
||||
{
|
||||
_uiSystem.TryCloseAll(uid, DisposalTaggerUiKey.Key);
|
||||
}
|
||||
|
||||
private void OnComponentRemove(EntityUid uid, DisposalRouterComponent tagger, ComponentRemove args)
|
||||
{
|
||||
_uiSystem.TryCloseAll(uid, DisposalRouterUiKey.Key);
|
||||
}
|
||||
|
||||
private void OnGetBendConnectableDirections(EntityUid uid, DisposalBendComponent component, ref GetDisposalsConnectableDirectionsEvent args)
|
||||
{
|
||||
var direction = Transform(uid).LocalRotation;
|
||||
@@ -283,40 +278,18 @@ namespace Content.Server.Disposal.Tube
|
||||
DisconnectTube(uid, component);
|
||||
}
|
||||
|
||||
private void OnOpenRouterUIAttempt(EntityUid uid, DisposalRouterComponent router, ActivatableUIOpenAttemptEvent args)
|
||||
private void OnOpenRouterUI(EntityUid uid, DisposalRouterComponent router, BoundUIOpenedEvent args)
|
||||
{
|
||||
if (!TryComp<HandsComponent>(args.User, out var hands))
|
||||
{
|
||||
_popups.PopupClient(Loc.GetString("disposal-router-window-tag-input-activate-no-hands"), uid, args.User);
|
||||
return;
|
||||
}
|
||||
|
||||
var activeHandEntity = hands.ActiveHandEntity;
|
||||
if (activeHandEntity != null)
|
||||
{
|
||||
args.Cancel();
|
||||
}
|
||||
|
||||
UpdateRouterUserInterface(uid, router);
|
||||
}
|
||||
|
||||
private void OnOpenTaggerUIAttempt(EntityUid uid, DisposalTaggerComponent tagger, ActivatableUIOpenAttemptEvent args)
|
||||
private void OnOpenTaggerUI(EntityUid uid, DisposalTaggerComponent tagger, BoundUIOpenedEvent args)
|
||||
{
|
||||
if (!TryComp<HandsComponent>(args.User, out var hands))
|
||||
{
|
||||
_popups.PopupClient(Loc.GetString("disposal-tagger-window-activate-no-hands"), uid, args.User);
|
||||
return;
|
||||
}
|
||||
|
||||
var activeHandEntity = hands.ActiveHandEntity;
|
||||
if (activeHandEntity != null)
|
||||
{
|
||||
args.Cancel();
|
||||
}
|
||||
|
||||
if (_uiSystem.TryGetUi(uid, DisposalTaggerUiKey.Key, out var bui))
|
||||
{
|
||||
_uiSystem.SetUiState(bui,
|
||||
new DisposalTaggerUserInterfaceState(tagger.Tag));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -325,11 +298,13 @@ namespace Content.Server.Disposal.Tube
|
||||
/// <returns>Returns a <see cref="SharedDisposalRouterComponent.DisposalRouterUserInterfaceState"/></returns>
|
||||
private void UpdateRouterUserInterface(EntityUid uid, DisposalRouterComponent router)
|
||||
{
|
||||
var bui = _uiSystem.GetUiOrNull(uid, DisposalTaggerUiKey.Key);
|
||||
var bui = _uiSystem.GetUiOrNull(uid, DisposalRouterUiKey.Key);
|
||||
if (bui == null)
|
||||
return;
|
||||
|
||||
if (router.Tags.Count <= 0)
|
||||
{
|
||||
if (bui is not null)
|
||||
_uiSystem.SetUiState(bui, new DisposalTaggerUserInterfaceState(""));
|
||||
_uiSystem.SetUiState(bui, new DisposalRouterUserInterfaceState(""));
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -343,8 +318,7 @@ namespace Content.Server.Disposal.Tube
|
||||
|
||||
taglist.Remove(taglist.Length - 2, 2);
|
||||
|
||||
if (bui is not null)
|
||||
_uiSystem.SetUiState(bui, new DisposalTaggerUserInterfaceState(taglist.ToString()));
|
||||
_uiSystem.SetUiState(bui, new DisposalRouterUserInterfaceState(taglist.ToString()));
|
||||
}
|
||||
|
||||
private void OnAnchorChange(EntityUid uid, DisposalTubeComponent component, ref AnchorStateChangedEvent args)
|
||||
|
||||
Reference in New Issue
Block a user