/*
* Copyright (c) Meta Platforms, Inc. and affiliates.
* All rights reserved.
*
* Licensed under the Oculus SDK License Agreement (the "License");
* you may not use the Oculus 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/oculussdk/
*
* Unless required by applicable law or agreed to in writing, the Oculus 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 System.Collections;
using System.Collections.Generic;
///
/// Shows the Oculus plaform UI.
///
public class OVRPlatformMenu : MonoBehaviour
{
///
/// The key code.
///
private OVRInput.RawButton inputCode = OVRInput.RawButton.Back;
public enum eHandler
{
ShowConfirmQuit,
RetreatOneLevel,
};
public eHandler shortPressHandler = eHandler.ShowConfirmQuit;
///
/// Callback to handle short press. Returns true if ConfirmQuit menu should be shown.
///
public System.Func OnShortPress;
private static Stack sceneStack = new Stack();
enum eBackButtonAction
{
NONE,
SHORT_PRESS
};
eBackButtonAction HandleBackButtonState()
{
eBackButtonAction action = eBackButtonAction.NONE;
if (OVRInput.GetDown(inputCode))
{
action = eBackButtonAction.SHORT_PRESS;
}
return action;
}
///
/// Instantiate the cursor timer
///
void Awake()
{
if (shortPressHandler == eHandler.RetreatOneLevel && OnShortPress == null)
OnShortPress = RetreatOneLevel;
if (!OVRManager.isHmdPresent)
{
enabled = false;
return;
}
sceneStack.Push(UnityEngine.SceneManagement.SceneManager.GetActiveScene().name);
}
///
/// Show the confirm quit menu
///
void ShowConfirmQuitMenu()
{
#if UNITY_ANDROID && !UNITY_EDITOR
Debug.Log("[PlatformUI-ConfirmQuit] Showing @ " + Time.time);
OVRManager.PlatformUIConfirmQuit();
#endif
}
///
/// Sample handler for short press which retreats to the previous scene that used OVRPlatformMenu.
///
private static bool RetreatOneLevel()
{
if (sceneStack.Count > 1)
{
string parentScene = sceneStack.Pop();
UnityEngine.SceneManagement.SceneManager.LoadSceneAsync (parentScene);
return false;
}
return true;
}
///
/// 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
///
void Update()
{
#if UNITY_ANDROID
eBackButtonAction action = HandleBackButtonState();
if (action == eBackButtonAction.SHORT_PRESS)
{
if (OnShortPress == null || OnShortPress())
{
ShowConfirmQuitMenu();
}
}
#endif
}
}