From aae464c5532eea7fdae32f03cc70d9bdb2e0ac9f Mon Sep 17 00:00:00 2001 From: Tobias Berger Date: Fri, 7 Feb 2025 11:21:43 +0100 Subject: [PATCH 01/15] Port improvements to NanoChat from Einstein-Engines and Goob-Station --- Content.Client/IoC/ClientContentIoC.cs | 3 + .../Cartridges/EditChatPopup.xaml | 53 +++++++ .../Cartridges/EditChatPopup.xaml.cs | 115 ++++++++++++++ .../Cartridges/NanoChatEntry.xaml.cs | 15 +- .../Cartridges/NanoChatUiFragment.xaml | 11 ++ .../Cartridges/NanoChatUiFragment.xaml.cs | 46 +++++- .../Cartridges/NewChatPopup.xaml.cs | 10 +- .../Cartridges/NanoChatCartridgeSystem.cs | 141 ++++++++++++++---- Content.Server/_DV/NanoChat/NanoChatSystem.cs | 24 +++ .../Cartridges/NanoChatUiMessageEvent.cs | 3 + .../_DV/NanoChat/NanoChatCardComponent.cs | 6 + .../en-US/_DV/cartridge-loader/cartridges.ftl | 7 + .../Interface/VerbIcons/ATTRIBUTION.txt | 5 +- .../Textures/Interface/VerbIcons/edit.svg.png | Bin 0 -> 924 bytes 14 files changed, 393 insertions(+), 46 deletions(-) create mode 100644 Content.Client/_DV/CartridgeLoader/Cartridges/EditChatPopup.xaml create mode 100644 Content.Client/_DV/CartridgeLoader/Cartridges/EditChatPopup.xaml.cs create mode 100644 Resources/Textures/Interface/VerbIcons/edit.svg.png diff --git a/Content.Client/IoC/ClientContentIoC.cs b/Content.Client/IoC/ClientContentIoC.cs index 370188e3c61..d48f4664d9f 100644 --- a/Content.Client/IoC/ClientContentIoC.cs +++ b/Content.Client/IoC/ClientContentIoC.cs @@ -2,6 +2,7 @@ using Content.Client.Changelog; using Content.Client.Chat.Managers; using Content.Client.Clickable; +using Content.Client._DV.NanoChat; using Content.Client.DebugMon; using Content.Client.Eui; using Content.Client.Fullscreen; @@ -24,6 +25,7 @@ using Content.Shared.Chat; using Content.Shared.Players.PlayTimeTracking; using Content.Shared.Players.RateLimiting; +using Robust.Client.GameObjects; namespace Content.Client.IoC { @@ -54,6 +56,7 @@ public static void Register() collection.Register(); collection.Register(); collection.Register(); + collection.Register(); collection.Register(); collection.Register(); collection.Register(); diff --git a/Content.Client/_DV/CartridgeLoader/Cartridges/EditChatPopup.xaml b/Content.Client/_DV/CartridgeLoader/Cartridges/EditChatPopup.xaml new file mode 100644 index 00000000000..3b229e824a8 --- /dev/null +++ b/Content.Client/_DV/CartridgeLoader/Cartridges/EditChatPopup.xaml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + - + + _recipients = new(); - private Dictionary> _messages = new(); + private Dictionary _recipients = []; + private Dictionary> _messages = []; + private HashSet _mutedChats = []; public event Action? OnMessageSent; @@ -58,6 +55,19 @@ private void SetupEventHandlers() _newChatPopup.OpenCentered(); }; + MuteChatButton.OnPressed += _ => + { + if (_currentChat is not uint currentChat) + return; + + // Remove if muted, otherwise add + if (!_mutedChats.Remove(currentChat)) + _mutedChats.Add(currentChat); + + UpdateMuteChatButton(); + OnMessageSent?.Invoke(NanoChatUiMessageType.ToggleMuteChat, currentChat, null, null); + }; + MuteButton.OnPressed += _ => { _notificationsMuted = !_notificationsMuted; @@ -277,6 +287,12 @@ private void UpdateMuteButton() BellMutedIcon.Visible = _notificationsMuted; } + private void UpdateMuteChatButton() + { + if (BellMutedIconContact != null) + BellMutedIconContact.Visible = _currentChat is uint currentChat && _mutedChats.Contains(currentChat); + } + private void UpdateListNumber() { if (ListNumberButton != null) @@ -288,6 +304,7 @@ public void UpdateState(NanoChatUiState state) _ownNumber = state.OwnNumber; _notificationsMuted = state.NotificationsMuted; _listNumber = state.ListNumber; + _mutedChats = state.MutedChats; OwnNumberLabel.Text = $"#{state.OwnNumber:D4}"; UpdateMuteButton(); UpdateListNumber(); @@ -313,6 +330,7 @@ public void UpdateState(NanoChatUiState state) _currentChat = state.CurrentChat; UpdateCurrentChat(); + UpdateMuteChatButton(); UpdateChatList(state.Recipients); UpdateMessages(state.Messages); LookupView.UpdateContactList(state); diff --git a/Content.Server/_DV/CartridgeLoader/Cartridges/NanoChatCartridgeSystem.cs b/Content.Server/_DV/CartridgeLoader/Cartridges/NanoChatCartridgeSystem.cs index d314492f8af..73c34fe8ffc 100644 --- a/Content.Server/_DV/CartridgeLoader/Cartridges/NanoChatCartridgeSystem.cs +++ b/Content.Server/_DV/CartridgeLoader/Cartridges/NanoChatCartridgeSystem.cs @@ -117,6 +117,9 @@ private void OnMessage(Entity ent, ref CartridgeMess case NanoChatUiMessageType.ToggleMute: HandleToggleMute(card); break; + case NanoChatUiMessageType.ToggleMuteChat: + HandleToggleMuteChat(card, msg); + break; case NanoChatUiMessageType.DeleteChat: HandleDeleteChat(card, msg); break; @@ -219,7 +222,7 @@ private void HandleSelectChat(Entity card, NanoChatUiMess private void HandleEditChat(Entity card, NanoChatUiMessageEvent msg) { if (msg.RecipientNumber == null || msg.Content == null || msg.RecipientNumber == card.Comp.Number || - _nanoChat.GetRecipient((card, card.Comp), msg.RecipientNumber.Value) is not {} recipient) + _nanoChat.GetRecipient((card, card.Comp), msg.RecipientNumber.Value) is not { } recipient) return; var name = msg.Content; @@ -287,6 +290,15 @@ private void HandleToggleMute(Entity card) UpdateUIForCard(card); } + private void HandleToggleMuteChat(Entity card, NanoChatUiMessageEvent msg) + { + Log.Debug($"Toggling mute for chat #{msg.RecipientNumber:D4} on card #{card.Comp.Number:D4}"); + if (msg.RecipientNumber is not uint chat) + return; + _nanoChat.ToggleChatMuted((card, card.Comp), chat); + UpdateUIForCard(card); + } + private void HandleToggleListNumber(Entity card) { _nanoChat.SetListNumber((card, card.Comp), !_nanoChat.GetListNumber((card, card.Comp))); @@ -502,8 +514,11 @@ private void HandleUnreadNotification(Entity recipient, message.SenderId, senderRecipient with { HasUnread = true }); + // Temporary local to avoid trouble with read-only access; Contains doesn't modify the collection + HashSet mutedChats = recipient.Comp.MutedChats; if (recipient.Comp.NotificationsMuted || - recipient.Comp.PdaUid is not {} pdaUid || + mutedChats.Contains(message.SenderId) || + recipient.Comp.PdaUid is not { } pdaUid || !TryComp(pdaUid, out var loader) || // Don't notify if the recipient has the NanoChat program open with this chat selected. (hasSelectedCurrentChat && @@ -512,7 +527,7 @@ recipient.Comp.PdaUid is not {} pdaUid || return; var title = ""; - if (!String.IsNullOrEmpty(senderRecipient.JobTitle)) + if (!string.IsNullOrEmpty(senderRecipient.JobTitle)) { var titleRecipient = Truncate(Loc.GetString("nano-chat-new-message-title-recipient", ("sender", senderName), ("jobTitle", senderRecipient.JobTitle)), NotificationTitleMaxLength, " \\[...\\]"); @@ -624,6 +639,7 @@ private void UpdateUI(Entity ent, EntityUid loader) var recipients = new Dictionary(); var messages = new Dictionary>(); + var mutedChats = new HashSet(); uint? currentChat = null; uint ownNumber = 0; var maxRecipients = 50; @@ -634,6 +650,7 @@ private void UpdateUI(Entity ent, EntityUid loader) { recipients = card.Recipients; messages = card.Messages; + mutedChats = card.MutedChats; currentChat = card.CurrentChat; ownNumber = card.Number ?? 0; maxRecipients = card.MaxRecipients; @@ -643,6 +660,7 @@ private void UpdateUI(Entity ent, EntityUid loader) var state = new NanoChatUiState(recipients, messages, + mutedChats, contacts, currentChat, ownNumber, diff --git a/Content.Shared/_DV/CartridgeLoader/Cartridges/NanoChatUiMessageEvent.cs b/Content.Shared/_DV/CartridgeLoader/Cartridges/NanoChatUiMessageEvent.cs index 38ca0d8efd4..b0fb8971c85 100644 --- a/Content.Shared/_DV/CartridgeLoader/Cartridges/NanoChatUiMessageEvent.cs +++ b/Content.Shared/_DV/CartridgeLoader/Cartridges/NanoChatUiMessageEvent.cs @@ -55,6 +55,7 @@ public enum NanoChatUiMessageType : byte SendMessage, DeleteChat, ToggleMute, + ToggleMuteChat, ToggleListNumber, } diff --git a/Content.Shared/_DV/CartridgeLoader/Cartridges/NanoChatUiState.cs b/Content.Shared/_DV/CartridgeLoader/Cartridges/NanoChatUiState.cs index a472315071c..c24b75d4ef3 100644 --- a/Content.Shared/_DV/CartridgeLoader/Cartridges/NanoChatUiState.cs +++ b/Content.Shared/_DV/CartridgeLoader/Cartridges/NanoChatUiState.cs @@ -5,8 +5,9 @@ namespace Content.Shared._DV.CartridgeLoader.Cartridges; [Serializable, NetSerializable] public sealed class NanoChatUiState : BoundUserInterfaceState { - public readonly Dictionary Recipients = new(); - public readonly Dictionary> Messages = new(); + public readonly Dictionary Recipients = []; + public readonly Dictionary> Messages = []; + public readonly HashSet MutedChats = []; public readonly List? Contacts; public readonly uint? CurrentChat; public readonly uint OwnNumber; @@ -17,6 +18,7 @@ public sealed class NanoChatUiState : BoundUserInterfaceState public NanoChatUiState( Dictionary recipients, Dictionary> messages, + HashSet mutedChats, List? contacts, uint? currentChat, uint ownNumber, @@ -26,6 +28,7 @@ public NanoChatUiState( { Recipients = recipients; Messages = messages; + MutedChats = mutedChats; Contacts = contacts; CurrentChat = currentChat; OwnNumber = ownNumber; diff --git a/Content.Shared/_DV/NanoChat/NanoChatCardComponent.cs b/Content.Shared/_DV/NanoChat/NanoChatCardComponent.cs index d356bd58f34..81447ce53a8 100644 --- a/Content.Shared/_DV/NanoChat/NanoChatCardComponent.cs +++ b/Content.Shared/_DV/NanoChat/NanoChatCardComponent.cs @@ -25,13 +25,19 @@ public sealed partial class NanoChatCardComponent : Component /// All chat recipients stored on this card. /// [DataField] - public Dictionary Recipients = new(); + public Dictionary Recipients = []; /// /// All messages stored on this card, keyed by recipient number. /// [DataField] - public Dictionary> Messages = new(); + public Dictionary> Messages = []; + + /// + /// The NanoChat numbers that should not give a notification, even when notifications are enabled. + /// + [DataField] + public HashSet MutedChats = []; /// /// The currently selected chat recipient number. diff --git a/Content.Shared/_DV/NanoChat/SharedNanoChatSystem.cs b/Content.Shared/_DV/NanoChat/SharedNanoChatSystem.cs index 00af522bac5..f00710f3727 100644 --- a/Content.Shared/_DV/NanoChat/SharedNanoChatSystem.cs +++ b/Content.Shared/_DV/NanoChat/SharedNanoChatSystem.cs @@ -188,6 +188,19 @@ public void SetNotificationsMuted(Entity card, bool mute Dirty(card); } + /// + /// Sets whether notifications are muted for a specific chat. + /// + public void ToggleChatMuted(Entity card, uint chat, bool? muted) + { + if (!Resolve(card, ref card.Comp)) + return; + + if (!card.Comp.MutedChats.Remove(chat)) + card.Comp.MutedChats.Add(chat); + Dirty(card); + } + /// /// Gets whether NanoChat number is listed. /// diff --git a/Resources/Locale/en-US/_DV/cartridge-loader/cartridges.ftl b/Resources/Locale/en-US/_DV/cartridge-loader/cartridges.ftl index 830e044dedb..1825748e234 100644 --- a/Resources/Locale/en-US/_DV/cartridge-loader/cartridges.ftl +++ b/Resources/Locale/en-US/_DV/cartridge-loader/cartridges.ftl @@ -170,7 +170,7 @@ nano-chat-no-chats = No active chats nano-chat-select-chat = Select a chat to begin nano-chat-message-placeholder = Type a message... nano-chat-send = Send -nano-chat-edit = Edit +nano-chat-edit = Edit Contact nano-chat-delete = Delete nano-chat-loading = Loading... nano-chat-message-too-long = Message too long ({$current}/{$max} characters) @@ -179,6 +179,7 @@ nano-chat-new-message-title = Message from {$sender} nano-chat-new-message-title-recipient = {$sender} ({$jobTitle}) nano-chat-new-message-body = {$message} nano-chat-toggle-mute = Mute notifications +nano-chat-toggle-mute-chat = Mute chat nano-chat-delivery-failed = Failed to deliver nano-chat-look-up-no-server = No valid telecommunications server found nano-chat-look-up = Look up numbers From 35ab4e2bf05a24c4834a6dc73bc169978d89e9ac Mon Sep 17 00:00:00 2001 From: Tobias Berger Date: Fri, 7 Feb 2025 15:32:59 +0100 Subject: [PATCH 06/15] remove leftover from testing stuff --- Content.Shared/_DV/NanoChat/SharedNanoChatSystem.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content.Shared/_DV/NanoChat/SharedNanoChatSystem.cs b/Content.Shared/_DV/NanoChat/SharedNanoChatSystem.cs index f00710f3727..cac22233cbf 100644 --- a/Content.Shared/_DV/NanoChat/SharedNanoChatSystem.cs +++ b/Content.Shared/_DV/NanoChat/SharedNanoChatSystem.cs @@ -191,7 +191,7 @@ public void SetNotificationsMuted(Entity card, bool mute /// /// Sets whether notifications are muted for a specific chat. /// - public void ToggleChatMuted(Entity card, uint chat, bool? muted) + public void ToggleChatMuted(Entity card, uint chat) { if (!Resolve(card, ref card.Comp)) return; From 5374db010afb269fd9e966232a82b3431d8c308f Mon Sep 17 00:00:00 2001 From: Tobias Berger Date: Fri, 7 Feb 2025 23:52:23 +0100 Subject: [PATCH 07/15] cycle through inputs with tab, confirm with enter; for new and edit chat --- .../Cartridges/EditChatPopup.xaml.cs | 23 +++++-------------- .../Cartridges/NewChatPopup.xaml.cs | 12 ++++++---- 2 files changed, 14 insertions(+), 21 deletions(-) diff --git a/Content.Client/_DV/CartridgeLoader/Cartridges/EditChatPopup.xaml.cs b/Content.Client/_DV/CartridgeLoader/Cartridges/EditChatPopup.xaml.cs index 33dc4f57a03..e35aa989bed 100644 --- a/Content.Client/_DV/CartridgeLoader/Cartridges/EditChatPopup.xaml.cs +++ b/Content.Client/_DV/CartridgeLoader/Cartridges/EditChatPopup.xaml.cs @@ -1,4 +1,3 @@ -using System.Linq; using Content.Shared.Access.Components; using Robust.Client.AutoGenerated; using Robust.Client.UserInterface.CustomControls; @@ -30,9 +29,13 @@ public EditChatPopup() CancelButton.OnPressed += _ => Close(); ConfirmButton.OnPressed += _ => EditChat(); - // Input validation - NameInput.OnTextChanged += _ => ValidateInputs(); + NameInput.OnTabComplete += _ => JobInput.GrabKeyboardFocus(); + NameInput.OnTextEntered += _ => EditChat(); + + JobInput.OnTabComplete += _ => NameInput.GrabKeyboardFocus(); + JobInput.OnTextEntered += _ => EditChat(); + // Input validation NameInput.OnTextChanged += args => { if (args.Text.Length > IdCardConsoleComponent.MaxFullNameLength) @@ -42,24 +45,10 @@ public EditChatPopup() JobInput.OnTextChanged += args => { - if (args.Text.Length > IdCardConsoleComponent.MaxJobTitleLength) JobInput.Text = args.Text[..IdCardConsoleComponent.MaxJobTitleLength]; ValidateInputs(); }; - - NumberInput.OnTextChanged += args => - { - if (args.Text.Length > MaxNumberLength) - NumberInput.Text = args.Text[..MaxNumberLength]; - - // Filter to digits only - var newText = string.Concat(NumberInput.Text.Where(char.IsDigit)); - if (newText != NumberInput.Text) - NumberInput.Text = newText; - - ValidateInputs(); - }; } private void ValidateInputs() diff --git a/Content.Client/_DV/CartridgeLoader/Cartridges/NewChatPopup.xaml.cs b/Content.Client/_DV/CartridgeLoader/Cartridges/NewChatPopup.xaml.cs index 4728db0d901..b6e7e4b6478 100644 --- a/Content.Client/_DV/CartridgeLoader/Cartridges/NewChatPopup.xaml.cs +++ b/Content.Client/_DV/CartridgeLoader/Cartridges/NewChatPopup.xaml.cs @@ -9,7 +9,6 @@ namespace Content.Client._DV.CartridgeLoader.Cartridges; [GenerateTypedNameReferences] public sealed partial class NewChatPopup : DefaultWindow { - private const int MaxInputLength = 16; private const int MaxNumberLength = 4; // i hardcoded it to be 4 so suffer public event Action? OnChatCreated; @@ -25,9 +24,14 @@ public NewChatPopup() CancelButton.OnPressed += _ => Close(); CreateButton.OnPressed += _ => CreateChat(); - // Input validation - NumberInput.OnTextChanged += _ => ValidateInputs(); - NameInput.OnTextChanged += _ => ValidateInputs(); + NumberInput.OnTabComplete += _ => NameInput.GrabKeyboardFocus(); + NumberInput.OnTextEntered += _ => CreateChat(); + + NameInput.OnTabComplete += _ => JobInput.GrabKeyboardFocus(); + NameInput.OnTextEntered += _ => CreateChat(); + + JobInput.OnTabComplete += _ => NumberInput.GrabKeyboardFocus(); + JobInput.OnTextEntered += _ => CreateChat(); // Input validation NumberInput.OnTextChanged += args => From 8426e8209519a99f66575e91b1bb290fea7617be Mon Sep 17 00:00:00 2001 From: Tobias Berger Date: Fri, 7 Feb 2025 23:55:33 +0100 Subject: [PATCH 08/15] Add channel switching with (Shift+)Alt+Up/Down; Discord-Style --- Content.Client/Input/ContentContexts.cs | 4 ++ .../Options/UI/Tabs/KeyRebindTab.xaml.cs | 6 +++ .../Cartridges/NanoChatUiFragment.xaml.cs | 50 +++++++++++++++++++ Content.Shared/Input/ContentKeyFunctions.cs | 4 ++ .../en-US/escape-menu/ui/options-menu.ftl | 7 +++ Resources/keybinds.yml | 20 ++++++++ 6 files changed, 91 insertions(+) diff --git a/Content.Client/Input/ContentContexts.cs b/Content.Client/Input/ContentContexts.cs index 9b274403e38..b1a0909529a 100644 --- a/Content.Client/Input/ContentContexts.cs +++ b/Content.Client/Input/ContentContexts.cs @@ -40,6 +40,10 @@ public static void SetupContexts(IInputContextContainer contexts) common.AddFunction(ContentKeyFunctions.ResetZoom); common.AddFunction(ContentKeyFunctions.InspectEntity); common.AddFunction(ContentKeyFunctions.ToggleRoundEndSummaryWindow); + common.AddFunction(ContentKeyFunctions.NanoChatNavigateUp); // DeltaV - NanoChat keybinds + common.AddFunction(ContentKeyFunctions.NanoChatNavigateDown); // DeltaV - NanoChat keybinds + common.AddFunction(ContentKeyFunctions.NanoChatNavigateUpUnread); // DeltaV - NanoChat keybinds + common.AddFunction(ContentKeyFunctions.NanoChatNavigateDownUnread); // DeltaV - NanoChat keybinds // Not in engine, because engine cannot check for sanbox/admin status before starting placement. common.AddFunction(ContentKeyFunctions.EditorCopyObject); diff --git a/Content.Client/Options/UI/Tabs/KeyRebindTab.xaml.cs b/Content.Client/Options/UI/Tabs/KeyRebindTab.xaml.cs index 17a52b3c5d4..df2f8df1ee7 100644 --- a/Content.Client/Options/UI/Tabs/KeyRebindTab.xaml.cs +++ b/Content.Client/Options/UI/Tabs/KeyRebindTab.xaml.cs @@ -240,6 +240,12 @@ void AddCheckBox(string checkBoxName, bool currentState, Action + { + if (args.Function == ContentKeyFunctions.NanoChatNavigateUpUnread) + CycleChannel(CycleDirection.Up, true); + else if (args.Function == ContentKeyFunctions.NanoChatNavigateDownUnread) + CycleChannel(CycleDirection.Down, true); + else if (args.Function == ContentKeyFunctions.NanoChatNavigateUp) + CycleChannel(CycleDirection.Up, false); + else if (args.Function == ContentKeyFunctions.NanoChatNavigateDown) + CycleChannel(CycleDirection.Down, false); + }; MessageInput.OnTextChanged += args => { var length = args.Text.Length; @@ -125,6 +137,44 @@ private void ToggleView() LookupButton.Pressed = LookupView.Visible; } + public enum CycleDirection : byte + { + Up, + Down, + }; + + private void CycleChannel(CycleDirection direction, bool onlyUnread) + { + if (_recipients.Count == 0) + return; + + var orderedRecipients = _recipients.OrderBy(r => r.Value.Name).Select(r => r.Key).ToArray(); + var currentChatIndex = (direction, _currentChat) switch + { + (CycleDirection.Up, null) => _recipients.Count, + (CycleDirection.Down, null) => 0, + (_, uint currentChat) => Array.IndexOf(orderedRecipients, currentChat), + _ => 0 + }; + var newChatIndex = currentChatIndex; + + do + { + newChatIndex = direction switch + { + CycleDirection.Up => newChatIndex - 1, + CycleDirection.Down => newChatIndex + 1, + _ => currentChatIndex, + }; + if (newChatIndex < 0) + newChatIndex = _recipients.Count - 1; + else if (newChatIndex >= _recipients.Count) + newChatIndex = 0; + } while (onlyUnread && newChatIndex != currentChatIndex && !_recipients[orderedRecipients[newChatIndex]].HasUnread); + + SelectChat(orderedRecipients[newChatIndex]); + } + private void SendMessage() { var activeChat = _pendingChat ?? _currentChat; diff --git a/Content.Shared/Input/ContentKeyFunctions.cs b/Content.Shared/Input/ContentKeyFunctions.cs index c4ea0df7f87..15095bd4ba5 100644 --- a/Content.Shared/Input/ContentKeyFunctions.cs +++ b/Content.Shared/Input/ContentKeyFunctions.cs @@ -24,6 +24,10 @@ public static class ContentKeyFunctions public static readonly BoundKeyFunction CycleChatChannelForward = "CycleChatChannelForward"; public static readonly BoundKeyFunction CycleChatChannelBackward = "CycleChatChannelBackward"; public static readonly BoundKeyFunction EscapeContext = "EscapeContext"; + public static readonly BoundKeyFunction NanoChatNavigateUp = "NanoChatNavigateUp"; // DeltaV - Keybinds for NanoChat + public static readonly BoundKeyFunction NanoChatNavigateDown = "NanoChatNavigateDown"; // DeltaV - Keybinds for NanoChat + public static readonly BoundKeyFunction NanoChatNavigateUpUnread = "NanoChatNavigateUpUnread"; // DeltaV - Keybinds for NanoChat + public static readonly BoundKeyFunction NanoChatNavigateDownUnread = "NanoChatNavigateDownUnread"; // DeltaV - Keybinds for NanoChat public static readonly BoundKeyFunction OpenCharacterMenu = "OpenCharacterMenu"; public static readonly BoundKeyFunction OpenEmotesMenu = "OpenEmotesMenu"; public static readonly BoundKeyFunction OpenCraftingMenu = "OpenCraftingMenu"; diff --git a/Resources/Locale/en-US/escape-menu/ui/options-menu.ftl b/Resources/Locale/en-US/escape-menu/ui/options-menu.ftl index 8473b9813e5..ce36d2851b3 100644 --- a/Resources/Locale/en-US/escape-menu/ui/options-menu.ftl +++ b/Resources/Locale/en-US/escape-menu/ui/options-menu.ftl @@ -284,6 +284,13 @@ ui-options-reduced-motion = Reduce motion of visual effects ui-options-chat-window-opacity = Chat window opacity ui-options-screen-shake-intensity = Screen shake intensity +## DeltaV NanoChat keybinds +ui-options-header-nano-chat = NanoChat +ui-options-function-nano-chat-navigate-up = Navigate up +ui-options-function-nano-chat-navigate-down = Navigate down +ui-options-function-nano-chat-navigate-up-unread = Navigate up to next unread +ui-options-function-nano-chat-navigate-down-unread = Navigate down to next unread + ## Shitmed Change ui-options-header-targeting = Targeting ui-options-function-target-head = Target head diff --git a/Resources/keybinds.yml b/Resources/keybinds.yml index c6bb9d61551..fe117b96d46 100644 --- a/Resources/keybinds.yml +++ b/Resources/keybinds.yml @@ -171,6 +171,26 @@ binds: key: X mod1: Shift # DeltaV - Swap Hands Reversed End + # DeltaV - NanoChat keybinds Start +- function: NanoChatNavigateUp + type: State + key: Up + mod1: Alt +- function: NanoChatNavigateDown + type: State + key: Down + mod1: Alt +- function: NanoChatNavigateUpUnread + type: State + key: Up + mod1: Alt + mod2: Shift +- function: NanoChatNavigateDownUnread + type: State + key: Down + mod1: Alt + mod2: Shift + # DeltaV - NanoChat keybinds End - function: MoveStoredItem type: State key: MouseLeft From 2369eb55bf9a22ce7bd360bfaa0dca71092d4ff4 Mon Sep 17 00:00:00 2001 From: Tobias Berger Date: Sat, 8 Feb 2025 01:06:05 +0100 Subject: [PATCH 09/15] better null check --- .../_DV/CartridgeLoader/Cartridges/NanoChatUiFragment.xaml.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Content.Client/_DV/CartridgeLoader/Cartridges/NanoChatUiFragment.xaml.cs b/Content.Client/_DV/CartridgeLoader/Cartridges/NanoChatUiFragment.xaml.cs index a22c6a24425..60b16d025af 100644 --- a/Content.Client/_DV/CartridgeLoader/Cartridges/NanoChatUiFragment.xaml.cs +++ b/Content.Client/_DV/CartridgeLoader/Cartridges/NanoChatUiFragment.xaml.cs @@ -246,10 +246,10 @@ private void DeleteCurrentChat() private void BeginEditChat() { - if (_currentChat == null) + if (_currentChat is not uint currentChat) return; - var recipient = _recipients[_currentChat ?? 0]; + var recipient = _recipients[currentChat]; _editChatPopup.ClearInputs(); _editChatPopup.SetNumberInput(recipient.Number.ToString()); From cf9df4eabca277e843757b8f90e6f4ea4c7c2772 Mon Sep 17 00:00:00 2001 From: Tobias Berger Date: Sat, 8 Feb 2025 01:51:45 +0100 Subject: [PATCH 10/15] another better null check --- .../Cartridges/NanoChatCartridgeSystem.cs | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/Content.Server/_DV/CartridgeLoader/Cartridges/NanoChatCartridgeSystem.cs b/Content.Server/_DV/CartridgeLoader/Cartridges/NanoChatCartridgeSystem.cs index 73c34fe8ffc..46829541b1c 100644 --- a/Content.Server/_DV/CartridgeLoader/Cartridges/NanoChatCartridgeSystem.cs +++ b/Content.Server/_DV/CartridgeLoader/Cartridges/NanoChatCartridgeSystem.cs @@ -476,18 +476,17 @@ private void DeliverMessageToRecipient(Entity sender, Entity recipient, NanoChatMessage message) { - var senderNumber = sender.Comp.Number; - if (senderNumber == null) + if (sender.Comp.Number is not uint senderNumber) return; // Always try to get and add sender info to recipient's contacts - if (!EnsureRecipientExists(recipient, senderNumber.Value)) + if (!EnsureRecipientExists(recipient, senderNumber)) return; - _nanoChat.AddMessage((recipient, recipient.Comp), senderNumber.Value, message with { DeliveryFailed = false }); + _nanoChat.AddMessage((recipient, recipient.Comp), senderNumber, message with { DeliveryFailed = false }); if (recipient.Comp.IsClosed || _nanoChat.GetCurrentChat((recipient, recipient.Comp)) != senderNumber) - HandleUnreadNotification(recipient, message, (uint)senderNumber); + HandleUnreadNotification(recipient, message, senderNumber); var msgEv = new NanoChatMessageReceivedEvent(recipient); RaiseLocalEvent(ref msgEv); From b8fe6512b40ffac4cc8f4b9290626ee82367d4b1 Mon Sep 17 00:00:00 2001 From: Alex C Date: Sun, 16 Feb 2025 16:42:10 -0500 Subject: [PATCH 11/15] Implement changes from ImpStation PR --- .../Cartridges/NanoChatEntry.xaml.cs | 8 ++--- .../Cartridges/NanoChatLookupView.xaml.cs | 34 +++++++++++-------- 2 files changed, 23 insertions(+), 19 deletions(-) diff --git a/Content.Client/_DV/CartridgeLoader/Cartridges/NanoChatEntry.xaml.cs b/Content.Client/_DV/CartridgeLoader/Cartridges/NanoChatEntry.xaml.cs index 9b14170ec38..8b6e50df4d7 100644 --- a/Content.Client/_DV/CartridgeLoader/Cartridges/NanoChatEntry.xaml.cs +++ b/Content.Client/_DV/CartridgeLoader/Cartridges/NanoChatEntry.xaml.cs @@ -1,4 +1,5 @@ using Content.Shared._DV.CartridgeLoader.Cartridges; +using Content.Shared.Access.Components; using Robust.Client.AutoGenerated; using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.XAML; @@ -8,9 +9,6 @@ namespace Content.Client._DV.CartridgeLoader.Cartridges; [GenerateTypedNameReferences] public sealed partial class NanoChatEntry : BoxContainer { - private const int MaxNameLength = 14; - private const int MaxJobLength = 20; - public event Action? OnPressed; private uint _number; private Action? _pressHandler; @@ -32,8 +30,8 @@ public void SetRecipient(NanoChatRecipient recipient, uint number, bool isSelect _pressHandler = _ => OnPressed?.Invoke(_number); ChatButton.OnPressed += _pressHandler; - NameLabel.Text = Truncate(recipient.Name, MaxNameLength); - JobLabel.Text = Truncate(recipient.JobTitle ?? "", MaxJobLength); + NameLabel.Text = Truncate(recipient.Name, IdCardConsoleComponent.MaxFullNameLength); + JobLabel.Text = Truncate(recipient.JobTitle ?? "", IdCardConsoleComponent.MaxJobTitleLength); JobLabel.Visible = !string.IsNullOrEmpty(recipient.JobTitle); UnreadIndicator.Visible = recipient.HasUnread; diff --git a/Content.Client/_DV/CartridgeLoader/Cartridges/NanoChatLookupView.xaml.cs b/Content.Client/_DV/CartridgeLoader/Cartridges/NanoChatLookupView.xaml.cs index c143e373d6d..ba16257c1ab 100644 --- a/Content.Client/_DV/CartridgeLoader/Cartridges/NanoChatLookupView.xaml.cs +++ b/Content.Client/_DV/CartridgeLoader/Cartridges/NanoChatLookupView.xaml.cs @@ -1,6 +1,7 @@ using System.Numerics; using Content.Shared._DV.CartridgeLoader.Cartridges; using Robust.Client.AutoGenerated; +using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.XAML; @@ -28,6 +29,19 @@ public void UpdateContactList(NanoChatUiState state) for (var idx = 0; idx < contacts.Count; idx++) { var contact = contacts[idx]; + var isEvenRow = idx % 2 == 0; + var contactControl = new ContactControl(contact, state, isEvenRow, OnStartChat); + ContactsList.AddChild(contactControl); + } + } + + public sealed class ContactControl : PanelContainer + { + public ContactControl(NanoChatRecipient contact, NanoChatUiState state, bool isEvenRow, Action? onStartChat) + { + HorizontalExpand = true; + StyleClasses.Add(isEvenRow ? "PanelBackgroundBaseDark" : "PanelBackgroundLight"); + var nameLabel = new Label() { Text = contact.Name, @@ -36,7 +50,7 @@ public void UpdateContactList(NanoChatUiState state) }; var numberLabel = new Label() { - Text = $"#{contacts[idx].Number:D4}", + Text = $"#{contact.Number:D4}", HorizontalAlignment = HAlignment.Right, Margin = new Thickness(0, 0, 36, 0), }; @@ -49,25 +63,17 @@ public void UpdateContactList(NanoChatUiState state) ToolTip = Loc.GetString("nano-chat-new-chat"), }; startChatButton.AddStyleClass("OpenBoth"); + if (contact.Number == state.OwnNumber || state.Recipients.ContainsKey(contact.Number) || state.MaxRecipients <= state.Recipients.Count) { startChatButton.Disabled = true; } - startChatButton.OnPressed += _ => OnStartChat?.Invoke(contact); - - var panel = new PanelContainer() - { - HorizontalExpand = true, - }; - - panel.AddChild(nameLabel); - panel.AddChild(numberLabel); - panel.AddChild(startChatButton); - var styleClass = idx % 2 == 0 ? "PanelBackgroundBaseDark" : "PanelBackgroundLight"; - panel.StyleClasses.Add(styleClass); + startChatButton.OnPressed += _ => onStartChat?.Invoke(contact); - ContactsList.AddChild(panel); + AddChild(nameLabel); + AddChild(numberLabel); + AddChild(startChatButton); } } } From 97043f4b97ff4a70a082c6135a487d62fa28beaa Mon Sep 17 00:00:00 2001 From: Tobias Berger Date: Mon, 17 Feb 2025 21:10:59 +0100 Subject: [PATCH 12/15] Rename ContactControl -> ContactContainer --- .../CartridgeLoader/Cartridges/NanoChatLookupView.xaml.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Content.Client/_DV/CartridgeLoader/Cartridges/NanoChatLookupView.xaml.cs b/Content.Client/_DV/CartridgeLoader/Cartridges/NanoChatLookupView.xaml.cs index ba16257c1ab..fb1b56aa411 100644 --- a/Content.Client/_DV/CartridgeLoader/Cartridges/NanoChatLookupView.xaml.cs +++ b/Content.Client/_DV/CartridgeLoader/Cartridges/NanoChatLookupView.xaml.cs @@ -30,14 +30,14 @@ public void UpdateContactList(NanoChatUiState state) { var contact = contacts[idx]; var isEvenRow = idx % 2 == 0; - var contactControl = new ContactControl(contact, state, isEvenRow, OnStartChat); + var contactControl = new ContactContainer(contact, state, isEvenRow, OnStartChat); ContactsList.AddChild(contactControl); } } - public sealed class ContactControl : PanelContainer + public sealed class ContactContainer : PanelContainer { - public ContactControl(NanoChatRecipient contact, NanoChatUiState state, bool isEvenRow, Action? onStartChat) + public ContactContainer(NanoChatRecipient contact, NanoChatUiState state, bool isEvenRow, Action? onStartChat) { HorizontalExpand = true; StyleClasses.Add(isEvenRow ? "PanelBackgroundBaseDark" : "PanelBackgroundLight"); From 6e4b2af2c7301f8f56eca2da7624e8f97eb56ab6 Mon Sep 17 00:00:00 2001 From: Tobias Berger Date: Sun, 23 Feb 2025 13:46:31 +0100 Subject: [PATCH 13/15] Requested changes --- Content.Client/Input/ContentContexts.cs | 10 ++++++---- Content.Client/Options/UI/Tabs/KeyRebindTab.xaml.cs | 10 ++++++---- .../Cartridges/NanoChatEntry.xaml.cs | 13 +++---------- .../Cartridges/NanoChatCartridgeSystem.cs | 13 ++----------- Content.Shared/Input/ContentKeyFunctions.cs | 10 ++++++---- Content.Shared/_DV/NanoChat/SharedNanoChatSystem.cs | 10 ++++++++++ Resources/keybinds.yml | 6 ++---- 7 files changed, 35 insertions(+), 37 deletions(-) diff --git a/Content.Client/Input/ContentContexts.cs b/Content.Client/Input/ContentContexts.cs index b1a0909529a..acd16b0b23f 100644 --- a/Content.Client/Input/ContentContexts.cs +++ b/Content.Client/Input/ContentContexts.cs @@ -40,10 +40,12 @@ public static void SetupContexts(IInputContextContainer contexts) common.AddFunction(ContentKeyFunctions.ResetZoom); common.AddFunction(ContentKeyFunctions.InspectEntity); common.AddFunction(ContentKeyFunctions.ToggleRoundEndSummaryWindow); - common.AddFunction(ContentKeyFunctions.NanoChatNavigateUp); // DeltaV - NanoChat keybinds - common.AddFunction(ContentKeyFunctions.NanoChatNavigateDown); // DeltaV - NanoChat keybinds - common.AddFunction(ContentKeyFunctions.NanoChatNavigateUpUnread); // DeltaV - NanoChat keybinds - common.AddFunction(ContentKeyFunctions.NanoChatNavigateDownUnread); // DeltaV - NanoChat keybinds + // DeltaV - Begin NanoChat keybinds + common.AddFunction(ContentKeyFunctions.NanoChatNavigateUp); + common.AddFunction(ContentKeyFunctions.NanoChatNavigateDown); + common.AddFunction(ContentKeyFunctions.NanoChatNavigateUpUnread); + common.AddFunction(ContentKeyFunctions.NanoChatNavigateDownUnread); + // DeltaV - End NanoChat keybinds // Not in engine, because engine cannot check for sanbox/admin status before starting placement. common.AddFunction(ContentKeyFunctions.EditorCopyObject); diff --git a/Content.Client/Options/UI/Tabs/KeyRebindTab.xaml.cs b/Content.Client/Options/UI/Tabs/KeyRebindTab.xaml.cs index df2f8df1ee7..5a8fe55dc95 100644 --- a/Content.Client/Options/UI/Tabs/KeyRebindTab.xaml.cs +++ b/Content.Client/Options/UI/Tabs/KeyRebindTab.xaml.cs @@ -240,11 +240,13 @@ void AddCheckBox(string checkBoxName, bool currentState, Action OnPressed?.Invoke(_number); ChatButton.OnPressed += _pressHandler; - NameLabel.Text = Truncate(recipient.Name, IdCardConsoleComponent.MaxFullNameLength); - JobLabel.Text = Truncate(recipient.JobTitle ?? "", IdCardConsoleComponent.MaxJobTitleLength); + NameLabel.Text = SharedNanoChatSystem.Truncate(recipient.Name, IdCardConsoleComponent.MaxFullNameLength); + JobLabel.Text = SharedNanoChatSystem.Truncate(recipient.JobTitle ?? "", IdCardConsoleComponent.MaxJobTitleLength); JobLabel.Visible = !string.IsNullOrEmpty(recipient.JobTitle); UnreadIndicator.Visible = recipient.HasUnread; ChatButton.ModulateSelfOverride = isSelected ? NanoChatMessageBubble.OwnMessageColor : null; } - - /// - /// Truncates a string to a maximum length. - /// - private static string Truncate(string text, int maxLength) => - text.Length <= maxLength - ? text - : text[..(maxLength - 3)] + "..."; } diff --git a/Content.Server/_DV/CartridgeLoader/Cartridges/NanoChatCartridgeSystem.cs b/Content.Server/_DV/CartridgeLoader/Cartridges/NanoChatCartridgeSystem.cs index 46829541b1c..18ae56eecbe 100644 --- a/Content.Server/_DV/CartridgeLoader/Cartridges/NanoChatCartridgeSystem.cs +++ b/Content.Server/_DV/CartridgeLoader/Cartridges/NanoChatCartridgeSystem.cs @@ -292,7 +292,6 @@ private void HandleToggleMute(Entity card) private void HandleToggleMuteChat(Entity card, NanoChatUiMessageEvent msg) { - Log.Debug($"Toggling mute for chat #{msg.RecipientNumber:D4} on card #{card.Comp.Number:D4}"); if (msg.RecipientNumber is not uint chat) return; _nanoChat.ToggleChatMuted((card, card.Comp), chat); @@ -528,7 +527,7 @@ recipient.Comp.PdaUid is not { } pdaUid || var title = ""; if (!string.IsNullOrEmpty(senderRecipient.JobTitle)) { - var titleRecipient = Truncate(Loc.GetString("nano-chat-new-message-title-recipient", + var titleRecipient = SharedNanoChatSystem.Truncate(Loc.GetString("nano-chat-new-message-title-recipient", ("sender", senderName), ("jobTitle", senderRecipient.JobTitle)), NotificationTitleMaxLength, " \\[...\\]"); title = Loc.GetString("nano-chat-new-message-title", ("sender", titleRecipient)); } @@ -537,7 +536,7 @@ recipient.Comp.PdaUid is not { } pdaUid || _cartridge.SendNotification(pdaUid, title, - Loc.GetString("nano-chat-new-message-body", ("message", Truncate(message.Content, NotificationMaxLength, " [...]"))), + Loc.GetString("nano-chat-new-message-body", ("message", SharedNanoChatSystem.Truncate(message.Content, NotificationMaxLength, " [...]"))), loader); } @@ -598,14 +597,6 @@ private void UpdateUIForAllCards() return null; } - /// - /// Truncates a string to a maximum length. - /// - private static string Truncate(string text, int maxLength, string overflowText = "...") => - text.Length <= maxLength - ? text - : text[..(maxLength - overflowText.Length)] + overflowText; - private void OnUiReady(Entity ent, ref CartridgeUiReadyEvent args) { _cartridge.RegisterBackgroundProgram(args.Loader, ent); diff --git a/Content.Shared/Input/ContentKeyFunctions.cs b/Content.Shared/Input/ContentKeyFunctions.cs index 15095bd4ba5..018cab4dc84 100644 --- a/Content.Shared/Input/ContentKeyFunctions.cs +++ b/Content.Shared/Input/ContentKeyFunctions.cs @@ -24,10 +24,12 @@ public static class ContentKeyFunctions public static readonly BoundKeyFunction CycleChatChannelForward = "CycleChatChannelForward"; public static readonly BoundKeyFunction CycleChatChannelBackward = "CycleChatChannelBackward"; public static readonly BoundKeyFunction EscapeContext = "EscapeContext"; - public static readonly BoundKeyFunction NanoChatNavigateUp = "NanoChatNavigateUp"; // DeltaV - Keybinds for NanoChat - public static readonly BoundKeyFunction NanoChatNavigateDown = "NanoChatNavigateDown"; // DeltaV - Keybinds for NanoChat - public static readonly BoundKeyFunction NanoChatNavigateUpUnread = "NanoChatNavigateUpUnread"; // DeltaV - Keybinds for NanoChat - public static readonly BoundKeyFunction NanoChatNavigateDownUnread = "NanoChatNavigateDownUnread"; // DeltaV - Keybinds for NanoChat + // DeltaV - Begin NanoChat keybinds + public static readonly BoundKeyFunction NanoChatNavigateUp = "NanoChatNavigateUp"; + public static readonly BoundKeyFunction NanoChatNavigateDown = "NanoChatNavigateDown"; + public static readonly BoundKeyFunction NanoChatNavigateUpUnread = "NanoChatNavigateUpUnread"; + public static readonly BoundKeyFunction NanoChatNavigateDownUnread = "NanoChatNavigateDownUnread"; + // DeltaV - End NanoChat keybinds public static readonly BoundKeyFunction OpenCharacterMenu = "OpenCharacterMenu"; public static readonly BoundKeyFunction OpenEmotesMenu = "OpenEmotesMenu"; public static readonly BoundKeyFunction OpenCraftingMenu = "OpenCraftingMenu"; diff --git a/Content.Shared/_DV/NanoChat/SharedNanoChatSystem.cs b/Content.Shared/_DV/NanoChat/SharedNanoChatSystem.cs index cac22233cbf..cd88e8a07b0 100644 --- a/Content.Shared/_DV/NanoChat/SharedNanoChatSystem.cs +++ b/Content.Shared/_DV/NanoChat/SharedNanoChatSystem.cs @@ -31,6 +31,16 @@ private void OnExamined(Entity ent, ref ExaminedEvent arg args.PushMarkup(Loc.GetString("nanochat-card-examine-number", ("number", $"{ent.Comp.Number:D4}"))); } + /// + /// Helper Method for truncating a string to maximum length + /// + public static string Truncate(string text, int maxLength, string overflowText = "...") + { + return text.Length > maxLength + ? text[..(maxLength - overflowText.Length)] + overflowText + : text; + } + #region Public API Methods /// diff --git a/Resources/keybinds.yml b/Resources/keybinds.yml index fe117b96d46..a7d9a579467 100644 --- a/Resources/keybinds.yml +++ b/Resources/keybinds.yml @@ -165,13 +165,11 @@ binds: - function: SwapHands type: State key: X - # DeltaV - Swap Hands Reversed Start + # DeltaV - Begin custom keybinds - function: SwapHandsReversed type: State key: X mod1: Shift - # DeltaV - Swap Hands Reversed End - # DeltaV - NanoChat keybinds Start - function: NanoChatNavigateUp type: State key: Up @@ -190,7 +188,7 @@ binds: key: Down mod1: Alt mod2: Shift - # DeltaV - NanoChat keybinds End + # DeltaV - End custom keybinds - function: MoveStoredItem type: State key: MouseLeft From d9abbb24139937e6e85a61437b4d5484173703ff Mon Sep 17 00:00:00 2001 From: Tobias Berger Date: Sun, 23 Feb 2025 14:59:14 +0100 Subject: [PATCH 14/15] Move Loc to _DV, don't register system as manager --- Content.Client/IoC/ClientContentIoC.cs | 1 - Resources/Locale/en-US/_DV/escape-menu/options-menu.ftl | 7 +++++++ Resources/Locale/en-US/escape-menu/ui/options-menu.ftl | 7 ------- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/Content.Client/IoC/ClientContentIoC.cs b/Content.Client/IoC/ClientContentIoC.cs index 891f66fed11..223a53fe239 100644 --- a/Content.Client/IoC/ClientContentIoC.cs +++ b/Content.Client/IoC/ClientContentIoC.cs @@ -56,7 +56,6 @@ public static void Register() collection.Register(); collection.Register(); collection.Register(); - collection.Register(); // DeltaV: NanoChat collection.Register(); collection.Register(); collection.Register(); diff --git a/Resources/Locale/en-US/_DV/escape-menu/options-menu.ftl b/Resources/Locale/en-US/_DV/escape-menu/options-menu.ftl index 725272c8a74..d92cffcc7b0 100644 --- a/Resources/Locale/en-US/_DV/escape-menu/options-menu.ftl +++ b/Resources/Locale/en-US/_DV/escape-menu/options-menu.ftl @@ -3,3 +3,10 @@ ui-options-general-forknotice = Note: These settings are fork-specific and might ui-options-no-filters = Disable species vision filters ui-options-function-swap-hands-reversed = Swap hands (reversed) + +## DeltaV NanoChat keybinds +ui-options-header-nano-chat = NanoChat +ui-options-function-nano-chat-navigate-up = Navigate up +ui-options-function-nano-chat-navigate-down = Navigate down +ui-options-function-nano-chat-navigate-up-unread = Navigate up to next unread +ui-options-function-nano-chat-navigate-down-unread = Navigate down to next unread diff --git a/Resources/Locale/en-US/escape-menu/ui/options-menu.ftl b/Resources/Locale/en-US/escape-menu/ui/options-menu.ftl index ce36d2851b3..8473b9813e5 100644 --- a/Resources/Locale/en-US/escape-menu/ui/options-menu.ftl +++ b/Resources/Locale/en-US/escape-menu/ui/options-menu.ftl @@ -284,13 +284,6 @@ ui-options-reduced-motion = Reduce motion of visual effects ui-options-chat-window-opacity = Chat window opacity ui-options-screen-shake-intensity = Screen shake intensity -## DeltaV NanoChat keybinds -ui-options-header-nano-chat = NanoChat -ui-options-function-nano-chat-navigate-up = Navigate up -ui-options-function-nano-chat-navigate-down = Navigate down -ui-options-function-nano-chat-navigate-up-unread = Navigate up to next unread -ui-options-function-nano-chat-navigate-down-unread = Navigate down to next unread - ## Shitmed Change ui-options-header-targeting = Targeting ui-options-function-target-head = Target head From beeb9cda6af3d45537d27935fc6afdbc18a2628c Mon Sep 17 00:00:00 2001 From: Tobias Berger Date: Sun, 23 Feb 2025 16:46:09 +0100 Subject: [PATCH 15/15] I'm so smart :) --- Content.Client/IoC/ClientContentIoC.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/Content.Client/IoC/ClientContentIoC.cs b/Content.Client/IoC/ClientContentIoC.cs index 223a53fe239..370188e3c61 100644 --- a/Content.Client/IoC/ClientContentIoC.cs +++ b/Content.Client/IoC/ClientContentIoC.cs @@ -2,7 +2,6 @@ using Content.Client.Changelog; using Content.Client.Chat.Managers; using Content.Client.Clickable; -using Content.Client._DV.NanoChat; // DeltaV: NanoChat using Content.Client.DebugMon; using Content.Client.Eui; using Content.Client.Fullscreen; @@ -25,7 +24,6 @@ using Content.Shared.Chat; using Content.Shared.Players.PlayTimeTracking; using Content.Shared.Players.RateLimiting; -using Robust.Client.GameObjects; // DeltaV: NanoChat namespace Content.Client.IoC {