WIP furniture picking
This commit is contained in:
@@ -0,0 +1,356 @@
|
||||
using UnityEngine;
|
||||
using System.Collections;
|
||||
|
||||
public struct ControllerClickedEventArgs
|
||||
{
|
||||
public uint controllerIndex;
|
||||
public float buttonPressure;
|
||||
public Vector2 touchpadAxis;
|
||||
}
|
||||
|
||||
public delegate void ControllerClickedEventHandler(object sender, ControllerClickedEventArgs e);
|
||||
|
||||
public class SteamVR_ControllerEvents : MonoBehaviour {
|
||||
public enum ButtonAlias
|
||||
{
|
||||
Trigger,
|
||||
Grip,
|
||||
Touchpad_Touch,
|
||||
Touchpad_Press,
|
||||
Application_Menu
|
||||
}
|
||||
|
||||
public ButtonAlias pointerToggleButton = ButtonAlias.Grip;
|
||||
public ButtonAlias grabToggleButton = ButtonAlias.Trigger;
|
||||
public ButtonAlias useToggleButton = ButtonAlias.Trigger;
|
||||
public ButtonAlias menuToggleButton = ButtonAlias.Application_Menu;
|
||||
|
||||
public int axisFidelity = 1;
|
||||
|
||||
public bool triggerPressed = false;
|
||||
public bool triggerAxisChanged = false;
|
||||
public bool applicationMenuPressed = false;
|
||||
public bool touchpadPressed = false;
|
||||
public bool touchpadTouched = false;
|
||||
public bool touchpadAxisChanged = false;
|
||||
public bool gripPressed = false;
|
||||
|
||||
public event ControllerClickedEventHandler TriggerClicked;
|
||||
public event ControllerClickedEventHandler TriggerUnclicked;
|
||||
|
||||
public event ControllerClickedEventHandler TriggerAxisChanged;
|
||||
|
||||
public event ControllerClickedEventHandler ApplicationMenuClicked;
|
||||
public event ControllerClickedEventHandler ApplicationMenuUnclicked;
|
||||
|
||||
public event ControllerClickedEventHandler GripClicked;
|
||||
public event ControllerClickedEventHandler GripUnclicked;
|
||||
|
||||
public event ControllerClickedEventHandler TouchpadClicked;
|
||||
public event ControllerClickedEventHandler TouchpadUnclicked;
|
||||
|
||||
public event ControllerClickedEventHandler TouchpadTouched;
|
||||
public event ControllerClickedEventHandler TouchpadUntouched;
|
||||
|
||||
public event ControllerClickedEventHandler TouchpadAxisChanged;
|
||||
|
||||
public event ControllerClickedEventHandler AliasPointerOn;
|
||||
public event ControllerClickedEventHandler AliasPointerOff;
|
||||
|
||||
public event ControllerClickedEventHandler AliasGrabOn;
|
||||
public event ControllerClickedEventHandler AliasGrabOff;
|
||||
|
||||
public event ControllerClickedEventHandler AliasUseOn;
|
||||
public event ControllerClickedEventHandler AliasUseOff;
|
||||
|
||||
public event ControllerClickedEventHandler AliasMenuOn;
|
||||
public event ControllerClickedEventHandler AliasMenuOff;
|
||||
|
||||
private uint controllerIndex;
|
||||
private SteamVR_TrackedObject trackedController;
|
||||
private SteamVR_Controller.Device device;
|
||||
|
||||
private Vector2 touchpadAxis = Vector2.zero;
|
||||
private Vector2 triggerAxis = Vector2.zero;
|
||||
|
||||
public virtual void OnTriggerClicked(ControllerClickedEventArgs e)
|
||||
{
|
||||
if (TriggerClicked != null)
|
||||
TriggerClicked(this, e);
|
||||
}
|
||||
|
||||
public virtual void OnTriggerUnclicked(ControllerClickedEventArgs e)
|
||||
{
|
||||
if (TriggerUnclicked != null)
|
||||
TriggerUnclicked(this, e);
|
||||
}
|
||||
|
||||
public virtual void OnTriggerAxisChanged(ControllerClickedEventArgs e)
|
||||
{
|
||||
if (TriggerAxisChanged != null)
|
||||
TriggerAxisChanged(this, e);
|
||||
}
|
||||
|
||||
public virtual void OnApplicationMenuClicked(ControllerClickedEventArgs e)
|
||||
{
|
||||
if (ApplicationMenuClicked != null)
|
||||
ApplicationMenuClicked(this, e);
|
||||
}
|
||||
|
||||
public virtual void OnApplicationMenuUnclicked(ControllerClickedEventArgs e)
|
||||
{
|
||||
if (ApplicationMenuUnclicked != null)
|
||||
ApplicationMenuUnclicked(this, e);
|
||||
}
|
||||
|
||||
public virtual void OnGripClicked(ControllerClickedEventArgs e)
|
||||
{
|
||||
if (GripClicked != null)
|
||||
GripClicked(this, e);
|
||||
}
|
||||
|
||||
public virtual void OnGripUnclicked(ControllerClickedEventArgs e)
|
||||
{
|
||||
if (GripUnclicked != null)
|
||||
GripUnclicked(this, e);
|
||||
}
|
||||
|
||||
public virtual void OnTouchpadClicked(ControllerClickedEventArgs e)
|
||||
{
|
||||
if (TouchpadClicked != null)
|
||||
TouchpadClicked(this, e);
|
||||
}
|
||||
|
||||
public virtual void OnTouchpadUnclicked(ControllerClickedEventArgs e)
|
||||
{
|
||||
if (TouchpadUnclicked != null)
|
||||
TouchpadUnclicked(this, e);
|
||||
}
|
||||
|
||||
public virtual void OnTouchpadTouched(ControllerClickedEventArgs e)
|
||||
{
|
||||
if (TouchpadTouched != null)
|
||||
TouchpadTouched(this, e);
|
||||
}
|
||||
|
||||
public virtual void OnTouchpadUntouched(ControllerClickedEventArgs e)
|
||||
{
|
||||
if (TouchpadUntouched != null)
|
||||
TouchpadUntouched(this, e);
|
||||
}
|
||||
|
||||
public virtual void OnTouchpadAxisChanged(ControllerClickedEventArgs e)
|
||||
{
|
||||
if (TouchpadAxisChanged != null)
|
||||
TouchpadAxisChanged(this, e);
|
||||
}
|
||||
|
||||
public virtual void OnAliasPointerOn(ControllerClickedEventArgs e)
|
||||
{
|
||||
if (AliasPointerOn != null)
|
||||
AliasPointerOn(this, e);
|
||||
}
|
||||
|
||||
public virtual void OnAliasPointerOff(ControllerClickedEventArgs e)
|
||||
{
|
||||
if (AliasPointerOff != null)
|
||||
AliasPointerOff(this, e);
|
||||
}
|
||||
|
||||
public virtual void OnAliasGrabOn(ControllerClickedEventArgs e)
|
||||
{
|
||||
if (AliasGrabOn != null)
|
||||
AliasGrabOn(this, e);
|
||||
}
|
||||
|
||||
public virtual void OnAliasGrabOff(ControllerClickedEventArgs e)
|
||||
{
|
||||
if (AliasGrabOff != null)
|
||||
AliasGrabOff(this, e);
|
||||
}
|
||||
|
||||
public virtual void OnAliasUseOn(ControllerClickedEventArgs e)
|
||||
{
|
||||
if (AliasUseOn != null)
|
||||
AliasUseOn(this, e);
|
||||
}
|
||||
|
||||
public virtual void OnAliasUseOff(ControllerClickedEventArgs e)
|
||||
{
|
||||
if (AliasUseOff != null)
|
||||
AliasUseOff(this, e);
|
||||
}
|
||||
|
||||
public virtual void OnAliasMenuOn(ControllerClickedEventArgs e)
|
||||
{
|
||||
if (AliasMenuOn != null)
|
||||
AliasMenuOn(this, e);
|
||||
}
|
||||
|
||||
public virtual void OnAliasMenuOff(ControllerClickedEventArgs e)
|
||||
{
|
||||
if (AliasMenuOff != null)
|
||||
AliasMenuOff(this, e);
|
||||
}
|
||||
|
||||
ControllerClickedEventArgs SetButtonEvent(ref bool buttonBool, bool value, float buttonPressure)
|
||||
{
|
||||
buttonBool = value;
|
||||
ControllerClickedEventArgs e;
|
||||
e.controllerIndex = controllerIndex;
|
||||
e.buttonPressure = buttonPressure;
|
||||
e.touchpadAxis = device.GetAxis();
|
||||
return e;
|
||||
}
|
||||
|
||||
void Awake()
|
||||
{
|
||||
trackedController = GetComponent<SteamVR_TrackedObject>();
|
||||
}
|
||||
|
||||
void EmitAlias(ButtonAlias type, bool touchDown, float buttonPressure, ref bool buttonBool)
|
||||
{
|
||||
if (pointerToggleButton == type)
|
||||
{
|
||||
if (touchDown)
|
||||
{
|
||||
OnAliasPointerOn(SetButtonEvent(ref buttonBool, true, buttonPressure));
|
||||
} else
|
||||
{
|
||||
OnAliasPointerOff(SetButtonEvent(ref buttonBool, false, buttonPressure));
|
||||
}
|
||||
}
|
||||
|
||||
if (grabToggleButton == type)
|
||||
{
|
||||
if (touchDown)
|
||||
{
|
||||
OnAliasGrabOn(SetButtonEvent(ref buttonBool, true, buttonPressure));
|
||||
}
|
||||
else
|
||||
{
|
||||
OnAliasGrabOff(SetButtonEvent(ref buttonBool, false, buttonPressure));
|
||||
}
|
||||
}
|
||||
|
||||
if (useToggleButton == type)
|
||||
{
|
||||
if (touchDown)
|
||||
{
|
||||
OnAliasUseOn(SetButtonEvent(ref buttonBool, true, buttonPressure));
|
||||
}
|
||||
else
|
||||
{
|
||||
OnAliasUseOff(SetButtonEvent(ref buttonBool, false, buttonPressure));
|
||||
}
|
||||
}
|
||||
|
||||
if (menuToggleButton == type)
|
||||
{
|
||||
if (touchDown)
|
||||
{
|
||||
OnAliasMenuOn(SetButtonEvent(ref buttonBool, true, buttonPressure));
|
||||
}
|
||||
else
|
||||
{
|
||||
OnAliasMenuOff(SetButtonEvent(ref buttonBool, false, buttonPressure));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool Vector2ShallowEquals(Vector2 vectorA, Vector2 vectorB)
|
||||
{
|
||||
return (vectorA.x.ToString("F" + axisFidelity) == vectorB.x.ToString("F" + axisFidelity) &&
|
||||
vectorA.y.ToString("F" + axisFidelity) == vectorB.y.ToString("F" + axisFidelity));
|
||||
}
|
||||
|
||||
void Update()
|
||||
{
|
||||
controllerIndex = (uint)trackedController.index;
|
||||
device = SteamVR_Controller.Input((int)controllerIndex);
|
||||
|
||||
Vector2 currentTriggerAxis = device.GetAxis(Valve.VR.EVRButtonId.k_EButton_SteamVR_Trigger);
|
||||
Vector2 currentTouchpadAxis = device.GetAxis();
|
||||
|
||||
if (Vector2ShallowEquals(triggerAxis, currentTriggerAxis))
|
||||
{
|
||||
triggerAxisChanged = false;
|
||||
} else
|
||||
{
|
||||
OnTriggerAxisChanged(SetButtonEvent(ref triggerPressed, true, currentTriggerAxis.x));
|
||||
triggerAxisChanged = true;
|
||||
}
|
||||
|
||||
if(Vector2ShallowEquals(touchpadAxis, currentTouchpadAxis))
|
||||
{
|
||||
touchpadAxisChanged = false;
|
||||
} else
|
||||
{
|
||||
OnTouchpadAxisChanged(SetButtonEvent(ref touchpadTouched, true, 1f));
|
||||
touchpadAxisChanged = true;
|
||||
}
|
||||
|
||||
touchpadAxis = new Vector2(currentTouchpadAxis.x, currentTouchpadAxis.y);
|
||||
triggerAxis = new Vector2(currentTriggerAxis.x, currentTriggerAxis.y);
|
||||
|
||||
//Trigger
|
||||
if (device.GetTouchDown(SteamVR_Controller.ButtonMask.Trigger))
|
||||
{
|
||||
OnTriggerClicked(SetButtonEvent(ref triggerPressed, true, currentTriggerAxis.x));
|
||||
EmitAlias(ButtonAlias.Trigger, true, currentTriggerAxis.x, ref triggerPressed);
|
||||
} else if (device.GetTouchUp(SteamVR_Controller.ButtonMask.Trigger))
|
||||
{
|
||||
OnTriggerUnclicked(SetButtonEvent(ref triggerPressed, false, 0f));
|
||||
EmitAlias(ButtonAlias.Trigger, false, 0f, ref triggerPressed);
|
||||
}
|
||||
|
||||
//ApplicationMenu
|
||||
if (device.GetTouchDown(SteamVR_Controller.ButtonMask.ApplicationMenu))
|
||||
{
|
||||
OnApplicationMenuClicked(SetButtonEvent(ref applicationMenuPressed, true, 1f));
|
||||
EmitAlias(ButtonAlias.Application_Menu, true, 1f, ref applicationMenuPressed);
|
||||
}
|
||||
else if (device.GetTouchUp(SteamVR_Controller.ButtonMask.ApplicationMenu))
|
||||
{
|
||||
|
||||
OnApplicationMenuUnclicked(SetButtonEvent(ref applicationMenuPressed, false, 0f));
|
||||
EmitAlias(ButtonAlias.Application_Menu, false, 0f, ref applicationMenuPressed);
|
||||
}
|
||||
|
||||
//Grip
|
||||
if (device.GetTouchDown(SteamVR_Controller.ButtonMask.Grip))
|
||||
{
|
||||
OnGripClicked(SetButtonEvent(ref gripPressed, true, 1f));
|
||||
EmitAlias(ButtonAlias.Grip, true, 1f, ref gripPressed);
|
||||
}
|
||||
else if (device.GetTouchUp(SteamVR_Controller.ButtonMask.Grip))
|
||||
{
|
||||
OnGripUnclicked(SetButtonEvent(ref gripPressed, false, 0f));
|
||||
EmitAlias(ButtonAlias.Grip, false, 0f, ref gripPressed);
|
||||
}
|
||||
|
||||
//Touchpad Clicked
|
||||
if (device.GetPressDown(SteamVR_Controller.ButtonMask.Touchpad))
|
||||
{
|
||||
OnTouchpadClicked(SetButtonEvent(ref touchpadPressed, true, 1f));
|
||||
EmitAlias(ButtonAlias.Touchpad_Press, true, 1f, ref touchpadPressed);
|
||||
}
|
||||
else if (device.GetPressUp(SteamVR_Controller.ButtonMask.Touchpad))
|
||||
{
|
||||
OnTouchpadUnclicked(SetButtonEvent(ref touchpadPressed, false, 0f));
|
||||
EmitAlias(ButtonAlias.Touchpad_Press, false, 0f, ref touchpadPressed);
|
||||
}
|
||||
|
||||
//Touchpad Touched
|
||||
if (device.GetTouchDown(SteamVR_Controller.ButtonMask.Touchpad))
|
||||
{
|
||||
OnTouchpadTouched(SetButtonEvent(ref touchpadTouched, true, 1f));
|
||||
EmitAlias(ButtonAlias.Touchpad_Touch, true, 1f, ref touchpadTouched);
|
||||
}
|
||||
else if (device.GetTouchUp(SteamVR_Controller.ButtonMask.Touchpad))
|
||||
{
|
||||
OnTouchpadUntouched(SetButtonEvent(ref touchpadTouched, false, 0f));
|
||||
EmitAlias(ButtonAlias.Touchpad_Touch, false, 0f, ref touchpadTouched);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user