Files
OldThink/Content.Client/_White/Administration/HoursPanelSystems/HoursPanel.xaml.cs

141 lines
4.7 KiB
C#
Raw Normal View History

using Content.Shared.Administration;
using Content.Shared.Roles;
using JetBrains.Annotations;
using Robust.Client.AutoGenerated;
using Robust.Client.Console;
using Robust.Client.UserInterface.CustomControls;
using Robust.Client.UserInterface.XAML;
using Robust.Shared.Prototypes;
using static Robust.Client.UserInterface.Controls.LineEdit;
using Content.Shared._White.Administration;
using Robust.Client.UserInterface.Controls;
2025-02-09 19:55:39 +03:00
using System.Diagnostics.CodeAnalysis;
using Robust.Client.Graphics.Clyde;
namespace Content.Client._White.Administration.HoursPanelSystems;
[GenerateTypedNameReferences]
[UsedImplicitly]
public sealed partial class HoursPanel : DefaultWindow
{
public HoursPanel()
{
RobustXamlLoader.Load(this);
var entityManager = IoCManager.Resolve<IEntityManager>();
2025-02-09 19:55:39 +03:00
var hoursPanelSystem = entityManager.System<HoursPanelSystem>();
hoursPanelSystem.Panel = this;
var roles = new Dictionary<int, string>();
PlayerNameLine.OnTextChanged += _ => OnNamesChanged();
2025-02-09 19:55:39 +03:00
PlayerNameLine.OnTextEntered += _ => OnNameSubmited(hoursPanelSystem, roles);
PlayerList.OnSelectionChanged += OnPlayerSelectionChanged;
HourButton.OnPressed += _ => AddMinutes(60);
MinutesLine.OnTextChanged += UpdateButtonsText;
2025-02-09 19:55:39 +03:00
RoleOption.OnItemSelected += args => OnItemSelected(args, hoursPanelSystem, roles);
SubmitButton.OnPressed += _ => OnSubmitButtonOnPressed(roles, hoursPanelSystem);
2025-01-01 16:43:19 +03:00
SaveButton.OnPressed += _ => OnSaveButtonOnPressed();
OnNamesChanged();
InitRoleList(roles);
}
public void UpdateTime(TimeSpan? time)
{
2025-02-09 19:55:39 +03:00
if (time != null)
{
var t = (TimeSpan) time;
TimeDisplayer.Text = $"Время игры: {Math.Floor(t.TotalHours) + string.Format(" ч {0:%m} м", t)}";
}
else
2025-02-09 19:55:39 +03:00
TimeDisplayer.Text = $"Время игры: нет данных";
}
2025-01-01 16:43:19 +03:00
private void OnItemSelected(OptionButton.ItemSelectedEventArgs args, HoursPanelSystem owner, Dictionary<int, string> roles)
{
RoleOption.SelectId(args.Id);
OnNameSubmited(owner, roles);
2025-01-01 02:29:57 +03:00
}
private void OnNameSubmited(HoursPanelSystem owner, Dictionary<int, string> roles)
{
if (string.IsNullOrWhiteSpace(PlayerNameLine.Text))
return;
owner.SendPlayerTimeRequest(new HoursPanelMessageToServer(PlayerNameLine.Text, roles[RoleOption.SelectedId]));
}
2025-01-01 16:43:19 +03:00
private void InitRoleList(Dictionary<int, string> roles)
2025-01-01 02:29:57 +03:00
{
var roleInd = 0;
RoleOption.AddItem("общее", roleInd);
2025-01-01 16:43:19 +03:00
roles.Add(roleInd, "Overall");
roleInd++;
2025-01-01 02:29:57 +03:00
foreach (var dep in IoCManager.Resolve<IPrototypeManager>().EnumeratePrototypes<DepartmentPrototype>())
{
foreach (var role in dep.Roles)
{
RoleOption.AddItem(Loc.GetString($"Job{role.Id}"), roleInd);
2025-01-01 16:43:19 +03:00
roles.Add(roleInd, $"Job{role.Id}");
roleInd++;
2025-01-01 02:29:57 +03:00
}
}
RoleOption.SelectId(0);
}
private bool TryGetMinutes(string str, out uint minutes)
{
minutes = 0;
return !string.IsNullOrWhiteSpace(str) && uint.TryParse(str, out minutes);
}
private void AddMinutes(uint add)
{
if (!TryGetMinutes(MinutesLine.Text, out var minutes))
minutes = 0;
MinutesLine.Text = $"{minutes + add}";
UpdateButtons(minutes + add);
2025-01-01 16:43:19 +03:00
OnNamesChanged();
}
private void UpdateButtonsText(LineEditEventArgs obj)
{
if (!TryGetMinutes(obj.Text, out var minutes))
return;
UpdateButtons(minutes);
2025-01-01 16:43:19 +03:00
OnNamesChanged();
}
private void UpdateButtons(uint minutes)
{
HourButton.Text = $"+1h ({minutes / 60})";
}
private void OnNamesChanged()
{
SubmitButton.Disabled = string.IsNullOrEmpty(PlayerNameLine.Text) || !TryGetMinutes(MinutesLine.Text, out _);
}
private void OnPlayerSelectionChanged(PlayerInfo? player)
{
PlayerNameLine.Text = player?.Username ?? string.Empty;
OnNamesChanged();
}
2025-02-09 19:55:39 +03:00
private void OnSubmitButtonOnPressed(Dictionary<int, string> roles, HoursPanelSystem owner)
{
IoCManager.Resolve<IClientConsoleHost>().ExecuteCommand(
$"playtime_addrole {PlayerNameLine.Text} {roles[RoleOption.SelectedId]} {MinutesLine.Text}");
2025-01-01 16:43:19 +03:00
SaveButton.Disabled = false;
2025-02-09 19:55:39 +03:00
owner.SendPlayerTimeRequest(new HoursPanelMessageToServer(PlayerNameLine.Text, roles[RoleOption.SelectedId]));
2025-01-01 16:43:19 +03:00
}
private void OnSaveButtonOnPressed()
{
IoCManager.Resolve<IClientConsoleHost>().ExecuteCommand(
$"playtime_save {PlayerNameLine.Text}");
SaveButton.Disabled = true;
}
}