using Content.Shared.Labels; using Content.Shared.Labels.Components; using Robust.Client.GameObjects; using Robust.Client.UserInterface; namespace Content.Client.Labels.UI { /// /// Initializes a and updates it when new server messages are received. /// public sealed class HandLabelerBoundUserInterface : BoundUserInterface { [Dependency] private readonly IEntityManager _entManager = default!; [ViewVariables] private HandLabelerWindow? _window; public HandLabelerBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey) { IoCManager.InjectDependencies(this); } protected override void Open() { base.Open(); _window = this.CreateWindow(); if (_entManager.TryGetComponent(Owner, out HandLabelerComponent? labeler)) { _window.SetMaxLabelLength(labeler!.MaxLabelChars); } _window.OnLabelChanged += OnLabelChanged; _window.OnLabelSelected += OnLabelSelected; // Starlight Reload(); _window.SetInitialLabelState(); // Must be after Reload() has set the label text } private void OnLabelChanged(string newLabel) { // Focus moment if (_entManager.TryGetComponent(Owner, out HandLabelerComponent? labeler) && labeler.AssignedLabel.Equals(newLabel)) return; SendPredictedMessage(new HandLabelerLabelChangedMessage(newLabel)); } // Starlight start private void OnLabelSelected(string label) { // Update UI and send message to sync with server if (_window != null) { _window.SetCurrentLabel(label); } SendPredictedMessage(new HandLabelerLabelChangedMessage(label)); } // Starlight End public void Reload() { if (_window == null || !_entManager.TryGetComponent(Owner, out HandLabelerComponent? component)) return; _window.SetCurrentLabel(component.AssignedLabel); } } }