Files
wwdpublic/Content.Client/_NC/Radio/UI/HandheldRadioMenu.xaml.cs
sleepyyapril 5eb30586c9 Handheld Frequencies (#1574)
<!--
This is a semi-strict format, you can add/remove sections as needed but
the order/format should be kept the same
Remove these comments before submitting
-->

# Description

<!--
Explain this PR in as much detail as applicable

Some example prompts to consider:
How might this affect the game? The codebase?
What might be some alternatives to this?
How/Who does this benefit/hurt [the game/codebase]?
-->

Adds frequencies to handheld radios. Ports [this
PR](https://github.com/new-frontiers-14/frontier-station-14/pull/1833)
with changes.

![image](https://github.com/user-attachments/assets/e39d8fce-7fa3-4e0a-918a-506b0446de35)

---

# Changelog

<!--
You can add an author after the `🆑` to change the name that appears
in the changelog (ex: `🆑 Death`)
Leaving it blank will default to your GitHub display name
This includes all available types for the changelog
-->

🆑
- add: Added handheld radio frequencies, accessible by pressing your
"Use Item" key while holding one.

---------

Co-authored-by: Whatstone <166147148+whatston3@users.noreply.github.com>
(cherry picked from commit 19a350fc9ae0d958406b3d6018f71ab8af5447c4)
2025-01-20 20:50:30 +03:00

56 lines
1.8 KiB
C#

using Content.Client.UserInterface.Controls;
using Content.Shared._NC.Radio;
using Robust.Client.AutoGenerated;
using Robust.Client.UserInterface.Controls;
using Robust.Client.UserInterface.XAML;
using Robust.Shared.Prototypes;
namespace Content.Client._NC.Radio.UI;
// TODO: Fix silly ui update issues
[GenerateTypedNameReferences]
public sealed partial class HandheldRadioMenu : FancyWindow
{
public event Action<bool>? OnMicPressed;
public event Action<bool>? OnSpeakerPressed;
public event Action<string>? OnFrequencyChanged;
private string _lastFrequency = "1330";
public HandheldRadioMenu()
{
RobustXamlLoader.Load(this);
IoCManager.InjectDependencies(this);
MicButton.OnPressed += args => OnMicPressed?.Invoke(args.Button.Pressed);
SpeakerButton.OnPressed += args => OnSpeakerPressed?.Invoke(args.Button.Pressed);
FrequencyLineEdit.OnTextEntered += e => OnFrequencyChanged?.Invoke(e.Text);
FrequencyLineEdit.OnTextChanged += ValidateText;
FrequencyLineEdit.OnFocusExit += e => OnFrequencyChanged?.Invoke(e.Text);
}
private void ValidateText(LineEdit.LineEditEventArgs args)
{
if (!int.TryParse(args.Text, out int frequency))
{
FrequencyLineEdit.SetText(_lastFrequency);
return;
}
_lastFrequency = args.Text;
}
public void Update(HandheldRadioBoundUIState state)
{
if (state.MicEnabled != MicButton.Pressed)
MicButton.Pressed = state.MicEnabled;
if (state.SpeakerEnabled != SpeakerButton.Pressed)
SpeakerButton.Pressed = state.SpeakerEnabled;
if (state.Frequency.ToString() != FrequencyLineEdit.Text)
FrequencyLineEdit.Text = state.Frequency.ToString();
}
}