| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- using Content.Client.Info;
- using Content.Client.Info.PlaytimeStats;
- using Content.Client.Resources;
- 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.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 readonly IClientPreferencesManager _preferencesManager = default!;
- [Dependency] private readonly IEntityManager _entManager = default!;
- [Dependency] private readonly IPrototypeManager _protomanager = default!;
- [Dependency] private readonly IResourceCache _resourceCache = default!;
- [Dependency] private readonly IConfigurationManager _cfg = 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());
- 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);
- }
- /// <summary>
- /// Disposes and reloads all character picker buttons from the preferences data.
- /// </summary>
- public void ReloadCharacterPickers()
- {
- _createNewCharacterButton.Orphan();
- Characters.DisposeAllChildren();
- var numberOfFullSlots = 0;
- var characterButtonsGroup = new ButtonGroup();
- if (!_preferencesManager.ServerDataLoaded)
- {
- return;
- }
- _createNewCharacterButton.ToolTip =
- Loc.GetString("character-setup-gui-create-new-character-button-tooltip",
- ("maxCharacters", _preferencesManager.Settings!.MaxCharacterSlots));
- var selectedSlot = _preferencesManager.Preferences?.SelectedCharacterIndex;
- foreach (var (slot, character) in _preferencesManager.Preferences!.Characters)
- {
- numberOfFullSlots++;
- var characterPickerButton = new CharacterPickerButton(_entManager,
- _protomanager,
- characterButtonsGroup,
- character,
- slot == selectedSlot);
- Characters.AddChild(characterPickerButton);
- characterPickerButton.OnPressed += args =>
- {
- SelectCharacter?.Invoke(slot);
- };
- characterPickerButton.OnDeletePressed += () =>
- {
- DeleteCharacter?.Invoke(slot);
- };
- }
- _createNewCharacterButton.Disabled = numberOfFullSlots >= _preferencesManager.Settings.MaxCharacterSlots;
- Characters.AddChild(_createNewCharacterButton);
- }
- }
- }
|