keybinds for opening bag/belt & context logic for opening storage window (#22238)
* keybinds for opening bag/belt & context logic for opening storage window * no error por favor
This commit is contained in:
@@ -17,21 +17,24 @@ public sealed class StorageBoundUserInterface : BoundUserInterface
|
||||
_storage = _entManager.System<StorageSystem>();
|
||||
}
|
||||
|
||||
protected override void Open()
|
||||
{
|
||||
base.Open();
|
||||
|
||||
if (_entManager.TryGetComponent<StorageComponent>(Owner, out var comp))
|
||||
_storage.OpenStorageUI(Owner, comp);
|
||||
}
|
||||
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
base.Dispose(disposing);
|
||||
if (!disposing)
|
||||
return;
|
||||
|
||||
_storage.CloseStorageUI(Owner);
|
||||
_storage.CloseStorageWindow(Owner);
|
||||
}
|
||||
|
||||
protected override void ReceiveMessage(BoundUserInterfaceMessage message)
|
||||
{
|
||||
base.ReceiveMessage(message);
|
||||
|
||||
if (message is StorageModifyWindowMessage)
|
||||
{
|
||||
if (_entManager.TryGetComponent<StorageComponent>(Owner, out var comp))
|
||||
_storage.OpenStorageWindow((Owner, comp));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -35,18 +35,38 @@ public sealed class StorageSystem : SharedStorageSystem
|
||||
StorageUpdated?.Invoke((entity, entity.Comp));
|
||||
}
|
||||
|
||||
public void OpenStorageUI(EntityUid uid, StorageComponent component)
|
||||
public void OpenStorageWindow(Entity<StorageComponent> entity)
|
||||
{
|
||||
if (_openStorages.Contains((uid, component)))
|
||||
return;
|
||||
if (_openStorages.Contains(entity))
|
||||
{
|
||||
if (_openStorages.LastOrDefault() == entity)
|
||||
{
|
||||
CloseStorageWindow((entity, entity.Comp));
|
||||
}
|
||||
else
|
||||
{
|
||||
var storages = new ValueList<Entity<StorageComponent>>(_openStorages);
|
||||
var reverseStorages = storages.Reverse();
|
||||
|
||||
ClearNonParentStorages(uid);
|
||||
_openStorages.Add((uid, component));
|
||||
foreach (var storageEnt in reverseStorages)
|
||||
{
|
||||
if (storageEnt == entity)
|
||||
break;
|
||||
|
||||
CloseStorageBoundUserInterface(storageEnt.Owner);
|
||||
_openStorages.Remove(entity);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
ClearNonParentStorages(entity);
|
||||
_openStorages.Add(entity);
|
||||
Entity<StorageComponent>? last = _openStorages.LastOrDefault();
|
||||
StorageOrderChanged?.Invoke(last);
|
||||
}
|
||||
|
||||
public void CloseStorageUI(Entity<StorageComponent?> entity)
|
||||
public void CloseStorageWindow(Entity<StorageComponent?> entity)
|
||||
{
|
||||
if (!Resolve(entity, ref entity.Comp))
|
||||
return;
|
||||
@@ -99,7 +119,7 @@ public sealed class StorageSystem : SharedStorageSystem
|
||||
|
||||
private void OnShutdown(Entity<StorageComponent> ent, ref ComponentShutdown args)
|
||||
{
|
||||
CloseStorageUI((ent, ent.Comp));
|
||||
CloseStorageWindow((ent, ent.Comp));
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
|
||||
Reference in New Issue
Block a user