Last active
July 7, 2020 01:39
-
-
Save GEMISIS/b45745024d03e6fa724b76f3263ce6e9 to your computer and use it in GitHub Desktop.
Handles pausing and resuming for the Oculus platform.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System.IO; | |
using UnityEngine; | |
using UnityEngine.Events; | |
#if PLATFORM_ANDROID | |
using UnityEngine.Android; | |
#endif | |
public class WorldSettings : MonoBehaviour | |
{ | |
/// <summary> | |
/// Events to be called when when the game is paused or resumed. | |
/// </summary> | |
public UnityEvent PauseEvents, ResumeEvents; | |
/// <summary> | |
/// Indicates whether the game is paused or not. | |
/// </summary> | |
public static bool IsPaused | |
{ | |
get | |
{ | |
return OVRManager.hasInputFocus; | |
} | |
} | |
/// <summary> | |
/// The events that have occured so far. Helps ensure that if the inputs are lost and the HMD unmounted, then | |
/// we pause this as expected. | |
/// </summary> | |
private int mEventStack = 0; | |
#region Unity overrides. | |
private void OnEnable() | |
{ | |
OVRManager.HMDMounted += OVRManager_HMDMounted; | |
OVRManager.HMDUnmounted += OVRManager_HMDUnmounted; | |
OVRManager.InputFocusAcquired += OVRManager_InputFocusAcquired; | |
OVRManager.InputFocusLost += OVRManager_InputFocusLost; | |
#if PLATFORM_ANDROID | |
VerifyPermission(Permission.Microphone); | |
VerifyPermission(Permission.ExternalStorageRead); | |
VerifyPermission(Permission.ExternalStorageWrite); | |
#endif | |
} | |
private void OnDisable() | |
{ | |
OVRManager.HMDMounted -= OVRManager_HMDMounted; | |
OVRManager.HMDUnmounted -= OVRManager_HMDUnmounted; | |
OVRManager.InputFocusAcquired -= OVRManager_InputFocusAcquired; | |
OVRManager.InputFocusLost -= OVRManager_InputFocusLost; | |
} | |
#endregion | |
#region Helper methods. | |
#if PLATFORM_ANDROID | |
private void VerifyPermission(string permission) | |
{ | |
if (!Permission.HasUserAuthorizedPermission(permission)) | |
{ | |
Permission.RequestUserPermission(permission); | |
} | |
} | |
#endif | |
private void pushEventStack() | |
{ | |
mEventStack++; | |
if (mEventStack > 0 && Time.timeScale != 0.0f) | |
{ | |
Time.timeScale = 0.0f; | |
PauseEvents.Invoke(); | |
} | |
} | |
private void popEventStack() | |
{ | |
mEventStack--; | |
mEventStack = Mathf.Max(mEventStack, 0); | |
if (mEventStack <= 0 && Time.timeScale == 0.0f) | |
{ | |
Time.timeScale = 1.0f; | |
ResumeEvents.Invoke(); | |
} | |
} | |
#endregion | |
#region Event definitions. | |
private void OVRManager_HMDUnmounted() | |
{ | |
pushEventStack(); | |
} | |
private void OVRManager_HMDMounted() | |
{ | |
popEventStack(); | |
} | |
private void OVRManager_InputFocusLost() | |
{ | |
pushEventStack(); | |
} | |
private void OVRManager_InputFocusAcquired() | |
{ | |
popEventStack(); | |
} | |
#endregion | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Modified to include checking for HMDMount and unmount.