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:
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user