1
0

CharacterSetupGui.xaml.cs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. using Content.Client.Info;
  2. using Content.Client.Info.PlaytimeStats;
  3. using Content.Client.Resources;
  4. using Content.Shared.CCVar;
  5. using Content.Shared.Preferences;
  6. using Robust.Client.AutoGenerated;
  7. using Robust.Client.Graphics;
  8. using Robust.Client.ResourceManagement;
  9. using Robust.Client.UserInterface;
  10. using Robust.Client.UserInterface.Controls;
  11. using Robust.Client.UserInterface.XAML;
  12. using Robust.Shared.Configuration;
  13. using Robust.Shared.Prototypes;
  14. namespace Content.Client.Lobby.UI
  15. {
  16. /// <summary>
  17. /// Holds the entire character setup GUI, from character picks to individual character editing.
  18. /// </summary>
  19. [GenerateTypedNameReferences]
  20. public sealed partial class CharacterSetupGui : Control
  21. {
  22. [Dependency] private readonly IClientPreferencesManager _preferencesManager = default!;
  23. [Dependency] private readonly IEntityManager _entManager = default!;
  24. [Dependency] private readonly IPrototypeManager _protomanager = default!;
  25. [Dependency] private readonly IResourceCache _resourceCache = default!;
  26. [Dependency] private readonly IConfigurationManager _cfg = default!;
  27. private readonly Button _createNewCharacterButton;
  28. public event Action<int>? SelectCharacter;
  29. public event Action<int>? DeleteCharacter;
  30. public CharacterSetupGui(HumanoidProfileEditor profileEditor)
  31. {
  32. RobustXamlLoader.Load(this);
  33. IoCManager.InjectDependencies(this);
  34. var panelTex = _resourceCache.GetTexture("/Textures/Interface/Nano/button.svg.96dpi.png");
  35. var back = new StyleBoxTexture
  36. {
  37. Texture = panelTex,
  38. Modulate = new Color(37, 37, 42)
  39. };
  40. back.SetPatchMargin(StyleBox.Margin.All, 10);
  41. BackgroundPanel.PanelOverride = back;
  42. _createNewCharacterButton = new Button
  43. {
  44. Text = Loc.GetString("character-setup-gui-create-new-character-button"),
  45. };
  46. _createNewCharacterButton.OnPressed += args =>
  47. {
  48. _preferencesManager.CreateCharacter(HumanoidCharacterProfile.Random());
  49. ReloadCharacterPickers();
  50. args.Event.Handle();
  51. };
  52. CharEditor.AddChild(profileEditor);
  53. RulesButton.OnPressed += _ => new RulesAndInfoWindow().Open();
  54. StatsButton.OnPressed += _ => new PlaytimeStatsWindow().OpenCentered();
  55. _cfg.OnValueChanged(CCVars.SeeOwnNotes, p => AdminRemarksButton.Visible = p, true);
  56. }
  57. /// <summary>
  58. /// Disposes and reloads all character picker buttons from the preferences data.
  59. /// </summary>
  60. public void ReloadCharacterPickers()
  61. {
  62. _createNewCharacterButton.Orphan();
  63. Characters.DisposeAllChildren();
  64. var numberOfFullSlots = 0;
  65. var characterButtonsGroup = new ButtonGroup();
  66. if (!_preferencesManager.ServerDataLoaded)
  67. {
  68. return;
  69. }
  70. _createNewCharacterButton.ToolTip =
  71. Loc.GetString("character-setup-gui-create-new-character-button-tooltip",
  72. ("maxCharacters", _preferencesManager.Settings!.MaxCharacterSlots));
  73. var selectedSlot = _preferencesManager.Preferences?.SelectedCharacterIndex;
  74. foreach (var (slot, character) in _preferencesManager.Preferences!.Characters)
  75. {
  76. numberOfFullSlots++;
  77. var characterPickerButton = new CharacterPickerButton(_entManager,
  78. _protomanager,
  79. characterButtonsGroup,
  80. character,
  81. slot == selectedSlot);
  82. Characters.AddChild(characterPickerButton);
  83. characterPickerButton.OnPressed += args =>
  84. {
  85. SelectCharacter?.Invoke(slot);
  86. };
  87. characterPickerButton.OnDeletePressed += () =>
  88. {
  89. DeleteCharacter?.Invoke(slot);
  90. };
  91. }
  92. _createNewCharacterButton.Disabled = numberOfFullSlots >= _preferencesManager.Settings.MaxCharacterSlots;
  93. Characters.AddChild(_createNewCharacterButton);
  94. }
  95. }
  96. }