Enable multiple Solution Editor windows (#26005)

* More solution edit windows

* Fix error when closing euis after round restart

---------

Co-authored-by: ShadowCommander <10494922+ShadowCommander@users.noreply.github.com>
This commit is contained in:
SlamBamActionman
2024-03-12 13:10:09 +01:00
committed by GitHub
parent c8fce85a3f
commit 0da09db99a
2 changed files with 26 additions and 11 deletions

View File

@@ -67,7 +67,7 @@ namespace Content.Server.Administration.Systems
[Dependency] private readonly StationSystem _stations = default!;
[Dependency] private readonly StationSpawningSystem _spawning = default!;
private readonly Dictionary<ICommonSession, EditSolutionsEui> _openSolutionUis = new();
private readonly Dictionary<ICommonSession, List<EditSolutionsEui>> _openSolutionUis = new();
public override void Initialize()
{
@@ -486,33 +486,48 @@ namespace Content.Server.Administration.Systems
#region SolutionsEui
private void OnSolutionChanged(Entity<SolutionContainerManagerComponent> entity, ref SolutionContainerChangedEvent args)
{
foreach (var eui in _openSolutionUis.Values)
foreach (var list in _openSolutionUis.Values)
{
foreach (var eui in list)
{
if (eui.Target == entity.Owner)
eui.StateDirty();
}
}
}
public void OpenEditSolutionsEui(ICommonSession session, EntityUid uid)
{
if (session.AttachedEntity == null)
return;
if (_openSolutionUis.ContainsKey(session))
_openSolutionUis[session].Close();
var eui = _openSolutionUis[session] = new EditSolutionsEui(uid);
var eui = new EditSolutionsEui(uid);
_euiManager.OpenEui(eui, session);
eui.StateDirty();
if (!_openSolutionUis.ContainsKey(session)) {
_openSolutionUis[session] = new List<EditSolutionsEui>();
}
public void OnEditSolutionsEuiClosed(ICommonSession session)
_openSolutionUis[session].Add(eui);
}
public void OnEditSolutionsEuiClosed(ICommonSession session, EditSolutionsEui eui)
{
_openSolutionUis.Remove(session, out var eui);
_openSolutionUis[session].Remove(eui);
if (_openSolutionUis[session].Count == 0)
_openSolutionUis.Remove(session);
}
private void Reset(RoundRestartCleanupEvent ev)
{
foreach (var euis in _openSolutionUis.Values)
{
foreach (var eui in euis.ToList())
{
eui.Close();
}
}
_openSolutionUis.Clear();
}
#endregion

View File

@@ -36,7 +36,7 @@ namespace Content.Server.Administration.UI
public override void Closed()
{
base.Closed();
_entityManager.System<AdminVerbSystem>().OnEditSolutionsEuiClosed(Player);
_entityManager.System<AdminVerbSystem>().OnEditSolutionsEuiClosed(Player, this);
}
public override EuiStateBase GetNewState()