public void GetCloudLastSavedMetadataAsync(Action<CloudMetadata> onPeekResult) { PlatformSaveUtil.ShowPeekProgressPopup(); if (File.Exists(RemoteSaveFileForEditor)) { var remoteSaveDict = PlatformSaveUtil.DeserializeSaveData(File.ReadAllBytes(RemoteSaveFileForEditor)); var cloudMetadata = new CloudMetadata { level = PlatformSaveUtil.GetInt32FromRemoteSaveDict(remoteSaveDict, PlatformSaveUtil.ACCOUNT_LEVEL_KEY), levelExp = PlatformSaveUtil.GetInt32FromRemoteSaveDict(remoteSaveDict, PlatformSaveUtil.ACCOUNT_LEVEL_EXP_KEY), gem = PlatformSaveUtil.GetBigIntegerFromRemoteSaveDict(remoteSaveDict, PlatformSaveUtil.ACCOUNT_GEM_KEY), riceRate = PlatformSaveUtil.GetBigIntegerFromRemoteSaveDict(remoteSaveDict, PlatformSaveUtil.ACCOUNT_RICE_RATE_KEY), saveDate = PlatformSaveUtil.GetInt64FromRemoteSaveDict(remoteSaveDict, PlatformSaveUtil.SAVE_DATE_KEY) }; onPeekResult(cloudMetadata); } else { onPeekResult(CloudMetadata.Invalid); } }
public void ExecuteCloudLoad() { PlatformSaveUtil.ShowLoadProgressPopup(); var remoteSaveDict = PlatformSaveUtil.DeserializeSaveData(File.ReadAllBytes(RemoteSaveFileForEditor)); PlatformSaveUtil.LoadDataAndLoadSplashScene(remoteSaveDict); }
public void ExecuteCloudSave() { SaveLoadManager.Save(BalloonSpawner.instance, ConfigPopup.instance, BalloonSound.instance, Data.instance, SaveLoadManager.SaveReason.BeforeCloudSave); PlatformSaveUtil.ShowSaveProgressPopup(); var savedData = PlatformSaveUtil.SerializeSaveData(); using (var f = File.Create(RemoteSaveFileForEditor)) { f.Write(savedData, 0, savedData.Length); } var remoteSaveDict = PlatformSaveUtil.DeserializeSaveData(savedData); ShowSaveResultPopup(savedData, remoteSaveDict, RemoteSaveFileForEditor); }
public void OnSavedGameDataRead(SavedGameRequestStatus status, byte[] data) { if (status == SavedGameRequestStatus.Success) { // handle processing the byte array data SushiDebug.LogFormat("OnSavedGameDataRead success! - Data size: {0} bytes", data.Length); var remoteSaveDict = PlatformSaveUtil.DeserializeSaveData(data); PlatformSaveUtil.LoadDataAndLoadSplashScene(remoteSaveDict); } else { // handle error PlatformSaveUtil.ShowLoadErrorPopup("OnSavedGameDataRead: status == SavedGameRequestStatus.Success"); BalloonLogManager.Add(BalloonLogEntry.Type.GameCloudLoadFailure, 0, 4); } }
void SaveGame(ISavedGameMetadata game, byte[] savedData, TimeSpan totalPlaytime) { #if !NO_GPGS var remoteSaveDict = PlatformSaveUtil.DeserializeSaveData(savedData); var accountLevel = PlatformSaveUtil.GetInt32FromRemoteSaveDict(remoteSaveDict, PlatformSaveUtil.ACCOUNT_LEVEL_KEY); var accountLevelExp = PlatformSaveUtil.GetInt32FromRemoteSaveDict(remoteSaveDict, PlatformSaveUtil.ACCOUNT_LEVEL_EXP_KEY); var accountGem = PlatformSaveUtil.GetBigIntegerFromRemoteSaveDict(remoteSaveDict, PlatformSaveUtil.ACCOUNT_GEM_KEY); var savedGameClient = PlayGamesPlatform.Instance.SavedGame; var builder = new SavedGameMetadataUpdate.Builder(); builder = builder.WithUpdatedDescription(string.Format("Level {0} / Exp {1} / Gem {2}", accountLevel, accountLevelExp, accountGem)); builder = builder.WithUpdatedPlayedTime(totalPlaytime); var updatedMetadata = builder.Build(); savedGameClient.CommitUpdate(game, updatedMetadata, savedData, OnSavedGameWritten); #endif }
public void GetCloudLastSavedMetadataAsync(Action <CloudMetadata> onPeekResult) { if (!Social.localUser.authenticated) { SushiDebug.LogFormat("GetCloudSavedAccountData: not authenticated"); onPeekResult(CloudMetadata.Invalid); return; } #if !NO_GPGS var savedGameClient = PlayGamesPlatform.Instance.SavedGame; if (savedGameClient != null) { Open(savedGameClient, true, OnSavedGameOpenedAndReadConflictResolve, (status, game) => { if (status == SavedGameRequestStatus.Success) { // handle reading or writing of saved game. SushiDebug.LogFormat("GetCloudSavedAccountData: Save game open (read) success! Filename: {0}", game.Filename); savedGameClient.ReadBinaryData(game, (status2, data2) => { if (status == SavedGameRequestStatus.Success) { // handle processing the byte array data SushiDebug.LogFormat("GetCloudSavedAccountData success! - Data size: {0} bytes", data2.Length); try { var remoteSaveDict = PlatformSaveUtil.DeserializeSaveData(data2); var cloudMetadata = new CloudMetadata { level = PlatformSaveUtil.GetInt32FromRemoteSaveDict(remoteSaveDict, PlatformSaveUtil.ACCOUNT_LEVEL_KEY), levelExp = PlatformSaveUtil.GetInt32FromRemoteSaveDict(remoteSaveDict, PlatformSaveUtil.ACCOUNT_LEVEL_EXP_KEY), gem = PlatformSaveUtil.GetBigIntegerFromRemoteSaveDict(remoteSaveDict, PlatformSaveUtil.ACCOUNT_GEM_KEY), riceRate = PlatformSaveUtil.GetBigIntegerFromRemoteSaveDict(remoteSaveDict, PlatformSaveUtil.ACCOUNT_RICE_RATE_KEY), saveDate = PlatformSaveUtil.GetInt64FromRemoteSaveDict(remoteSaveDict, PlatformSaveUtil.SAVE_DATE_KEY) }; onPeekResult(cloudMetadata); } catch { SushiDebug.LogFormat("GetCloudSavedAccountData: Exception at deserialization"); onPeekResult(CloudMetadata.Invalid); } } else { SushiDebug.LogFormat("GetCloudSavedAccountData: ReadBinaryData error! - {0}", status2); onPeekResult(CloudMetadata.Invalid); } }); } else { PlatformSaveUtil.LogCloudLoadSaveError(string.Format( "GetCloudSavedAccountData: OpenWithAutomaticConflictResolution error! - {0}", status)); onPeekResult(CloudMetadata.Invalid); } }); } else { PlatformSaveUtil.LogCloudLoadSaveError("GetCloudSavedAccountData: savedGameClient null"); onPeekResult(CloudMetadata.Invalid); } #endif }
public void OnCloudLoadResult(string result, byte[] data) { if (result == "OK") { SushiDebug.LogFormat("OnCloudLoadResult: data length {0} bytes", data != null ? data.Length : 0); // 메타데이터 조회의 경우와 실제 세이브 데이터 로딩의 경우를 나눠서 처리 if (onPeekResultSave != null) { SushiDebug.Log("OnCloudLoadResult: onPeekResultSave valid"); var cloudMetadata = CloudMetadata.Invalid; if (data == null || data.Length == 0) { } else { try { var remoteSaveDict = PlatformSaveUtil.DeserializeSaveData(data); cloudMetadata = new CloudMetadata { level = PlatformSaveUtil.GetInt32FromRemoteSaveDict(remoteSaveDict, PlatformSaveUtil.ACCOUNT_LEVEL_KEY), levelExp = PlatformSaveUtil.GetInt32FromRemoteSaveDict(remoteSaveDict, PlatformSaveUtil.ACCOUNT_LEVEL_EXP_KEY), gem = PlatformSaveUtil.GetBigIntegerFromRemoteSaveDict(remoteSaveDict, PlatformSaveUtil.ACCOUNT_GEM_KEY), riceRate = PlatformSaveUtil.GetBigIntegerFromRemoteSaveDict(remoteSaveDict, PlatformSaveUtil.ACCOUNT_RICE_RATE_KEY), saveDate = PlatformSaveUtil.GetInt64FromRemoteSaveDict(remoteSaveDict, PlatformSaveUtil.SAVE_DATE_KEY) }; } catch { cloudMetadata = CloudMetadata.Invalid; } } onPeekResultSave(cloudMetadata); onPeekResultSave = null; } else { SushiDebug.Log("OnCloudLoadResult: onPeekResultSave empty. data load..."); if (data == null || data.Length == 0) { PlatformSaveUtil.ShowLoadErrorPopup("OnCloudLoadResult: Cloud save data corrupted"); } else { SushiDebug.LogFormat("OnCloudLoadResult: success! - Data size: {0} bytes", data.Length); var remoteSaveDict = PlatformSaveUtil.DeserializeSaveData(data); PlatformSaveUtil.LoadDataAndLoadSplashScene(remoteSaveDict); } } } else { PlatformSaveUtil.ShowSaveErrorPopup(TextHelper.GetText("platform_cloud_load_fail") + "\n\n" + result); } }