132 lines
4.6 KiB
C#
132 lines
4.6 KiB
C#
using System;
|
|
using UnityEngine;
|
|
using UnityEngine.XR;
|
|
|
|
public class OvrAvatarLocalDriver : OvrAvatarDriver
|
|
{
|
|
private Vector3 centerEyePosition = Vector3.zero;
|
|
|
|
private Quaternion centerEyeRotation = Quaternion.identity;
|
|
|
|
private float voiceAmplitude;
|
|
|
|
private ControllerPose GetMalibuControllerPose(OVRInput.Controller controller)
|
|
{
|
|
ovrAvatarButton ovrAvatarButton2 = (ovrAvatarButton)0;
|
|
if (OVRInput.Get(OVRInput.Button.PrimaryIndexTrigger, controller))
|
|
{
|
|
ovrAvatarButton2 |= ovrAvatarButton.One;
|
|
}
|
|
return new ControllerPose
|
|
{
|
|
buttons = ovrAvatarButton2,
|
|
touches = (OVRInput.Get(OVRInput.Touch.PrimaryTouchpad) ? ovrAvatarTouch.One : ((ovrAvatarTouch)0)),
|
|
joystickPosition = OVRInput.Get(OVRInput.Axis2D.PrimaryTouchpad, controller),
|
|
indexTrigger = 0f,
|
|
handTrigger = 0f,
|
|
isActive = ((OVRInput.GetActiveController() & controller) != 0)
|
|
};
|
|
}
|
|
|
|
private ControllerPose GetControllerPose(OVRInput.Controller controller)
|
|
{
|
|
ovrAvatarButton ovrAvatarButton2 = (ovrAvatarButton)0;
|
|
if (OVRInput.Get(OVRInput.Button.One, controller))
|
|
{
|
|
ovrAvatarButton2 |= ovrAvatarButton.One;
|
|
}
|
|
if (OVRInput.Get(OVRInput.Button.Two, controller))
|
|
{
|
|
ovrAvatarButton2 |= ovrAvatarButton.Two;
|
|
}
|
|
if (OVRInput.Get(OVRInput.Button.Start, controller))
|
|
{
|
|
ovrAvatarButton2 |= ovrAvatarButton.Three;
|
|
}
|
|
if (OVRInput.Get(OVRInput.Button.PrimaryThumbstick, controller))
|
|
{
|
|
ovrAvatarButton2 |= ovrAvatarButton.Joystick;
|
|
}
|
|
ovrAvatarTouch ovrAvatarTouch2 = (ovrAvatarTouch)0;
|
|
if (OVRInput.Get(OVRInput.Touch.One, controller))
|
|
{
|
|
ovrAvatarTouch2 |= ovrAvatarTouch.One;
|
|
}
|
|
if (OVRInput.Get(OVRInput.Touch.Two, controller))
|
|
{
|
|
ovrAvatarTouch2 |= ovrAvatarTouch.Two;
|
|
}
|
|
if (OVRInput.Get(OVRInput.Touch.PrimaryThumbstick, controller))
|
|
{
|
|
ovrAvatarTouch2 |= ovrAvatarTouch.Joystick;
|
|
}
|
|
if (OVRInput.Get(OVRInput.Touch.PrimaryThumbRest, controller))
|
|
{
|
|
ovrAvatarTouch2 |= ovrAvatarTouch.ThumbRest;
|
|
}
|
|
if (OVRInput.Get(OVRInput.Touch.PrimaryIndexTrigger, controller))
|
|
{
|
|
ovrAvatarTouch2 |= ovrAvatarTouch.Index;
|
|
}
|
|
if (!OVRInput.Get(OVRInput.NearTouch.PrimaryIndexTrigger, controller))
|
|
{
|
|
ovrAvatarTouch2 |= ovrAvatarTouch.Pointing;
|
|
}
|
|
if (!OVRInput.Get(OVRInput.NearTouch.PrimaryThumbButtons, controller))
|
|
{
|
|
ovrAvatarTouch2 |= ovrAvatarTouch.ThumbUp;
|
|
}
|
|
return new ControllerPose
|
|
{
|
|
buttons = ovrAvatarButton2,
|
|
touches = ovrAvatarTouch2,
|
|
joystickPosition = OVRInput.Get(OVRInput.Axis2D.PrimaryThumbstick, controller),
|
|
indexTrigger = OVRInput.Get(OVRInput.Axis1D.PrimaryIndexTrigger, controller),
|
|
handTrigger = OVRInput.Get(OVRInput.Axis1D.PrimaryHandTrigger, controller),
|
|
isActive = ((OVRInput.GetActiveController() & controller) != 0)
|
|
};
|
|
}
|
|
|
|
private void CalculateCurrentPose()
|
|
{
|
|
OVRNodeStateProperties.GetNodeStatePropertyVector3(XRNode.CenterEye, NodeStatePropertyType.Position, OVRPlugin.Node.EyeCenter, OVRPlugin.Step.Render, out centerEyePosition);
|
|
OVRNodeStateProperties.GetNodeStatePropertyQuaternion(XRNode.CenterEye, NodeStatePropertyType.Orientation, OVRPlugin.Node.EyeCenter, OVRPlugin.Step.Render, out centerEyeRotation);
|
|
if (OvrAvatarDriver.GetIsTrackedRemote())
|
|
{
|
|
CurrentPose = new PoseFrame
|
|
{
|
|
voiceAmplitude = voiceAmplitude,
|
|
headPosition = centerEyePosition,
|
|
headRotation = centerEyeRotation,
|
|
handLeftPosition = OVRInput.GetLocalControllerPosition(OVRInput.Controller.LTrackedRemote),
|
|
handLeftRotation = OVRInput.GetLocalControllerRotation(OVRInput.Controller.LTrackedRemote),
|
|
handRightPosition = OVRInput.GetLocalControllerPosition(OVRInput.Controller.RTrackedRemote),
|
|
handRightRotation = OVRInput.GetLocalControllerRotation(OVRInput.Controller.RTrackedRemote),
|
|
controllerLeftPose = GetMalibuControllerPose(OVRInput.Controller.LTrackedRemote),
|
|
controllerRightPose = GetMalibuControllerPose(OVRInput.Controller.RTrackedRemote)
|
|
};
|
|
}
|
|
else
|
|
{
|
|
CurrentPose = new PoseFrame
|
|
{
|
|
voiceAmplitude = voiceAmplitude,
|
|
headPosition = centerEyePosition,
|
|
headRotation = centerEyeRotation,
|
|
handLeftPosition = OVRInput.GetLocalControllerPosition(OVRInput.Controller.LTouch),
|
|
handLeftRotation = OVRInput.GetLocalControllerRotation(OVRInput.Controller.LTouch),
|
|
handRightPosition = OVRInput.GetLocalControllerPosition(OVRInput.Controller.RTouch),
|
|
handRightRotation = OVRInput.GetLocalControllerRotation(OVRInput.Controller.RTouch),
|
|
controllerLeftPose = GetControllerPose(OVRInput.Controller.LTouch),
|
|
controllerRightPose = GetControllerPose(OVRInput.Controller.RTouch)
|
|
};
|
|
}
|
|
}
|
|
|
|
public override void UpdateTransforms(IntPtr sdkAvatar)
|
|
{
|
|
CalculateCurrentPose();
|
|
UpdateTransformsFromPose(sdkAvatar);
|
|
}
|
|
}
|