using NaughtyAttributes; using System; using UnityEngine; namespace UDE_HAND_INTERACTION { public class RayController : MonoBehaviour { private SimInputController simInput; private HandInteractor interactor; private HandDriver handDriver; public enum InteractType { AnyFinger, AllFingers, } [Label("Active Ray")] public bool IsUsingRay; [EnableIf("IsUsingRay")] public InteractType RayActiveType; [BoxGroup("Thumb"), Label(" Active"), ShowIf("IsUsingRay")] public bool Thumb; [BoxGroup("Thumb"), Label(" Intense"), Range(0, 1), ShowIf("IsUsingRay")] public float ThumbIntense; [BoxGroup("Index"), Label(" Active"), ShowIf("IsUsingRay")] public bool Index; [BoxGroup("Index"), Label(" Intense"), Range(0, 1), ShowIf("IsUsingRay")] public float IndexIntense; [BoxGroup("Middle"), Label(" Active"), ShowIf("IsUsingRay")] public bool Middle; [BoxGroup("Middle"), Label(" Intense"), Range(0, 1), ShowIf("IsUsingRay")] public float MiddleIntense; [BoxGroup("Ring"), Label(" Active"), ShowIf("IsUsingRay")] public bool Ring; [BoxGroup("Ring"), Label(" Intense"), Range(0, 1), ShowIf("IsUsingRay")] public float RingIntense; [BoxGroup("Pinky"), Label(" Active"), ShowIf("IsUsingRay")] public bool Pinky; [BoxGroup("Pinky"), Label(" Intense"), Range(0, 1), ShowIf("IsUsingRay")] public float PinkyIntense; [BoxGroup("A Button"), Label(" Active"), ShowIf("IsUsingRay")] public bool AButton; private bool[] FingersSelectList; private float[] FingersValueList; private bool[] ActiveCnt; void Start() { simInput = transform.GetComponentInChildren(); interactor = transform.GetComponent(); handDriver = interactor.HandDriver; } void Update() { if(!IsUsingRay) { simInput?.gameObject.SetActive(false); return; } else { simInput.gameObject.SetActive(true); } FingersSelectList = new bool[5] { Thumb, Index, Middle, Ring, Pinky }; FingersValueList = new float[5] { ThumbIntense, IndexIntense, MiddleIntense, RingIntense, PinkyIntense }; float[] FingerData = new float[5] { handDriver.thumb2.z, handDriver.index2.z, handDriver.middle2.z, handDriver.ring2.z, handDriver.pinky2.z }; ActiveCnt = new bool[5]; for(int i = 0; i < 5; ++i) { ActiveCnt[i] = FingersSelectList[i] && Math.Abs(FingerData[i]) >= 80f * FingersValueList[i]; } bool[] ActiveCheck = new bool[2] { false, true }; bool res = false; for (int i = 0; i < 5; ++i) { if (RayActiveType == InteractType.AnyFinger) { ActiveCheck[0] |= ActiveCnt[i]; res = ActiveCheck[0]; } else if (RayActiveType == InteractType.AllFingers) { ActiveCheck[1] &= ActiveCnt[i]; res = ActiveCheck[1]; } } if (AButton) { res |= GetComponentInChildren().inputData.aButton; } simInput.TriggerActive = res; } } }