public virtual async UniTask <GameStateMap> SaveGameAsync(string slotId) { var quick = slotId.StartsWithFast(Configuration.QuickSaveSlotMask.GetBefore("{")); OnGameSaveStarted?.Invoke(new GameSaveLoadArgs(slotId, quick)); var state = new GameStateMap(); await scriptPlayer.SynchronizeAndDoAsync(DoSaveAfterSync); OnGameSaveFinished?.Invoke(new GameSaveLoadArgs(slotId, quick)); return(state); async UniTask DoSaveAfterSync() { state.SaveDateTime = DateTime.Now; state.Thumbnail = cameraManager.CaptureThumbnail(); SaveAllServicesToState <IStatefulService <GameStateMap>, GameStateMap>(state); PerformOnGameSerializeTasks(state); state.RollbackStackJson = SerializeRollbackStack(); await GameSlotManager.SaveAsync(slotId, state); // Also save global state on every game save. await SaveGlobalAsync(); } }