Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 33 additions & 14 deletions Packages/com.trytalo.talo/Runtime/APIs/SavesAPI.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ public class SavesAPI : BaseAPI
public event Action<GameSave> OnSaveChosen;
public event Action OnSaveLoadingCompleted;

private readonly string _offlineSavesPath = Application.persistentDataPath + "/ts.bin";
private IFileHandler<OfflineSavesContent> _fileHandler;

public GameSave[] All
Expand Down Expand Up @@ -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;

Expand All @@ -168,33 +184,34 @@ 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();

// 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<GameSave> CreateSave(string saveName, string content = null)
Expand Down Expand Up @@ -228,10 +245,12 @@ public async Task<GameSave> 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<GameSave> UpdateCurrentSave(string newName = "")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,12 @@ public void SetUp()
{
var tm = new GameObject().AddComponent<TaloManager>();
tm.settings = ScriptableObject.CreateInstance<TaloSettings>();

Talo.CurrentAlias = new PlayerAlias() {
player = new Player() {
id = "uuid"
}
};
}

[UnityTest]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,12 @@ public void SetUp()
{
var tm = new GameObject().AddComponent<TaloManager>();
tm.settings = ScriptableObject.CreateInstance<TaloSettings>();

Talo.CurrentAlias = new PlayerAlias() {
player = new Player() {
id = "uuid"
}
};
}

[TearDown]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,12 @@ public void SetUp()
{
var tm = new GameObject().AddComponent<TaloManager>();
tm.settings = ScriptableObject.CreateInstance<TaloSettings>();

Talo.CurrentAlias = new PlayerAlias() {
player = new Player() {
id = "uuid"
}
};
}

[TearDown]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,12 @@ public void SetUp()
{
var tm = new GameObject().AddComponent<TaloManager>();
tm.settings = ScriptableObject.CreateInstance<TaloSettings>();

Talo.CurrentAlias = new PlayerAlias() {
player = new Player() {
id = "uuid"
}
};
}

[TearDown]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,12 @@ public void Setup()
{
var tm = new GameObject().AddComponent<TaloManager>();
tm.settings = ScriptableObject.CreateInstance<TaloSettings>();

Talo.CurrentAlias = new PlayerAlias() {
player = new Player() {
id = "uuid"
}
};
}

[UnityTest]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,12 @@ public void SetUp()
{
var tm = new GameObject().AddComponent<TaloManager>();
tm.settings = ScriptableObject.CreateInstance<TaloSettings>();

Talo.CurrentAlias = new PlayerAlias() {
player = new Player() {
id = "uuid"
}
};
}

[TearDown]
Expand Down