Files
UltimateFishing/Assets/Scripts/Assembly-CSharp/OvrAvatarLocalDriver.cs
2026-02-21 16:45:37 +08:00

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);
}
}