/************************************************************************************
|
|
Copyright : Copyright (c) Facebook Technologies, LLC and its affiliates. All rights reserved.
|
|
|
|
Licensed under the Oculus Utilities SDK License Version 1.31 (the "License"); you may not use
|
|
the Utilities SDK except in compliance with the License, which is provided at the time of installation
|
|
or download, or which otherwise accompanies this software in either electronic or hard copy form.
|
|
|
|
You may obtain a copy of the License at
|
|
https://developer.oculus.com/licenses/utilities-1.31
|
|
|
|
Unless required by applicable law or agreed to in writing, the Utilities SDK distributed
|
|
under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
|
|
ANY KIND, either express or implied. See the License for the specific language governing
|
|
permissions and limitations under the License.
|
|
************************************************************************************/
|
|
|
|
using UnityEngine;
|
|
using VR = UnityEngine.VR;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
|
|
/// <summary>
|
|
/// Shows the Oculus plaform UI.
|
|
/// </summary>
|
|
public class OVRPlatformMenu : MonoBehaviour
|
|
{
|
|
/// <summary>
|
|
/// The key code.
|
|
/// </summary>
|
|
private OVRInput.RawButton inputCode = OVRInput.RawButton.Back;
|
|
|
|
public enum eHandler
|
|
{
|
|
ShowConfirmQuit,
|
|
RetreatOneLevel,
|
|
};
|
|
|
|
public eHandler shortPressHandler = eHandler.ShowConfirmQuit;
|
|
|
|
/// <summary>
|
|
/// Callback to handle short press. Returns true if ConfirmQuit menu should be shown.
|
|
/// </summary>
|
|
public System.Func<bool> OnShortPress;
|
|
private static Stack<string> sceneStack = new Stack<string>();
|
|
|
|
enum eBackButtonAction
|
|
{
|
|
NONE,
|
|
SHORT_PRESS
|
|
};
|
|
|
|
eBackButtonAction HandleBackButtonState()
|
|
{
|
|
eBackButtonAction action = eBackButtonAction.NONE;
|
|
|
|
if (OVRInput.GetDown(inputCode))
|
|
{
|
|
action = eBackButtonAction.SHORT_PRESS;
|
|
}
|
|
|
|
return action;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Instantiate the cursor timer
|
|
/// </summary>
|
|
void Awake()
|
|
{
|
|
if (shortPressHandler == eHandler.RetreatOneLevel && OnShortPress == null)
|
|
OnShortPress = RetreatOneLevel;
|
|
|
|
if (!OVRManager.isHmdPresent)
|
|
{
|
|
enabled = false;
|
|
return;
|
|
}
|
|
|
|
sceneStack.Push(UnityEngine.SceneManagement.SceneManager.GetActiveScene().name);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Show the confirm quit menu
|
|
/// </summary>
|
|
void ShowConfirmQuitMenu()
|
|
{
|
|
#if UNITY_ANDROID && !UNITY_EDITOR
|
|
Debug.Log("[PlatformUI-ConfirmQuit] Showing @ " + Time.time);
|
|
OVRManager.PlatformUIConfirmQuit();
|
|
#endif
|
|
}
|
|
|
|
/// <summary>
|
|
/// Sample handler for short press which retreats to the previous scene that used OVRPlatformMenu.
|
|
/// </summary>
|
|
private static bool RetreatOneLevel()
|
|
{
|
|
if (sceneStack.Count > 1)
|
|
{
|
|
string parentScene = sceneStack.Pop();
|
|
UnityEngine.SceneManagement.SceneManager.LoadSceneAsync (parentScene);
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Tests for long-press and activates global platform menu when detected.
|
|
/// as per the Unity integration doc, the back button responds to "mouse 1" button down/up/etc
|
|
/// </summary>
|
|
void Update()
|
|
{
|
|
#if UNITY_ANDROID
|
|
eBackButtonAction action = HandleBackButtonState();
|
|
if (action == eBackButtonAction.SHORT_PRESS)
|
|
{
|
|
if (OnShortPress == null || OnShortPress())
|
|
{
|
|
ShowConfirmQuitMenu();
|
|
}
|
|
}
|
|
#endif
|
|
}
|
|
}
|