2020-11-10 16:50:28 +01:00
|
|
|
|
using System;
|
|
|
|
|
|
using System.Collections.Generic;
|
2021-06-09 22:19:39 +02:00
|
|
|
|
using Content.Shared.Eui;
|
2020-11-10 16:50:28 +01:00
|
|
|
|
using Robust.Shared.IoC;
|
2021-02-11 01:13:03 -08:00
|
|
|
|
using Robust.Shared.Network;
|
|
|
|
|
|
using Robust.Shared.Reflection;
|
2020-11-10 16:50:28 +01:00
|
|
|
|
|
|
|
|
|
|
namespace Content.Client.Eui
|
|
|
|
|
|
{
|
|
|
|
|
|
public sealed class EuiManager
|
|
|
|
|
|
{
|
|
|
|
|
|
[Dependency] private readonly IClientNetManager _net = default!;
|
|
|
|
|
|
[Dependency] private readonly IReflectionManager _refl = default!;
|
|
|
|
|
|
[Dependency] private readonly IDynamicTypeFactory _dtf = default!;
|
|
|
|
|
|
|
2020-11-27 11:00:49 +01:00
|
|
|
|
private readonly Dictionary<uint, EuiData> _openUis = new();
|
2020-11-10 16:50:28 +01:00
|
|
|
|
|
|
|
|
|
|
public void Initialize()
|
|
|
|
|
|
{
|
2021-06-20 22:43:54 -07:00
|
|
|
|
_net.RegisterNetMessage<MsgEuiCtl>(RxMsgCtl);
|
|
|
|
|
|
_net.RegisterNetMessage<MsgEuiState>(RxMsgState);
|
|
|
|
|
|
_net.RegisterNetMessage<MsgEuiMessage>(RxMsgMessage);
|
2020-11-10 16:50:28 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void RxMsgMessage(MsgEuiMessage message)
|
|
|
|
|
|
{
|
|
|
|
|
|
var ui = _openUis[message.Id].Eui;
|
|
|
|
|
|
ui.HandleMessage(message.Message);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void RxMsgState(MsgEuiState message)
|
|
|
|
|
|
{
|
|
|
|
|
|
var ui = _openUis[message.Id].Eui;
|
|
|
|
|
|
ui.HandleState(message.State);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void RxMsgCtl(MsgEuiCtl message)
|
|
|
|
|
|
{
|
|
|
|
|
|
switch (message.Type)
|
|
|
|
|
|
{
|
|
|
|
|
|
case MsgEuiCtl.CtlType.Open:
|
|
|
|
|
|
var euiType = _refl.LooseGetType(message.OpenType);
|
|
|
|
|
|
var instance = _dtf.CreateInstance<BaseEui>(euiType);
|
|
|
|
|
|
instance.Initialize(this, message.Id);
|
|
|
|
|
|
instance.Opened();
|
|
|
|
|
|
_openUis.Add(message.Id, new EuiData(instance));
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case MsgEuiCtl.CtlType.Close:
|
|
|
|
|
|
var dat = _openUis[message.Id];
|
|
|
|
|
|
dat.Eui.Closed();
|
|
|
|
|
|
_openUis.Remove(message.Id);
|
|
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
|
throw new ArgumentOutOfRangeException();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private sealed class EuiData
|
|
|
|
|
|
{
|
2020-11-21 14:02:00 +01:00
|
|
|
|
public readonly BaseEui Eui;
|
2020-11-10 16:50:28 +01:00
|
|
|
|
|
|
|
|
|
|
public EuiData(BaseEui eui)
|
|
|
|
|
|
{
|
|
|
|
|
|
Eui = eui;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|