void Update()
    {
        if (!DetectionManager.Get().IsHandSet(EHand.eRightHand))
        {
            m_Renderer.SetPosition(0, new Vector3(0, 0, 0));
            m_Renderer.SetPosition(1, new Vector3(0, 0, 0));

            return;
        }

        if (m_bActive || m_bOnlyOn)
        {
            DetectionManager.DetectionFinger finger = DetectionManager.Get().GetHand(EHand.eRightHand).GetFinger(EFinger.eIndex);
            Vector3 startPos  = finger.GetTipPosition();
            Vector3 direction = finger.GetFingerDirection();
            Vector3 endPos    = startPos + direction * m_Distance;

            m_Renderer.SetPosition(0, startPos);
            m_Renderer.SetPosition(1, endPos);
        }
        else
        {
            m_Renderer.SetPosition(0, new Vector3(0, 0, 0));
            m_Renderer.SetPosition(1, new Vector3(0, 0, 0));
        }
    }
    public override bool JustifiesRequirement(EHand Hand, GestureRequirementData RequirementData)
    {
        DetectionManager.DetectionHand SelectedHand = DetectionManager.Get().GetHand(Hand);
        if (SelectedHand.IsSet())
        {
            Vector3 FingerDirection = SelectedHand.GetFinger(RequirementData.m_FingerValue).GetFingerDirection();

            DetectionManager.DetectionFinger SelectedFinger = SelectedHand.GetFinger(RequirementData.m_FingerValue);

            Vector3 Bone1Dir = SelectedFinger.GetBoneDirection(ESpecificBone.eBone0);
            Vector3 Bone2Dir = SelectedFinger.GetBoneDirection(ESpecificBone.eBone1);
            Vector3 Bone3Dir = SelectedFinger.GetBoneDirection(ESpecificBone.eBone2);

            float boneDot;

            if (RequirementData.m_FingerValue == EFinger.eThumb)
            {
                boneDot = Mathf.Clamp(Vector3.Dot(Bone2Dir, Bone3Dir), 0.0f, 1.0f);
            }
            else
            {
                boneDot = Mathf.Clamp(Vector3.Dot(Bone1Dir, Bone3Dir), 0.0f, 1.0f);
            }

            float percentage = Mathf.Lerp(1.0f, 0.0f, boneDot);

            if (percentage > RequirementData.m_FloatValue)
            {
                return(true);
            }
        }

        return(false);
    }