From 597c3d7b26a4bc65ba51406e0eb3cb01beb8a5fa Mon Sep 17 00:00:00 2001 From: Kevin Williams Date: Fri, 18 Nov 2022 16:55:16 -0500 Subject: [PATCH] Pausing Logic Allows custom pause functions. Fixes Pausing error when exiting game that is self-paused, and then entering a new game (previously caused pause lock out) --- .../GameKit/GameManager/GameManagerBase.cs | 1 + .../GameKit/GameManager/PauseHandler.cs | 56 ++++++++++++++----- 2 files changed, 43 insertions(+), 14 deletions(-) diff --git a/Assets/Plugins/Mediabox/Source/GameKit/GameManager/GameManagerBase.cs b/Assets/Plugins/Mediabox/Source/GameKit/GameManager/GameManagerBase.cs index 099e98b..3e9f187 100644 --- a/Assets/Plugins/Mediabox/Source/GameKit/GameManager/GameManagerBase.cs +++ b/Assets/Plugins/Mediabox/Source/GameKit/GameManager/GameManagerBase.cs @@ -170,6 +170,7 @@ public async void UnloadGameContent() { } async Task ResetGame() { + pauseHandler.ResetPauseValues(); if (SceneManager.GetActiveScene().name != this.DefaultSceneName) await SceneManager.LoadSceneAsync(this.DefaultSceneName); UnloadBundle(); diff --git a/Assets/Plugins/Mediabox/Source/GameKit/GameManager/PauseHandler.cs b/Assets/Plugins/Mediabox/Source/GameKit/GameManager/PauseHandler.cs index 61895b6..1fdbba3 100644 --- a/Assets/Plugins/Mediabox/Source/GameKit/GameManager/PauseHandler.cs +++ b/Assets/Plugins/Mediabox/Source/GameKit/GameManager/PauseHandler.cs @@ -2,30 +2,58 @@ namespace Mediabox.GameKit.GameManager { public class PauseHandler { - float timeScaleBeforePause; - float volumeBeforePause; - bool isPaused; + float timeScaleBeforePause = 1; + float volumeBeforePause = 1; + bool isPaused = false; + + public delegate void OnPause(bool pausing); + public event OnPause onPause; + public void Pause() { - if (!this.isPaused) { - this.timeScaleBeforePause = Time.timeScale; - this.volumeBeforePause = AudioListener.volume; - this.isPaused = true; - } else { + + + if (this.isPaused){ Debug.LogWarning("Pause() has been called multiple times. To avoid unintended behavior, it is recommended to ensure calling Unpause() before Pausing again."); } - Time.timeScale = 0f; + + this.isPaused = true; + this.volumeBeforePause = AudioListener.volume; AudioListener.volume = 0f; + + if (onPause != null){ + if (onPause.GetInvocationList().Length > 0){ + onPause.Invoke(true); + return; + } + } + + this.timeScaleBeforePause = Time.timeScale; + Time.timeScale = 0f; + } public void Unpause() { - if (this.isPaused) { - Time.timeScale = this.timeScaleBeforePause; - AudioListener.volume = this.volumeBeforePause; - this.isPaused = false; - } else { + + if (!this.isPaused){ Debug.LogWarning("Unpause() has been called multiple times. To avoid unintended behavior, it is recommended to ensure calling Pause() before Unpausing again."); } + + this.isPaused = false; + AudioListener.volume = this.volumeBeforePause; + if (onPause != null){ + if (onPause.GetInvocationList().Length > 0){ + onPause.Invoke(false); + return; + } + } + Time.timeScale = this.timeScaleBeforePause; + } + + public void ResetPauseValues(){ + onPause = null; + timeScaleBeforePause = 1; + volumeBeforePause = 1; } }