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.
 
 
 

108 lines
3.8 KiB

namespace VRTK.Examples
{
using UnityEngine;
using Controllables;
using Controllables.PhysicsBased;
using Controllables.ArtificialBased;
public class PusherStickyToggle : MonoBehaviour
{
public VRTK_BaseControllable buttonOne;
public VRTK_BaseControllable buttonTwo;
public Color onColor = Color.green;
public Color offColor = Color.red;
protected bool buttonOnePressed = false;
protected bool buttonTwoPressed = false;
protected virtual void OnEnable()
{
SetStayPressed(buttonOne, true);
SetStayPressed(buttonTwo, true);
buttonOne.MaxLimitReached += ButtonOne_MaxLimitReached;
buttonTwo.MaxLimitReached += ButtonTwo_MaxLimitReached;
buttonOne.MaxLimitExited += ButtonOne_MaxLimitExited;
buttonTwo.MaxLimitExited += ButtonTwo_MaxLimitExited;
}
protected virtual void OnDisable()
{
buttonOne.MaxLimitReached -= ButtonOne_MaxLimitReached;
buttonTwo.MaxLimitReached -= ButtonTwo_MaxLimitReached;
buttonOne.MaxLimitExited -= ButtonOne_MaxLimitExited;
buttonTwo.MaxLimitExited -= ButtonTwo_MaxLimitExited;
}
protected virtual void ButtonOne_MaxLimitReached(object sender, Controllables.ControllableEventArgs e)
{
if (buttonTwoPressed)
{
SetStayPressed(buttonTwo, false);
}
buttonOnePressed = true;
SetPositionTarget(buttonOne, 0f);
ChangeColor(buttonOne.gameObject, onColor);
}
protected virtual void ButtonTwo_MaxLimitReached(object sender, Controllables.ControllableEventArgs e)
{
if (buttonOnePressed)
{
SetStayPressed(buttonOne, false);
}
buttonTwoPressed = true;
SetPositionTarget(buttonTwo, 0f);
ChangeColor(buttonTwo.gameObject, onColor);
}
protected virtual void ButtonOne_MaxLimitExited(object sender, Controllables.ControllableEventArgs e)
{
SetStayPressed(buttonOne, true);
buttonOnePressed = false;
ChangeColor(buttonOne.gameObject, offColor);
}
protected virtual void ButtonTwo_MaxLimitExited(object sender, Controllables.ControllableEventArgs e)
{
SetStayPressed(buttonTwo, true);
buttonTwoPressed = false;
ChangeColor(buttonTwo.gameObject, offColor);
}
protected virtual void ChangeColor(GameObject obj, Color col)
{
obj.GetComponent<Renderer>().material.color = col;
}
protected virtual void SetStayPressed(VRTK_BaseControllable obj, bool state)
{
if (obj.GetType() == typeof(VRTK_PhysicsPusher))
{
VRTK_PhysicsPusher physicsObj = obj as VRTK_PhysicsPusher;
physicsObj.stayPressed = state;
}
else if (obj.GetType() == typeof(VRTK_ArtificialPusher))
{
VRTK_ArtificialPusher artificialObj = obj as VRTK_ArtificialPusher;
artificialObj.SetStayPressed(state);
}
}
protected virtual void SetPositionTarget(VRTK_BaseControllable obj, float newTarget)
{
if (obj.GetType() == typeof(VRTK_PhysicsPusher))
{
VRTK_PhysicsPusher physicsObj = obj as VRTK_PhysicsPusher;
physicsObj.positionTarget = newTarget;
}
else if (obj.GetType() == typeof(VRTK_ArtificialPusher))
{
VRTK_ArtificialPusher artificialObj = obj as VRTK_ArtificialPusher;
artificialObj.SetPositionTarget(newTarget);
}
}
}
}