75 lines
3.6 KiB
C#
75 lines
3.6 KiB
C#
//========= Copyright 2016-2023, HTC Corporation. All rights reserved. ===========
|
|
|
|
using HTC.UnityPlugin.ColliderEvent;
|
|
using HTC.UnityPlugin.Utility;
|
|
using UnityEngine;
|
|
using UnityEngine.Serialization;
|
|
|
|
namespace HTC.UnityPlugin.Vive
|
|
{
|
|
[AddComponentMenu("VIU/Object Grabber/Vive Collider Event Caster (Grabber)", 2)]
|
|
public class ViveColliderEventCaster : ColliderEventCaster, IViveRoleComponent
|
|
{
|
|
[SerializeField]
|
|
private ViveRoleProperty m_viveRole = ViveRoleProperty.New(HandRole.RightHand);
|
|
[SerializeField]
|
|
[CustomOrderedEnum]
|
|
private ControllerButton m_buttonTrigger = ControllerButton.Trigger;
|
|
[SerializeField]
|
|
[CustomOrderedEnum]
|
|
private ControllerButton m_buttonPadOrStick = ControllerButton.Pad;
|
|
[SerializeField]
|
|
[CustomOrderedEnum]
|
|
private ControllerButton m_buttonGripOrHandTrigger = ControllerButton.Grip;
|
|
[SerializeField]
|
|
[CustomOrderedEnum]
|
|
private ControllerButton m_buttonFunctionKey = ControllerButton.Menu;
|
|
[SerializeField]
|
|
[FormerlySerializedAs("m_buttonEvents")]
|
|
[FlagsFromEnum(typeof(ControllerButton))]
|
|
private ulong m_additionalButtons = 0ul;
|
|
[SerializeField]
|
|
private ScrollType m_scrollType = ScrollType.Auto;
|
|
[SerializeField]
|
|
private Vector2 m_scrollDeltaScale = new Vector2(1f, -1f);
|
|
|
|
public ViveRoleProperty viveRole { get { return m_viveRole; } }
|
|
public ScrollType scrollType { get { return m_scrollType; } set { m_scrollType = value; } }
|
|
public Vector2 scrollDeltaScale { get { return m_scrollDeltaScale; } set { m_scrollDeltaScale = value; } }
|
|
#if UNITY_EDITOR
|
|
protected virtual void OnValidate()
|
|
{
|
|
FilterOutAssignedButton();
|
|
}
|
|
#endif
|
|
protected void FilterOutAssignedButton()
|
|
{
|
|
EnumUtils.SetFlag(ref m_additionalButtons, (int)m_buttonTrigger, false);
|
|
EnumUtils.SetFlag(ref m_additionalButtons, (int)m_buttonPadOrStick, false);
|
|
EnumUtils.SetFlag(ref m_additionalButtons, (int)m_buttonFunctionKey, false);
|
|
EnumUtils.SetFlag(ref m_additionalButtons, (int)m_buttonGripOrHandTrigger, false);
|
|
}
|
|
|
|
protected virtual void Start()
|
|
{
|
|
buttonEventDataList.Add(new ViveColliderButtonEventData(this, m_buttonTrigger, ColliderButtonEventData.InputButton.Trigger));
|
|
if (m_buttonPadOrStick != ControllerButton.None) { buttonEventDataList.Add(new ViveColliderButtonEventData(this, m_buttonPadOrStick, ColliderButtonEventData.InputButton.PadOrStick)); }
|
|
if (m_buttonGripOrHandTrigger != ControllerButton.None) { buttonEventDataList.Add(new ViveColliderButtonEventData(this, m_buttonFunctionKey, ColliderButtonEventData.InputButton.FunctionKey)); }
|
|
if (m_buttonFunctionKey != ControllerButton.None) { buttonEventDataList.Add(new ViveColliderButtonEventData(this, m_buttonGripOrHandTrigger, ColliderButtonEventData.InputButton.GripOrHandTrigger)); }
|
|
|
|
FilterOutAssignedButton();
|
|
|
|
var eventBtn = ColliderButtonEventData.InputButton.GripOrHandTrigger + 1;
|
|
var addBtns = m_additionalButtons;
|
|
for (ControllerButton btn = 0; addBtns > 0u; ++btn, addBtns >>= 1)
|
|
{
|
|
if ((addBtns & 1u) == 0u) { continue; }
|
|
|
|
buttonEventDataList.Add(new ViveColliderButtonEventData(this, btn, eventBtn++));
|
|
}
|
|
|
|
axisEventDataList.Add(new ViveColliderPadAxisEventData(this));
|
|
axisEventDataList.Add(new ViveColliderTriggerAxisEventData(this));
|
|
}
|
|
}
|
|
} |