| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- using System.Numerics;
- using Content.Shared.Chat;
- namespace Content.Client.UserInterface.Systems.Chat.Controls;
- public sealed class ChannelSelectorButton : ChatPopupButton<ChannelSelectorPopup>
- {
- public event Action<ChatSelectChannel>? OnChannelSelect;
- public ChatSelectChannel SelectedChannel { get; private set; }
- private const int SelectorDropdownOffset = 38;
- public ChannelSelectorButton()
- {
- Name = "ChannelSelector";
- Popup.Selected += OnChannelSelected;
- if (Popup.FirstChannel is { } firstSelector)
- {
- Select(firstSelector);
- }
- }
- protected override UIBox2 GetPopupPosition()
- {
- var globalLeft = GlobalPosition.X;
- var globalBot = GlobalPosition.Y + Height;
- return UIBox2.FromDimensions(
- new Vector2(globalLeft, globalBot),
- new Vector2(SizeBox.Width, SelectorDropdownOffset));
- }
- private void OnChannelSelected(ChatSelectChannel channel)
- {
- Select(channel);
- }
- public void Select(ChatSelectChannel channel)
- {
- if (Popup.Visible)
- {
- Popup.Close();
- }
- if (SelectedChannel == channel)
- return;
- SelectedChannel = channel;
- OnChannelSelect?.Invoke(channel);
- }
- public static string ChannelSelectorName(ChatSelectChannel channel)
- {
- return Loc.GetString($"hud-chatbox-select-channel-{channel}");
- }
- public Color ChannelSelectColor(ChatSelectChannel channel)
- {
- return channel switch
- {
- ChatSelectChannel.Radio => Color.LimeGreen,
- ChatSelectChannel.LOOC => Color.MediumTurquoise,
- ChatSelectChannel.OOC => Color.LightSkyBlue,
- ChatSelectChannel.Dead => Color.MediumPurple,
- ChatSelectChannel.Admin => Color.HotPink,
- _ => Color.DarkGray
- };
- }
- public void UpdateChannelSelectButton(ChatSelectChannel channel, Shared.Radio.RadioChannelPrototype? radio)
- {
- Text = radio != null ? Loc.GetString(radio.Name) : ChannelSelectorName(channel);
- Modulate = radio?.Color ?? ChannelSelectColor(channel);
- }
- }
|