Initialer Upload neues Unity-Projekt
This commit is contained in:
250
Assets/SteamVR/Extras/SteamVR_TrackedController.cs
Normal file
250
Assets/SteamVR/Extras/SteamVR_TrackedController.cs
Normal file
@ -0,0 +1,250 @@
|
||||
//======= Copyright (c) Valve Corporation, All rights reserved. ===============
|
||||
using UnityEngine;
|
||||
using Valve.VR;
|
||||
|
||||
public struct ClickedEventArgs
|
||||
{
|
||||
public uint controllerIndex;
|
||||
public uint flags;
|
||||
public float padX, padY;
|
||||
}
|
||||
|
||||
public delegate void ClickedEventHandler(object sender, ClickedEventArgs e);
|
||||
|
||||
public class SteamVR_TrackedController : MonoBehaviour
|
||||
{
|
||||
public uint controllerIndex;
|
||||
public VRControllerState_t controllerState;
|
||||
public bool triggerPressed = false;
|
||||
public bool steamPressed = false;
|
||||
public bool menuPressed = false;
|
||||
public bool padPressed = false;
|
||||
public bool padTouched = false;
|
||||
public bool gripped = false;
|
||||
|
||||
public event ClickedEventHandler MenuButtonClicked;
|
||||
public event ClickedEventHandler MenuButtonUnclicked;
|
||||
public event ClickedEventHandler TriggerClicked;
|
||||
public event ClickedEventHandler TriggerUnclicked;
|
||||
public event ClickedEventHandler SteamClicked;
|
||||
public event ClickedEventHandler PadClicked;
|
||||
public event ClickedEventHandler PadUnclicked;
|
||||
public event ClickedEventHandler PadTouched;
|
||||
public event ClickedEventHandler PadUntouched;
|
||||
public event ClickedEventHandler Gripped;
|
||||
public event ClickedEventHandler Ungripped;
|
||||
|
||||
// Use this for initialization
|
||||
protected virtual void Start()
|
||||
{
|
||||
if (this.GetComponent<SteamVR_TrackedObject>() == null)
|
||||
{
|
||||
gameObject.AddComponent<SteamVR_TrackedObject>();
|
||||
}
|
||||
|
||||
if (controllerIndex != 0)
|
||||
{
|
||||
this.GetComponent<SteamVR_TrackedObject>().index = (SteamVR_TrackedObject.EIndex)controllerIndex;
|
||||
if (this.GetComponent<SteamVR_RenderModel>() != null)
|
||||
{
|
||||
this.GetComponent<SteamVR_RenderModel>().index = (SteamVR_TrackedObject.EIndex)controllerIndex;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
controllerIndex = (uint)this.GetComponent<SteamVR_TrackedObject>().index;
|
||||
}
|
||||
}
|
||||
|
||||
public void SetDeviceIndex(int index)
|
||||
{
|
||||
this.controllerIndex = (uint)index;
|
||||
}
|
||||
|
||||
public virtual void OnTriggerClicked(ClickedEventArgs e)
|
||||
{
|
||||
if (TriggerClicked != null)
|
||||
TriggerClicked(this, e);
|
||||
}
|
||||
|
||||
public virtual void OnTriggerUnclicked(ClickedEventArgs e)
|
||||
{
|
||||
if (TriggerUnclicked != null)
|
||||
TriggerUnclicked(this, e);
|
||||
}
|
||||
|
||||
public virtual void OnMenuClicked(ClickedEventArgs e)
|
||||
{
|
||||
if (MenuButtonClicked != null)
|
||||
MenuButtonClicked(this, e);
|
||||
}
|
||||
|
||||
public virtual void OnMenuUnclicked(ClickedEventArgs e)
|
||||
{
|
||||
if (MenuButtonUnclicked != null)
|
||||
MenuButtonUnclicked(this, e);
|
||||
}
|
||||
|
||||
public virtual void OnSteamClicked(ClickedEventArgs e)
|
||||
{
|
||||
if (SteamClicked != null)
|
||||
SteamClicked(this, e);
|
||||
}
|
||||
|
||||
public virtual void OnPadClicked(ClickedEventArgs e)
|
||||
{
|
||||
if (PadClicked != null)
|
||||
PadClicked(this, e);
|
||||
}
|
||||
|
||||
public virtual void OnPadUnclicked(ClickedEventArgs e)
|
||||
{
|
||||
if (PadUnclicked != null)
|
||||
PadUnclicked(this, e);
|
||||
}
|
||||
|
||||
public virtual void OnPadTouched(ClickedEventArgs e)
|
||||
{
|
||||
if (PadTouched != null)
|
||||
PadTouched(this, e);
|
||||
}
|
||||
|
||||
public virtual void OnPadUntouched(ClickedEventArgs e)
|
||||
{
|
||||
if (PadUntouched != null)
|
||||
PadUntouched(this, e);
|
||||
}
|
||||
|
||||
public virtual void OnGripped(ClickedEventArgs e)
|
||||
{
|
||||
if (Gripped != null)
|
||||
Gripped(this, e);
|
||||
}
|
||||
|
||||
public virtual void OnUngripped(ClickedEventArgs e)
|
||||
{
|
||||
if (Ungripped != null)
|
||||
Ungripped(this, e);
|
||||
}
|
||||
|
||||
// Update is called once per frame
|
||||
protected virtual void Update()
|
||||
{
|
||||
var system = OpenVR.System;
|
||||
if (system != null && system.GetControllerState(controllerIndex, ref controllerState, (uint)System.Runtime.InteropServices.Marshal.SizeOf(typeof(VRControllerState_t))))
|
||||
{
|
||||
ulong trigger = controllerState.ulButtonPressed & (1UL << ((int)EVRButtonId.k_EButton_SteamVR_Trigger));
|
||||
if (trigger > 0L && !triggerPressed)
|
||||
{
|
||||
triggerPressed = true;
|
||||
ClickedEventArgs e;
|
||||
e.controllerIndex = controllerIndex;
|
||||
e.flags = (uint)controllerState.ulButtonPressed;
|
||||
e.padX = controllerState.rAxis0.x;
|
||||
e.padY = controllerState.rAxis0.y;
|
||||
OnTriggerClicked(e);
|
||||
|
||||
}
|
||||
else if (trigger == 0L && triggerPressed)
|
||||
{
|
||||
triggerPressed = false;
|
||||
ClickedEventArgs e;
|
||||
e.controllerIndex = controllerIndex;
|
||||
e.flags = (uint)controllerState.ulButtonPressed;
|
||||
e.padX = controllerState.rAxis0.x;
|
||||
e.padY = controllerState.rAxis0.y;
|
||||
OnTriggerUnclicked(e);
|
||||
}
|
||||
|
||||
ulong grip = controllerState.ulButtonPressed & (1UL << ((int)EVRButtonId.k_EButton_Grip));
|
||||
if (grip > 0L && !gripped)
|
||||
{
|
||||
gripped = true;
|
||||
ClickedEventArgs e;
|
||||
e.controllerIndex = controllerIndex;
|
||||
e.flags = (uint)controllerState.ulButtonPressed;
|
||||
e.padX = controllerState.rAxis0.x;
|
||||
e.padY = controllerState.rAxis0.y;
|
||||
OnGripped(e);
|
||||
|
||||
}
|
||||
else if (grip == 0L && gripped)
|
||||
{
|
||||
gripped = false;
|
||||
ClickedEventArgs e;
|
||||
e.controllerIndex = controllerIndex;
|
||||
e.flags = (uint)controllerState.ulButtonPressed;
|
||||
e.padX = controllerState.rAxis0.x;
|
||||
e.padY = controllerState.rAxis0.y;
|
||||
OnUngripped(e);
|
||||
}
|
||||
|
||||
ulong pad = controllerState.ulButtonPressed & (1UL << ((int)EVRButtonId.k_EButton_SteamVR_Touchpad));
|
||||
if (pad > 0L && !padPressed)
|
||||
{
|
||||
padPressed = true;
|
||||
ClickedEventArgs e;
|
||||
e.controllerIndex = controllerIndex;
|
||||
e.flags = (uint)controllerState.ulButtonPressed;
|
||||
e.padX = controllerState.rAxis0.x;
|
||||
e.padY = controllerState.rAxis0.y;
|
||||
OnPadClicked(e);
|
||||
}
|
||||
else if (pad == 0L && padPressed)
|
||||
{
|
||||
padPressed = false;
|
||||
ClickedEventArgs e;
|
||||
e.controllerIndex = controllerIndex;
|
||||
e.flags = (uint)controllerState.ulButtonPressed;
|
||||
e.padX = controllerState.rAxis0.x;
|
||||
e.padY = controllerState.rAxis0.y;
|
||||
OnPadUnclicked(e);
|
||||
}
|
||||
|
||||
ulong menu = controllerState.ulButtonPressed & (1UL << ((int)EVRButtonId.k_EButton_ApplicationMenu));
|
||||
if (menu > 0L && !menuPressed)
|
||||
{
|
||||
menuPressed = true;
|
||||
ClickedEventArgs e;
|
||||
e.controllerIndex = controllerIndex;
|
||||
e.flags = (uint)controllerState.ulButtonPressed;
|
||||
e.padX = controllerState.rAxis0.x;
|
||||
e.padY = controllerState.rAxis0.y;
|
||||
OnMenuClicked(e);
|
||||
}
|
||||
else if (menu == 0L && menuPressed)
|
||||
{
|
||||
menuPressed = false;
|
||||
ClickedEventArgs e;
|
||||
e.controllerIndex = controllerIndex;
|
||||
e.flags = (uint)controllerState.ulButtonPressed;
|
||||
e.padX = controllerState.rAxis0.x;
|
||||
e.padY = controllerState.rAxis0.y;
|
||||
OnMenuUnclicked(e);
|
||||
}
|
||||
|
||||
pad = controllerState.ulButtonTouched & (1UL << ((int)EVRButtonId.k_EButton_SteamVR_Touchpad));
|
||||
if (pad > 0L && !padTouched)
|
||||
{
|
||||
padTouched = true;
|
||||
ClickedEventArgs e;
|
||||
e.controllerIndex = controllerIndex;
|
||||
e.flags = (uint)controllerState.ulButtonPressed;
|
||||
e.padX = controllerState.rAxis0.x;
|
||||
e.padY = controllerState.rAxis0.y;
|
||||
OnPadTouched(e);
|
||||
|
||||
}
|
||||
else if (pad == 0L && padTouched)
|
||||
{
|
||||
padTouched = false;
|
||||
ClickedEventArgs e;
|
||||
e.controllerIndex = controllerIndex;
|
||||
e.flags = (uint)controllerState.ulButtonPressed;
|
||||
e.padX = controllerState.rAxis0.x;
|
||||
e.padY = controllerState.rAxis0.y;
|
||||
OnPadUntouched(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user