Assignment for RMIT Mixed Reality in 2020
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

109 lines
3.7 KiB

namespace VRTK.Examples.Utilities
{
using UnityEngine;
using UnityEngine.SceneManagement;
public class VRTKExample_SceneSwitcher : MonoBehaviour
{
public KeyCode backKey = KeyCode.Backspace;
public KeyCode forwardKey = KeyCode.Space;
protected int firstSceneIndex = 0;
protected int lastSceneIndex;
protected bool pressEnabled;
protected VRTK_ControllerReference controllerReference;
protected virtual void Awake()
{
DynamicGI.UpdateEnvironment();
}
protected virtual void OnEnable()
{
lastSceneIndex = SceneManager.sceneCountInBuildSettings - 1;
pressEnabled = false;
Invoke("EnablePress", 1f);
}
protected virtual void Update()
{
GameObject rightHand = VRTK_DeviceFinder.GetControllerRightHand(true);
controllerReference = VRTK_ControllerReference.GetControllerReference(rightHand);
int currentSceneIndex = SceneManager.GetActiveScene().buildIndex;
int nextSceneIndex = currentSceneIndex;
if (ForwardPressed())
{
nextSceneIndex++;
if (nextSceneIndex >= lastSceneIndex)
{
nextSceneIndex = firstSceneIndex;
}
}
else if (BackPressed())
{
nextSceneIndex--;
if (nextSceneIndex < firstSceneIndex)
{
nextSceneIndex = lastSceneIndex - 1;
}
}
if (nextSceneIndex != currentSceneIndex)
{
SceneManager.LoadScene(nextSceneIndex);
}
}
protected virtual void EnablePress()
{
pressEnabled = true;
}
protected virtual bool BackPressed()
{
if (Input.GetKeyDown(backKey) || ControllerBackward())
{
return true;
}
return false;
}
protected virtual bool ForwardPressed()
{
if (Input.GetKeyDown(forwardKey) || ControllerForward())
{
return true;
}
return false;
}
protected virtual bool ControllerForward()
{
if (!VRTK_ControllerReference.IsValid(controllerReference))
{
return false;
}
return (pressEnabled &&
VRTK_SDK_Bridge.GetControllerButtonState(SDK_BaseController.ButtonTypes.ButtonTwo, SDK_BaseController.ButtonPressTypes.Press, controllerReference) &&
VRTK_SDK_Bridge.GetControllerButtonState(SDK_BaseController.ButtonTypes.Touchpad, SDK_BaseController.ButtonPressTypes.Press, controllerReference) &&
VRTK_SDK_Bridge.GetControllerButtonState(SDK_BaseController.ButtonTypes.Trigger, SDK_BaseController.ButtonPressTypes.Press, controllerReference));
}
protected virtual bool ControllerBackward()
{
if (!VRTK_ControllerReference.IsValid(controllerReference))
{
return false;
}
return (pressEnabled &&
VRTK_SDK_Bridge.GetControllerButtonState(SDK_BaseController.ButtonTypes.ButtonTwo, SDK_BaseController.ButtonPressTypes.Press, controllerReference) &&
VRTK_SDK_Bridge.GetControllerButtonState(SDK_BaseController.ButtonTypes.Touchpad, SDK_BaseController.ButtonPressTypes.Press, controllerReference) &&
VRTK_SDK_Bridge.GetControllerButtonState(SDK_BaseController.ButtonTypes.Grip, SDK_BaseController.ButtonPressTypes.Press, controllerReference));
}
}
}