118 lines
4.1 KiB
C#
118 lines
4.1 KiB
C#
// Copyright HTC Corporation All Rights Reserved.
|
|
|
|
using System.Text;
|
|
using UnityEngine;
|
|
using UnityEngine.InputSystem;
|
|
|
|
namespace VIVE.OpenXR.Models
|
|
{
|
|
public class ControllerModelActions : MonoBehaviour
|
|
{
|
|
#region Log
|
|
const string LOG_TAG = "VIVE.OpenXR.Models.ControllerModelActions";
|
|
StringBuilder m_sb = null;
|
|
StringBuilder sb {
|
|
get {
|
|
if (m_sb == null) { m_sb = new StringBuilder(); }
|
|
return m_sb;
|
|
}
|
|
}
|
|
void DEBUG(StringBuilder msg) { Debug.LogFormat("{0} {1}", LOG_TAG, msg); }
|
|
void ERROR(StringBuilder msg) { Debug.LogErrorFormat("{0} {1}", LOG_TAG, msg); }
|
|
#endregion
|
|
|
|
#region Inspector
|
|
public bool isLeft = false;
|
|
public GameObject triggerButton = null;
|
|
public GameObject gripButton = null;
|
|
public GameObject thumbstickButton = null;
|
|
public GameObject primaryButton = null;
|
|
public GameObject secondaryButton = null;
|
|
|
|
public InputAction trigger = null;
|
|
public InputAction grip = null;
|
|
public InputAction thumbstick = null;
|
|
public InputAction primaryClick = null;
|
|
public InputAction secondaryClick = null;
|
|
#endregion
|
|
|
|
private Quaternion triggerRot = Quaternion.identity;
|
|
private Vector3 gripButtonPos = Vector3.zero;
|
|
private Vector3 primaryButtonPos = Vector3.zero;
|
|
private Vector3 secondaryButtonPos = Vector3.zero;
|
|
|
|
void Start()
|
|
{
|
|
if (triggerButton != null) { triggerRot = triggerButton.transform.localRotation; }
|
|
if (gripButton != null) { gripButtonPos = gripButton.transform.localPosition; }
|
|
if (primaryButton != null) { primaryButtonPos = primaryButton.transform.localPosition; }
|
|
if (secondaryButton != null) { secondaryButtonPos = secondaryButton.transform.localPosition; }
|
|
|
|
if (trigger != null) { trigger.Enable(); }
|
|
if (grip != null) { grip.Enable(); }
|
|
if (thumbstick != null) { thumbstick.Enable(); }
|
|
if (primaryClick != null) { primaryClick.Enable(); }
|
|
if (secondaryClick != null) { secondaryClick.Enable(); }
|
|
}
|
|
|
|
void Update()
|
|
{
|
|
OnTrigger();
|
|
OnGrip();
|
|
OnThumbstick();
|
|
OnPrimaryClick();
|
|
OnSecondaryClick();
|
|
}
|
|
|
|
void OnTrigger()
|
|
{
|
|
if (OpenXRHelper.GetAnalog(trigger, out float value, out string msg))
|
|
{
|
|
triggerButton.transform.localRotation = Quaternion.Euler(value * 15f, 0, 0);
|
|
}
|
|
else
|
|
{
|
|
triggerButton.transform.localRotation = triggerRot;
|
|
}
|
|
}
|
|
void OnGrip()
|
|
{
|
|
if (OpenXRHelper.GetAnalog(grip, out float value, out string msg))
|
|
{
|
|
if (isLeft)
|
|
gripButton.transform.localPosition = gripButtonPos + Vector3.right * value * -0.002f;
|
|
else
|
|
gripButton.transform.localPosition = gripButtonPos + Vector3.left * value * -0.002f;
|
|
}
|
|
}
|
|
void OnThumbstick()
|
|
{
|
|
if (OpenXRHelper.GetVector2(thumbstick, out Vector2 value, out string msg))
|
|
{
|
|
thumbstickButton.transform.localRotation = Quaternion.Euler(value.y * 25f, 0, value.x * -25f);
|
|
}
|
|
}
|
|
void OnPrimaryClick()
|
|
{
|
|
if (OpenXRHelper.GetAnalog(primaryClick, out float value, out string msg))
|
|
{
|
|
primaryButton.transform.localPosition = primaryButtonPos + Vector3.down * (value > 0.5f ? 0.00125f : 0);
|
|
}
|
|
else
|
|
{
|
|
primaryButton.transform.localPosition = primaryButtonPos;
|
|
}
|
|
}
|
|
void OnSecondaryClick()
|
|
{
|
|
if (OpenXRHelper.GetAnalog(secondaryClick, out float value, out string msg))
|
|
{
|
|
secondaryButton.transform.localPosition = secondaryButtonPos + Vector3.down * (value > 0.5f ? 0.00125f : 0);
|
|
}
|
|
else
|
|
{
|
|
secondaryButton.transform.localPosition = secondaryButtonPos;
|
|
}
|
|
}
|
|
}
|
|
} |