namespace VRTK.Examples.Utilities
|
|
{
|
|
using UnityEngine;
|
|
using UnityEngine.SceneManagement;
|
|
|
|
public class SceneChanger : MonoBehaviour
|
|
{
|
|
private bool canPress;
|
|
private VRTK_ControllerReference controllerReference;
|
|
|
|
private void Awake()
|
|
{
|
|
canPress = false;
|
|
Invoke("ResetPress", 1f);
|
|
DynamicGI.UpdateEnvironment();
|
|
}
|
|
|
|
private bool IsForwardPressed()
|
|
{
|
|
if (!VRTK_ControllerReference.IsValid(controllerReference))
|
|
{
|
|
return false;
|
|
}
|
|
if (canPress &&
|
|
VRTK_SDK_Bridge.GetControllerButtonState(SDK_BaseController.ButtonTypes.Trigger, SDK_BaseController.ButtonPressTypes.Press, controllerReference) &&
|
|
VRTK_SDK_Bridge.GetControllerButtonState(SDK_BaseController.ButtonTypes.Grip, SDK_BaseController.ButtonPressTypes.Press, controllerReference) &&
|
|
VRTK_SDK_Bridge.GetControllerButtonState(SDK_BaseController.ButtonTypes.Touchpad, SDK_BaseController.ButtonPressTypes.Press, controllerReference))
|
|
{
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
private bool IsBackPressed()
|
|
{
|
|
if (!VRTK_ControllerReference.IsValid(controllerReference))
|
|
{
|
|
return false;
|
|
}
|
|
|
|
if (canPress &&
|
|
VRTK_SDK_Bridge.GetControllerButtonState(SDK_BaseController.ButtonTypes.Trigger, SDK_BaseController.ButtonPressTypes.Press, controllerReference) &&
|
|
VRTK_SDK_Bridge.GetControllerButtonState(SDK_BaseController.ButtonTypes.Grip, SDK_BaseController.ButtonPressTypes.Press, controllerReference) &&
|
|
VRTK_SDK_Bridge.GetControllerButtonState(SDK_BaseController.ButtonTypes.ButtonTwo, SDK_BaseController.ButtonPressTypes.Press, controllerReference))
|
|
{
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
private void ResetPress()
|
|
{
|
|
canPress = true;
|
|
}
|
|
|
|
private void Update()
|
|
{
|
|
GameObject rightHand = VRTK_DeviceFinder.GetControllerRightHand(true);
|
|
controllerReference = VRTK_ControllerReference.GetControllerReference(rightHand);
|
|
|
|
int currentSceneIndex = SceneManager.GetActiveScene().buildIndex;
|
|
int nextSceneIndex = currentSceneIndex;
|
|
|
|
if (IsForwardPressed() || Input.GetKeyUp(KeyCode.Space))
|
|
{
|
|
nextSceneIndex++;
|
|
if (nextSceneIndex >= SceneManager.sceneCountInBuildSettings)
|
|
nextSceneIndex = 0;
|
|
}
|
|
else if (IsBackPressed() || Input.GetKeyUp(KeyCode.Backspace))
|
|
{
|
|
nextSceneIndex--;
|
|
if (nextSceneIndex < 0)
|
|
nextSceneIndex = SceneManager.sceneCountInBuildSettings - 1;
|
|
}
|
|
|
|
if (nextSceneIndex == currentSceneIndex)
|
|
{
|
|
return;
|
|
}
|
|
|
|
SceneManager.LoadScene(nextSceneIndex);
|
|
}
|
|
}
|
|
}
|