/* * SPDX-License-Identifier: AGPL-3.0-or-later * Copyright (C) 2025 Sergej Görzen * This file is part of OmiLAXR. */ using OmiLAXR.Types; using UnityEngine; namespace OmiLAXR.TrackingBehaviours.Learner { /// /// Contains event data for interactable object events, including target object and hand information. /// public struct InteractableEventArgs { /// /// The GameObject that was interacted with. /// public GameObject Target; /// /// The hand used for the interaction (if applicable). /// public Hand Hand; /// /// Initializes a new InteractableEventArgs with the specified target and hand. /// /// The GameObject being interacted with /// The hand performing the interaction (defaults to Unknown) public InteractableEventArgs(GameObject target, Hand hand = Hand.Unknown) { Target = target; Hand = hand; } } /// /// Abstract base class for tracking behaviors that monitor XR controller interactions with objects. /// Provides standard interaction events: Interacted, Touched, Released, and Grabbed. /// public abstract class InteractableTrackingBehaviour : TrackingBehaviour { /// /// Event triggered when an object is interacted with by the controller. /// [Gesture("XRController"), Action("Interacted")] public TrackingBehaviourEvent OnInteracted = new TrackingBehaviourEvent(); /// /// Event triggered when an object is touched by the controller. /// [Gesture("XRController"), Action("Touched")] public TrackingBehaviourEvent OnTouched = new TrackingBehaviourEvent(); /// /// Event triggered when an object is released by the controller. /// [Gesture("XRController"), Action("Released")] public TrackingBehaviourEvent OnReleased = new TrackingBehaviourEvent(); /// /// Event triggered when an object is grabbed by the controller. /// [Gesture("XRController"), Action("Grabbed")] public TrackingBehaviourEvent OnGrabbed = new TrackingBehaviourEvent(); /// /// Event triggered when an object is pointed at by the controller. /// [Gesture("XRController"), Action("Pointed")] public TrackingBehaviourEvent OnPointed = new TrackingBehaviourEvent(); } }