Make storage UI close upon being locked (#27810)
* make storage close on lock * formatting and comments * Update Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs Co-authored-by: ShadowCommander <shadowjjt@gmail.com> * Apply suggestions from code review Co-authored-by: ShadowCommander <shadowjjt@gmail.com> * Swap to foreach instead of for Co-authored-by: Kara <lunarautomaton6@gmail.com> --------- Co-authored-by: ShadowCommander <shadowjjt@gmail.com> Co-authored-by: Kara <lunarautomaton6@gmail.com>
This commit is contained in:
@@ -109,6 +109,7 @@ public abstract class SharedStorageSystem : EntitySystem
|
|||||||
SubscribeLocalEvent<StorageComponent, AfterInteractEvent>(AfterInteract);
|
SubscribeLocalEvent<StorageComponent, AfterInteractEvent>(AfterInteract);
|
||||||
SubscribeLocalEvent<StorageComponent, DestructionEventArgs>(OnDestroy);
|
SubscribeLocalEvent<StorageComponent, DestructionEventArgs>(OnDestroy);
|
||||||
SubscribeLocalEvent<StorageComponent, BoundUIOpenedEvent>(OnBoundUIOpen);
|
SubscribeLocalEvent<StorageComponent, BoundUIOpenedEvent>(OnBoundUIOpen);
|
||||||
|
SubscribeLocalEvent<StorageComponent, LockToggledEvent>(OnLockToggled);
|
||||||
SubscribeLocalEvent<MetaDataComponent, StackCountChangedEvent>(OnStackCountChanged);
|
SubscribeLocalEvent<MetaDataComponent, StackCountChangedEvent>(OnStackCountChanged);
|
||||||
|
|
||||||
SubscribeLocalEvent<StorageComponent, EntInsertedIntoContainerMessage>(OnEntInserted);
|
SubscribeLocalEvent<StorageComponent, EntInsertedIntoContainerMessage>(OnEntInserted);
|
||||||
@@ -1401,6 +1402,25 @@ public abstract class SharedStorageSystem : EntitySystem
|
|||||||
return _nextSmallest[item.Size];
|
return _nextSmallest[item.Size];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Checks if a storage's UI is open by anyone when locked, and closes it unless they're an admin.
|
||||||
|
/// </summary>
|
||||||
|
private void OnLockToggled(EntityUid uid, StorageComponent component, ref LockToggledEvent args)
|
||||||
|
{
|
||||||
|
if (!args.Locked)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// Gets everyone looking at the UI
|
||||||
|
foreach (var actor in _ui.GetActors(uid, StorageComponent.StorageUiKey.Key))
|
||||||
|
{
|
||||||
|
if (_admin.HasAdminFlag(actor, AdminFlags.Admin))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
// And closes it unless they're an admin
|
||||||
|
_ui.CloseUi(uid, StorageComponent.StorageUiKey.Key, actor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void OnStackCountChanged(EntityUid uid, MetaDataComponent component, StackCountChangedEvent args)
|
private void OnStackCountChanged(EntityUid uid, MetaDataComponent component, StackCountChangedEvent args)
|
||||||
{
|
{
|
||||||
if (_containerSystem.TryGetContainingContainer(uid, out var container, component) &&
|
if (_containerSystem.TryGetContainingContainer(uid, out var container, component) &&
|
||||||
|
|||||||
Reference in New Issue
Block a user