diff --git a/Packages/com.trytalo.talo/Runtime/APIs/SavesAPI.cs b/Packages/com.trytalo.talo/Runtime/APIs/SavesAPI.cs index e4d0375..52de9cd 100644 --- a/Packages/com.trytalo.talo/Runtime/APIs/SavesAPI.cs +++ b/Packages/com.trytalo.talo/Runtime/APIs/SavesAPI.cs @@ -17,7 +17,6 @@ public class SavesAPI : BaseAPI public event Action OnSaveChosen; public event Action OnSaveLoadingCompleted; - private readonly string _offlineSavesPath = Application.persistentDataPath + "/ts.bin"; private IFileHandler _fileHandler; public GameSave[] All @@ -148,18 +147,35 @@ public void Register(Loadable loadable) _registeredLoadables.Add(new LoadableData(loadable)); } + internal string GetOfflineSavesPath() + { + return Application.persistentDataPath + $"/ts.{Talo.CurrentPlayer.id}.bin"; + } + internal OfflineSavesContent GetOfflineSavesContent() { - return _fileHandler.ReadContent(_offlineSavesPath); + return _fileHandler.ReadContent(GetOfflineSavesPath()); } internal void WriteOfflineSavesContent(OfflineSavesContent newContent) { - _fileHandler.WriteContent(_offlineSavesPath, newContent); + _fileHandler.WriteContent(GetOfflineSavesPath(), newContent); + } + + private GameSave CreateOfflineCopy(GameSave originalSave) + { + return new GameSave + { + id = originalSave.id, + name = originalSave.name, + content = originalSave.content, + updatedAt = originalSave.updatedAt + }; } - private void UpdateOfflineSaves(GameSave incomingSave) + private GameSave UpdateOfflineSaves(GameSave incomingSave) { + var offlineIncomingSave = CreateOfflineCopy(incomingSave); var offlineContent = GetOfflineSavesContent(); var updated = false; @@ -168,10 +184,10 @@ private void UpdateOfflineSaves(GameSave incomingSave) // updating offlineContent.saves = offlineContent.saves.Select((existingSave) => { - if (existingSave.id == incomingSave.id) + if (existingSave.id == offlineIncomingSave.id) { updated = true; - return incomingSave; + return offlineIncomingSave; } return existingSave; }).ToArray(); @@ -179,22 +195,23 @@ private void UpdateOfflineSaves(GameSave incomingSave) // appending if (!updated) { - if (incomingSave.id == 0) + if (offlineIncomingSave.id == 0) { - incomingSave.id = -offlineContent.saves.Length - 1; + offlineIncomingSave.id = -offlineContent.saves.Length - 1; } - offlineContent.saves = offlineContent.saves.Concat(new GameSave[] { incomingSave }).ToArray(); + offlineContent.saves = offlineContent.saves.Concat(new GameSave[] { offlineIncomingSave }).ToArray(); } } else { // first entry into the saves file - incomingSave.id = -1; - offlineContent = new OfflineSavesContent(new GameSave[] { incomingSave }); + offlineIncomingSave.id = -1; + offlineContent = new OfflineSavesContent(new GameSave[] { offlineIncomingSave }); } WriteOfflineSavesContent(offlineContent); + return offlineIncomingSave; } public async Task CreateSave(string saveName, string content = null) @@ -228,10 +245,12 @@ public async Task CreateSave(string saveName, string content = null) } _allSaves.Add(save); - UpdateOfflineSaves(save); - SetChosenSave(save, false); - return save; + var offlineSave = UpdateOfflineSaves(save); + var chosenSave = Talo.IsOffline() ? offlineSave : save; + + SetChosenSave(chosenSave, false); + return chosenSave; } public async Task UpdateCurrentSave(string newName = "") diff --git a/Packages/com.trytalo.talo/Tests/Runtime/SavesAPI/ChooseSaveTest.cs b/Packages/com.trytalo.talo/Tests/Runtime/SavesAPI/ChooseSaveTest.cs index fddd483..83c0c88 100644 --- a/Packages/com.trytalo.talo/Tests/Runtime/SavesAPI/ChooseSaveTest.cs +++ b/Packages/com.trytalo.talo/Tests/Runtime/SavesAPI/ChooseSaveTest.cs @@ -22,6 +22,12 @@ public void SetUp() { var tm = new GameObject().AddComponent(); tm.settings = ScriptableObject.CreateInstance(); + + Talo.CurrentAlias = new PlayerAlias() { + player = new Player() { + id = "uuid" + } + }; } [UnityTest] diff --git a/Packages/com.trytalo.talo/Tests/Runtime/SavesAPI/CreateSaveTest.cs b/Packages/com.trytalo.talo/Tests/Runtime/SavesAPI/CreateSaveTest.cs index b8422ee..fda2208 100644 --- a/Packages/com.trytalo.talo/Tests/Runtime/SavesAPI/CreateSaveTest.cs +++ b/Packages/com.trytalo.talo/Tests/Runtime/SavesAPI/CreateSaveTest.cs @@ -21,6 +21,12 @@ public void SetUp() { var tm = new GameObject().AddComponent(); tm.settings = ScriptableObject.CreateInstance(); + + Talo.CurrentAlias = new PlayerAlias() { + player = new Player() { + id = "uuid" + } + }; } [TearDown] diff --git a/Packages/com.trytalo.talo/Tests/Runtime/SavesAPI/DeleteSaveTest.cs b/Packages/com.trytalo.talo/Tests/Runtime/SavesAPI/DeleteSaveTest.cs index c8a398d..e7c023c 100644 --- a/Packages/com.trytalo.talo/Tests/Runtime/SavesAPI/DeleteSaveTest.cs +++ b/Packages/com.trytalo.talo/Tests/Runtime/SavesAPI/DeleteSaveTest.cs @@ -12,6 +12,12 @@ public void SetUp() { var tm = new GameObject().AddComponent(); tm.settings = ScriptableObject.CreateInstance(); + + Talo.CurrentAlias = new PlayerAlias() { + player = new Player() { + id = "uuid" + } + }; } [TearDown] diff --git a/Packages/com.trytalo.talo/Tests/Runtime/SavesAPI/GetSavesTest.cs b/Packages/com.trytalo.talo/Tests/Runtime/SavesAPI/GetSavesTest.cs index 9d2c611..06fd35d 100644 --- a/Packages/com.trytalo.talo/Tests/Runtime/SavesAPI/GetSavesTest.cs +++ b/Packages/com.trytalo.talo/Tests/Runtime/SavesAPI/GetSavesTest.cs @@ -22,6 +22,12 @@ public void SetUp() { var tm = new GameObject().AddComponent(); tm.settings = ScriptableObject.CreateInstance(); + + Talo.CurrentAlias = new PlayerAlias() { + player = new Player() { + id = "uuid" + } + }; } [TearDown] diff --git a/Packages/com.trytalo.talo/Tests/Runtime/SavesAPI/SaveContentTest.cs b/Packages/com.trytalo.talo/Tests/Runtime/SavesAPI/SaveContentTest.cs index a3c9df6..9126442 100644 --- a/Packages/com.trytalo.talo/Tests/Runtime/SavesAPI/SaveContentTest.cs +++ b/Packages/com.trytalo.talo/Tests/Runtime/SavesAPI/SaveContentTest.cs @@ -33,6 +33,12 @@ public void Setup() { var tm = new GameObject().AddComponent(); tm.settings = ScriptableObject.CreateInstance(); + + Talo.CurrentAlias = new PlayerAlias() { + player = new Player() { + id = "uuid" + } + }; } [UnityTest] diff --git a/Packages/com.trytalo.talo/Tests/Runtime/SavesAPI/UpdateSaveTest.cs b/Packages/com.trytalo.talo/Tests/Runtime/SavesAPI/UpdateSaveTest.cs index bf00035..7f23352 100644 --- a/Packages/com.trytalo.talo/Tests/Runtime/SavesAPI/UpdateSaveTest.cs +++ b/Packages/com.trytalo.talo/Tests/Runtime/SavesAPI/UpdateSaveTest.cs @@ -12,6 +12,12 @@ public void SetUp() { var tm = new GameObject().AddComponent(); tm.settings = ScriptableObject.CreateInstance(); + + Talo.CurrentAlias = new PlayerAlias() { + player = new Player() { + id = "uuid" + } + }; } [TearDown]