| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- using System;
- using Content.Shared.Nuke;
- using Robust.Client.AutoGenerated;
- using Robust.Client.UserInterface;
- using Robust.Client.UserInterface.Controls;
- using Robust.Client.UserInterface.CustomControls;
- using Robust.Client.UserInterface.XAML;
- using Robust.Shared.Localization;
- namespace Content.Client.Nuke
- {
- [GenerateTypedNameReferences]
- public sealed partial class NukeMenu : DefaultWindow
- {
- public event Action<int>? OnKeypadButtonPressed;
- public event Action? OnClearButtonPressed;
- public event Action? OnEnterButtonPressed;
- public NukeMenu()
- {
- RobustXamlLoader.Load(this);
- FillKeypadGrid();
- }
- /// <summary>
- /// Fill keypad buttons in keypad grid
- /// </summary>
- private void FillKeypadGrid()
- {
- // add 3 rows of keypad buttons (1-9)
- for (var i = 1; i <= 9; i++)
- {
- AddKeypadButton(i);
- }
- // clear button
- var clearBtn = new Button()
- {
- Text = "C"
- };
- clearBtn.OnPressed += _ => OnClearButtonPressed?.Invoke();
- KeypadGrid.AddChild(clearBtn);
- // zero button
- AddKeypadButton(0);
- // enter button
- var enterBtn = new Button()
- {
- Text = "E"
- };
- enterBtn.OnPressed += _ => OnEnterButtonPressed?.Invoke();
- KeypadGrid.AddChild(enterBtn);
- }
- private void AddKeypadButton(int i)
- {
- var btn = new Button()
- {
- Text = i.ToString()
- };
- btn.OnPressed += _ => OnKeypadButtonPressed?.Invoke(i);
- KeypadGrid.AddChild(btn);
- }
- public void UpdateState(NukeUiState state)
- {
- string firstMsg, secondMsg;
- ArmButton.Text = Loc.GetString("nuke-user-interface-arm-button");
- switch (state.Status)
- {
- case NukeStatus.AWAIT_DISK:
- firstMsg = Loc.GetString("nuke-user-interface-first-status-device-locked");
- secondMsg = Loc.GetString("nuke-user-interface-second-status-await-disk");
- break;
- case NukeStatus.AWAIT_CODE:
- firstMsg = Loc.GetString("nuke-user-interface-first-status-input-code");
- secondMsg = Loc.GetString("nuke-user-interface-second-status-current-code",
- ("code", VisualizeCode(state.EnteredCodeLength, state.MaxCodeLength)));
- break;
- case NukeStatus.AWAIT_ARM:
- firstMsg = Loc.GetString("nuke-user-interface-first-status-device-ready");
- secondMsg = Loc.GetString("nuke-user-interface-second-status-time",
- ("time", state.RemainingTime));
- break;
- case NukeStatus.ARMED:
- firstMsg = Loc.GetString("nuke-user-interface-first-status-device-armed");
- secondMsg = Loc.GetString("nuke-user-interface-second-status-time",
- ("time", state.RemainingTime));
- ArmButton.Text = Loc.GetString("nuke-user-interface-disarm-button");
- break;
- case NukeStatus.COOLDOWN:
- firstMsg = Loc.GetString("nuke-user-interface-first-status-device-cooldown");
- secondMsg = Loc.GetString("nuke-user-interface-second-status-cooldown-time",
- ("time", state.CooldownTime));
- break;
- default:
- // shouldn't normally be here
- firstMsg = Loc.GetString("nuke-user-interface-status-error");
- secondMsg = Loc.GetString("nuke-user-interface-status-error");
- break;
- }
- FirstStatusLabel.Text = firstMsg;
- SecondStatusLabel.Text = secondMsg;
- EjectButton.Disabled = !state.DiskInserted || state.Status == NukeStatus.ARMED || !state.IsAnchored;
- AnchorButton.Disabled = state.Status == NukeStatus.ARMED;
- AnchorButton.Pressed = state.IsAnchored;
- ArmButton.Disabled = !state.AllowArm || !state.IsAnchored;
- }
- private string VisualizeCode(int codeLength, int maxLength)
- {
- var code = new string('*', codeLength);
- var blanksCount = maxLength - codeLength;
- var blanks = new string('_', blanksCount);
- return code + blanks;
- }
- }
- }
|