using Content.Shared.Actions.ActionTypes; using Robust.Shared.Reflection; using Robust.Shared.Serialization; namespace Content.Server.UserInterface; [RegisterComponent] public sealed class IntrinsicUIComponent : Component, ISerializationHooks { /// /// List of UIs and their actions that this entity has. /// [ViewVariables, DataField("uis", required: true)] public List UIs = new(); void ISerializationHooks.AfterDeserialization() { for (var i = 0; i < UIs.Count; i++) { var ui = UIs[i]; ui.AfterDeserialization(); UIs[i] = ui; } } } [DataDefinition] public struct IntrinsicUIEntry { [ViewVariables] public Enum? Key { get; set; } = null; /// /// The BUI key that this intrinsic UI should open. /// [DataField("key", readOnly: true, required: true)] private string _keyRaw = default!; /// /// The action used for this BUI. /// [DataField("toggleAction", required: true)] public InstantAction ToggleAction = new(); public void AfterDeserialization() { var reflectionManager = IoCManager.Resolve(); if (reflectionManager.TryParseEnumReference(_keyRaw, out var key)) Key = key; if (ToggleAction.Event is ToggleIntrinsicUIEvent ev) { ev.Key = Key; } } public IntrinsicUIEntry() {} }