mirror of
https://github.com/space-syndicate/space-station-14.git
synced 2026-10-09 18:31:17 +03:00
137 lines
5.1 KiB
C#
137 lines
5.1 KiB
C#
using Content.Client.Info;
|
|
using Content.Client.Info.PlaytimeStats;
|
|
using Content.Client.Resources;
|
|
using Content.Corvax.Interfaces.Client;
|
|
using Content.Shared.CCVar;
|
|
using Content.Shared.Preferences;
|
|
using Robust.Client.AutoGenerated;
|
|
using Robust.Client.Graphics;
|
|
using Robust.Client.ResourceManagement;
|
|
using Robust.Client.UserInterface;
|
|
using Robust.Client.UserInterface.Controls;
|
|
using Robust.Client.UserInterface.XAML;
|
|
using Robust.Shared.Configuration;
|
|
using Robust.Shared.Player;
|
|
using Robust.Shared.Prototypes;
|
|
|
|
namespace Content.Client.Lobby.UI
|
|
{
|
|
/// <summary>
|
|
/// Holds the entire character setup GUI, from character picks to individual character editing.
|
|
/// </summary>
|
|
[GenerateTypedNameReferences]
|
|
public sealed partial class CharacterSetupGui : Control
|
|
{
|
|
[Dependency] private IClientPreferencesManager _preferencesManager = default!;
|
|
[Dependency] private IPrototypeManager _protomanager = default!;
|
|
[Dependency] private IResourceCache _resourceCache = default!;
|
|
[Dependency] private IConfigurationManager _cfg = default!;
|
|
[Dependency] private ISharedPlayerManager _playerManager = default!;
|
|
|
|
private readonly Button _createNewCharacterButton;
|
|
|
|
public event Action<int>? SelectCharacter;
|
|
public event Action<int>? DeleteCharacter;
|
|
|
|
public CharacterSetupGui(HumanoidProfileEditor profileEditor)
|
|
{
|
|
RobustXamlLoader.Load(this);
|
|
IoCManager.InjectDependencies(this);
|
|
|
|
var panelTex = _resourceCache.GetTexture("/Textures/Interface/Nano/button.svg.96dpi.png");
|
|
var back = new StyleBoxTexture
|
|
{
|
|
Texture = panelTex,
|
|
Modulate = new Color(37, 37, 42)
|
|
};
|
|
back.SetPatchMargin(StyleBox.Margin.All, 10);
|
|
|
|
BackgroundPanel.PanelOverride = back;
|
|
|
|
_createNewCharacterButton = new Button
|
|
{
|
|
Text = Loc.GetString("character-setup-gui-create-new-character-button"),
|
|
};
|
|
|
|
_createNewCharacterButton.OnPressed += args =>
|
|
{
|
|
_preferencesManager.CreateCharacter(HumanoidCharacterProfile.Random().WithJobFromCvar(_cfg));
|
|
ReloadCharacterPickers();
|
|
args.Event.Handle();
|
|
};
|
|
|
|
CharEditor.AddChild(profileEditor);
|
|
RulesButton.OnPressed += _ => new RulesAndInfoWindow().Open();
|
|
|
|
StatsButton.OnPressed += _ => new PlaytimeStatsWindow().OpenCentered();
|
|
|
|
_cfg.OnValueChanged(CCVars.SeeOwnNotes, p => AdminRemarksButton.Visible = p, true);
|
|
_cfg.OnValueChanged(CCVars.GameMaxCharacterSlots, _ => ReloadCharacterPickers());
|
|
// Corvax-Sponsors-Start
|
|
if (IoCManager.Instance!.TryResolveType<ISponsorWindowCreator>(out var creator))
|
|
{
|
|
SponsorButton.Visible = true;
|
|
SponsorButton.OnPressed += _ => creator.OpenWindow();
|
|
}
|
|
// Corvax-Sponsors-End
|
|
}
|
|
|
|
/// <summary>
|
|
/// Disposes and reloads all character picker buttons from the preferences data.
|
|
/// </summary>
|
|
public void ReloadCharacterPickers()
|
|
{
|
|
_createNewCharacterButton.Orphan();
|
|
Characters.RemoveAllChildren();
|
|
|
|
var numberOfFullSlots = 0;
|
|
var characterButtonsGroup = new ButtonGroup();
|
|
|
|
if (!_preferencesManager.ServerDataLoaded)
|
|
{
|
|
return;
|
|
}
|
|
|
|
var maxCharactersSlots = _cfg.GetCVar(CCVars.GameMaxCharacterSlots);
|
|
|
|
_createNewCharacterButton.ToolTip =
|
|
Loc.GetString("character-setup-gui-create-new-character-button-tooltip",
|
|
("maxCharacters", maxCharactersSlots));
|
|
|
|
var selectedSlot = _preferencesManager.Preferences?.SelectedCharacterIndex;
|
|
|
|
foreach (var (slot, character) in _preferencesManager.Preferences!.Characters)
|
|
{
|
|
numberOfFullSlots++;
|
|
var characterPickerButton = new CharacterPickerButton(_protomanager,
|
|
_playerManager,
|
|
characterButtonsGroup,
|
|
character,
|
|
slot == selectedSlot);
|
|
|
|
if (slot >= maxCharactersSlots)
|
|
{
|
|
characterPickerButton.SetOnlyStyleClass(ContainerButton.StylePseudoClassDisabled);
|
|
characterPickerButton.ToolTip =
|
|
Loc.GetString("character-setup-gui-create-new-character-button-tooltip",
|
|
("maxCharacters", maxCharactersSlots));
|
|
}
|
|
|
|
Characters.AddChild(characterPickerButton);
|
|
|
|
characterPickerButton.OnPressed += args =>
|
|
{
|
|
SelectCharacter?.Invoke(slot);
|
|
};
|
|
|
|
characterPickerButton.OnDeletePressed += () =>
|
|
{
|
|
DeleteCharacter?.Invoke(slot);
|
|
};
|
|
}
|
|
|
|
_createNewCharacterButton.Disabled = numberOfFullSlots >= maxCharactersSlots;
|
|
Characters.AddChild(_createNewCharacterButton);
|
|
}
|
|
}
|
|
}
|