diff --git a/Barotrauma/BarotraumaClient/BarotraumaClient.csproj b/Barotrauma/BarotraumaClient/BarotraumaClient.csproj index 032ea9822..c3d99e1ce 100644 --- a/Barotrauma/BarotraumaClient/BarotraumaClient.csproj +++ b/Barotrauma/BarotraumaClient/BarotraumaClient.csproj @@ -214,7 +214,6 @@ - diff --git a/Barotrauma/BarotraumaClient/Source/GUI/GUI.cs b/Barotrauma/BarotraumaClient/Source/GUI/GUI.cs index ec018ff6a..94fbf0e77 100644 --- a/Barotrauma/BarotraumaClient/Source/GUI/GUI.cs +++ b/Barotrauma/BarotraumaClient/Source/GUI/GUI.cs @@ -196,7 +196,7 @@ namespace Barotrauma { if (button.UserData as string == "save") { - SaveUtil.SaveGame(GameMain.GameSession.SaveFile); + SaveUtil.SaveGame(GameMain.GameSession.SavePath); } if (GameMain.NetworkMember != null) diff --git a/Barotrauma/BarotraumaClient/Source/GameSession/GameModes/SinglePlayerCampaign.cs b/Barotrauma/BarotraumaClient/Source/GameSession/GameModes/SinglePlayerCampaign.cs index 50e992f4d..4b1ace179 100644 --- a/Barotrauma/BarotraumaClient/Source/GameSession/GameModes/SinglePlayerCampaign.cs +++ b/Barotrauma/BarotraumaClient/Source/GameSession/GameModes/SinglePlayerCampaign.cs @@ -58,7 +58,7 @@ namespace Barotrauma if (!savedOnStart) { - SaveUtil.SaveGame(GameMain.GameSession.SaveFile); + SaveUtil.SaveGame(GameMain.GameSession.SavePath); savedOnStart = true; } @@ -205,7 +205,7 @@ namespace Barotrauma Map.MoveToNextLocation(); } - SaveUtil.SaveGame(GameMain.GameSession.SaveFile); + SaveUtil.SaveGame(GameMain.GameSession.SavePath); } diff --git a/Barotrauma/BarotraumaClient/Source/GameSession/GameSession.cs b/Barotrauma/BarotraumaClient/Source/GameSession/GameSession.cs index c5d48a0a9..c139e00e1 100644 --- a/Barotrauma/BarotraumaClient/Source/GameSession/GameSession.cs +++ b/Barotrauma/BarotraumaClient/Source/GameSession/GameSession.cs @@ -30,7 +30,7 @@ namespace Barotrauma { Submarine.Unload(); - SaveUtil.LoadGame(saveFile); + SaveUtil.LoadGame(savePath); GameMain.LobbyScreen.Select(); diff --git a/Barotrauma/BarotraumaClient/Source/Screens/CampaignSetupUI.cs b/Barotrauma/BarotraumaClient/Source/Screens/CampaignSetupUI.cs index 9920cf052..b7a189647 100644 --- a/Barotrauma/BarotraumaClient/Source/Screens/CampaignSetupUI.cs +++ b/Barotrauma/BarotraumaClient/Source/Screens/CampaignSetupUI.cs @@ -71,7 +71,8 @@ namespace Barotrauma return false; } - StartNewGame?.Invoke(selectedSub, saveNameBox.Text, seedBox.Text); + string savePath = SaveUtil.CreateSavePath(isMultiplayer ? SaveUtil.SaveType.Multiplayer : SaveUtil.SaveType.Singleplayer, saveNameBox.Text); + StartNewGame?.Invoke(selectedSub, savePath, seedBox.Text); return true; }; @@ -81,7 +82,8 @@ namespace Barotrauma public void CreateDefaultSaveName() { - saveNameBox.Text = SaveUtil.CreateSavePath(); + string savePath = SaveUtil.CreateSavePath(isMultiplayer ? SaveUtil.SaveType.Multiplayer : SaveUtil.SaveType.Singleplayer); + saveNameBox.Text = Path.GetFileNameWithoutExtension(savePath); } public void UpdateSubList() diff --git a/Barotrauma/BarotraumaClient/Source/Screens/LobbyScreen.cs b/Barotrauma/BarotraumaClient/Source/Screens/LobbyScreen.cs index 09bc91aed..ced3193f8 100644 --- a/Barotrauma/BarotraumaClient/Source/Screens/LobbyScreen.cs +++ b/Barotrauma/BarotraumaClient/Source/Screens/LobbyScreen.cs @@ -76,13 +76,11 @@ namespace Barotrauma } locationTitle.Text = "Location: " + campaign.Map.CurrentLocation.Name; - - if (campaignUI == null) - { - campaignUI = new CampaignUI(campaign, bottomPanel); - campaignUI.StartRound = StartRound; - campaignUI.OnLocationSelected = SelectLocation; - } + + bottomPanel.ClearChildren(); + campaignUI = new CampaignUI(campaign, bottomPanel); + campaignUI.StartRound = StartRound; + campaignUI.OnLocationSelected = SelectLocation; campaignUI.UpdateCharacterLists(); } diff --git a/Barotrauma/BarotraumaShared/Source/GameSession/GameModes/MultiplayerCampaign.cs b/Barotrauma/BarotraumaShared/Source/GameSession/GameModes/MultiplayerCampaign.cs index 430de6d1e..6d6b430fb 100644 --- a/Barotrauma/BarotraumaShared/Source/GameSession/GameModes/MultiplayerCampaign.cs +++ b/Barotrauma/BarotraumaShared/Source/GameSession/GameModes/MultiplayerCampaign.cs @@ -110,7 +110,7 @@ namespace Barotrauma Map.MoveToNextLocation(); } - SaveUtil.SaveGame(GameMain.GameSession.SaveFile); + SaveUtil.SaveGame(GameMain.GameSession.SavePath); } diff --git a/Barotrauma/BarotraumaShared/Source/GameSession/GameSession.cs b/Barotrauma/BarotraumaShared/Source/GameSession/GameSession.cs index 624ea661d..419d27892 100644 --- a/Barotrauma/BarotraumaShared/Source/GameSession/GameSession.cs +++ b/Barotrauma/BarotraumaShared/Source/GameSession/GameSession.cs @@ -15,7 +15,7 @@ namespace Barotrauma //two locations used as the start and end in the MP mode private Location[] dummyLocations; - private string saveFile; + private string savePath; private Submarine submarine; @@ -76,12 +76,12 @@ namespace Barotrauma set { submarine = value; } } - public string SaveFile + public string SavePath { - get { return saveFile; } + get { return savePath; } } - public GameSession(Submarine submarine, string saveFile, GameModePreset gameModePreset = null, string missionType = "") + public GameSession(Submarine submarine, string savePath, GameModePreset gameModePreset = null, string missionType = "") { Submarine.MainSub = submarine; @@ -89,7 +89,7 @@ namespace Barotrauma EventManager = new EventManager(this); - this.saveFile = saveFile; + this.savePath = savePath; #if CLIENT CrewManager = new CrewManager(); diff --git a/Barotrauma/BarotraumaShared/Source/Utils/SaveUtil.cs b/Barotrauma/BarotraumaShared/Source/Utils/SaveUtil.cs index 99275570d..8365308fb 100644 --- a/Barotrauma/BarotraumaShared/Source/Utils/SaveUtil.cs +++ b/Barotrauma/BarotraumaShared/Source/Utils/SaveUtil.cs @@ -114,6 +114,13 @@ namespace Barotrauma } } + public static string GetSavePath(SaveType saveType, string saveName) + { + + string folder = saveType == SaveType.Singleplayer ? SaveFolder : MultiplayerSaveFolder; + return Path.Combine(folder, saveName); + } + public static string[] GetSaveFiles(SaveType saveType) { string folder = saveType == SaveType.Singleplayer ? SaveFolder : MultiplayerSaveFolder; @@ -140,17 +147,24 @@ namespace Barotrauma return files; } - - public static string CreateSavePath(string fileName = "Save") + + public static string CreateSavePath(SaveType saveType, string fileName = "Save") { + string folder = saveType == SaveType.Singleplayer ? SaveFolder : MultiplayerSaveFolder; + if (!Directory.Exists(SaveFolder)) { - DebugConsole.ThrowError("Save folder \"" + SaveFolder + "\" not found. Created new folder"); - Directory.CreateDirectory(SaveFolder); + DebugConsole.ThrowError("Save folder \"" + folder + "\" not found. Created new folder"); + Directory.CreateDirectory(folder); } string extension = ".save"; - string pathWithoutExtension = Path.Combine(SaveFolder, fileName); + string pathWithoutExtension = Path.Combine(folder, fileName); + + if (!File.Exists(pathWithoutExtension + extension)) + { + return pathWithoutExtension + extension; + } int i = 0; while (File.Exists(pathWithoutExtension + " " + i + extension)) @@ -158,7 +172,7 @@ namespace Barotrauma i++; } - return pathWithoutExtension + " " + i; + return pathWithoutExtension + " " + i + extension; } public static void CompressStringToFile(string fileName, string value)