private CharacterSetupGui? _characterSetup;
private HumanoidProfileEditor? _profileEditor;
+ private CharacterSetupGuiSavePanel? _savePanel;
/// <summary>
/// This is the characher preview panel in the chat. This should only update if their character updates.
ReloadCharacterSetup();
}
+ private void CloseProfileEditor()
+ {
+ if (_profileEditor == null)
+ return;
+
+ _profileEditor.SetProfile(null, null);
+ _profileEditor.Visible = false;
+
+ if (_stateManager.CurrentState is LobbyState lobbyGui)
+ {
+ lobbyGui.SwitchState(LobbyGui.LobbyGuiState.Default);
+ }
+ }
+
+ private void OpenSavePanel()
+ {
+ if (_savePanel is { IsOpen: true })
+ return;
+
+ _savePanel = new CharacterSetupGuiSavePanel();
+
+ _savePanel.SaveButton.OnPressed += _ =>
+ {
+ SaveProfile();
+
+ _savePanel.Close();
+
+ CloseProfileEditor();
+ };
+
+ _savePanel.NoSaveButton.OnPressed += _ =>
+ {
+ _savePanel.Close();
+
+ CloseProfileEditor();
+ };
+
+ _savePanel.OpenCentered();
+ }
+
private (CharacterSetupGui, HumanoidProfileEditor) EnsureGui()
{
if (_characterSetup != null && _profileEditor != null)
_characterSetup.CloseButton.OnPressed += _ =>
{
- // Reset sliders etc.
- _profileEditor.SetProfile(null, null);
- _profileEditor.Visible = false;
-
- if (_stateManager.CurrentState is LobbyState lobbyGui)
+ // Open the save panel if we have unsaved changes.
+ if (_profileEditor.Profile != null && _profileEditor.IsDirty)
{
- lobbyGui.SwitchState(LobbyGui.LobbyGuiState.Default);
+ OpenSavePanel();
+
+ return;
}
+
+ // Reset sliders etc.
+ CloseProfileEditor();
};
_profileEditor.Save += SaveProfile;
--- /dev/null
+<DefaultWindow xmlns="https://spacestation14.io"
+ Title="{Loc 'character-setup-gui-save-panel-title'}"
+ Resizable="False">
+
+ <BoxContainer Orientation="Horizontal" SeparationOverride="4" MinSize="200 40">
+ <Button Name="SaveButton" Access="Public" Text="{Loc 'character-setup-gui-save-panel-save'}" StyleClasses="ButtonBig"/>
+ <Button Name="NoSaveButton" Access="Public" Text="{Loc 'character-setup-gui-save-panel-nosave'}" StyleClasses="ButtonBig"/>
+ <Button Name="CancelButton" Access="Public" Text="{Loc 'character-setup-gui-save-panel-cancel'}" StyleClasses="ButtonBig"/>
+ </BoxContainer>
+</DefaultWindow>
--- /dev/null
+using Robust.Client.AutoGenerated;
+using Robust.Client.UserInterface.CustomControls;
+using Robust.Client.UserInterface.XAML;
+
+namespace Content.Client.Lobby.UI;
+
+[GenerateTypedNameReferences]
+public sealed partial class CharacterSetupGuiSavePanel : DefaultWindow
+{
+ public CharacterSetupGuiSavePanel()
+ {
+ RobustXamlLoader.Load(this);
+
+ CancelButton.OnPressed += _ =>
+ {
+ Close();
+ };
+
+ CloseButton.Visible = false;
+ }
+}
character-setup-gui-create-new-character-button-tooltip = A maximum of {$maxCharacters} characters are allowed.
character-setup-gui-character-picker-button-delete-button = Delete
character-setup-gui-character-picker-button-confirm-delete-button = Confirm
+
+character-setup-gui-save-panel-title = Unsaved character changes
+character-setup-gui-save-panel-save = Save
+character-setup-gui-save-panel-nosave = Don't save
+character-setup-gui-save-panel-cancel = Cancel
\ No newline at end of file