|
|
- // Panel Menu Item|Prefabs|0140
- namespace VRTK
- {
- using UnityEngine;
-
- /// <summary>
- /// Event Payload
- /// </summary>
- /// <param name="interactableObject">The GameObject for the interactable object the PanelMenu is attached to.</param>
- public struct PanelMenuItemControllerEventArgs
- {
- public GameObject interactableObject;
- }
-
- /// <summary>
- /// Event Payload
- /// </summary>
- /// <param name="sender">this object</param>
- /// <param name="e"><see cref="PanelMenuItemControllerEventArgs"/></param>
- public delegate void PanelMenuItemControllerEventHandler(object sender, PanelMenuItemControllerEventArgs e);
-
- /// <summary>
- /// Intercepts the controller events sent from a `VRTK_PanelMenuController` and passes them onto additional custom event subscriber scripts, which then carry out the required custom UI actions.
- /// </summary>
- /// <remarks>
- /// > This script is not directly part of a prefab but is a helper associated to the `PanelMenu` prefab.
- ///
- /// * Place the `VRTK/Prefabs/PanelMenu/VRTK_PanelMenuItemController` script on the child GameObject of any Panel Item Container which is contained within the `PanelMenuController` prefab within the scene.
- /// * Pick up the VRTK_InteractableObject show/hide the panel menu by pressing the touchpad top/bottom/left/right you can open/close the child UI panel that has been assigned via the Unity Editor panel.
- /// </remarks>
- /// <example>
- /// `040_Controls_Panel_Menu` contains three basic interactive object examples of the PanelMenu in use.
- /// </example>
- public class VRTK_PanelMenuItemController : MonoBehaviour
- {
- /// <summary>
- /// Emitted when the panel menu item is showing.
- /// </summary>
- public event PanelMenuItemControllerEventHandler PanelMenuItemShowing;
- /// <summary>
- /// Emitted when the panel menu item is hiding.
- /// </summary>
- public event PanelMenuItemControllerEventHandler PanelMenuItemHiding;
- /// <summary>
- /// Emitted when the panel menu item is open and the user swipes left on the controller touchpad.
- /// </summary>
- public event PanelMenuItemControllerEventHandler PanelMenuItemSwipeLeft;
- /// <summary>
- /// Emitted when the panel menu item is open and the user swipes right on the controller touchpad.
- /// </summary>
- public event PanelMenuItemControllerEventHandler PanelMenuItemSwipeRight;
- /// <summary>
- /// Emitted when the panel menu item is open and the user swipes top on the controller touchpad.
- /// </summary>
- public event PanelMenuItemControllerEventHandler PanelMenuItemSwipeTop;
- /// <summary>
- /// Emitted when the panel menu item is open and the user swipes bottom on the controller touchpad.
- /// </summary>
- public event PanelMenuItemControllerEventHandler PanelMenuItemSwipeBottom;
- /// <summary>
- /// Emitted when the panel menu item is open and the user presses the trigger of the controller holding the interactable object.
- /// </summary>
- public event PanelMenuItemControllerEventHandler PanelMenuItemTriggerPressed;
-
- public virtual void OnPanelMenuItemShowing(PanelMenuItemControllerEventArgs e)
- {
- if (PanelMenuItemShowing != null)
- {
- PanelMenuItemShowing(this, e);
- }
- }
-
- public virtual void OnPanelMenuItemHiding(PanelMenuItemControllerEventArgs e)
- {
- if (PanelMenuItemHiding != null)
- {
- PanelMenuItemHiding(this, e);
- }
- }
-
- public virtual void OnPanelMenuItemSwipeLeft(PanelMenuItemControllerEventArgs e)
- {
- if (PanelMenuItemSwipeLeft != null)
- {
- PanelMenuItemSwipeLeft(this, e);
- }
- }
-
- public virtual void OnPanelMenuItemSwipeRight(PanelMenuItemControllerEventArgs e)
- {
- if (PanelMenuItemSwipeRight != null)
- {
- PanelMenuItemSwipeRight(this, e);
- }
- }
-
- public virtual void OnPanelMenuItemSwipeTop(PanelMenuItemControllerEventArgs e)
- {
- if (PanelMenuItemSwipeTop != null)
- {
- PanelMenuItemSwipeTop(this, e);
- }
- }
-
- public virtual void OnPanelMenuItemSwipeBottom(PanelMenuItemControllerEventArgs e)
- {
- if (PanelMenuItemSwipeBottom != null)
- {
- PanelMenuItemSwipeBottom(this, e);
- }
- }
-
- /// <summary>
- /// The SetPanelMenuItemEvent is used to build up the event payload.
- /// </summary>
- /// <param name="interactableObject">The object the menu is attached to.</param>
- /// <returns>The payload for the event.</returns>
- public virtual PanelMenuItemControllerEventArgs SetPanelMenuItemEvent(GameObject interactableObject)
- {
- PanelMenuItemControllerEventArgs e;
- e.interactableObject = interactableObject;
- return e;
- }
-
- /// <summary>
- /// The Show method is used to show the menu.
- /// </summary>
- /// <param name="interactableObject">The object the menu is attached to.</param>
- public virtual void Show(GameObject interactableObject)
- {
- gameObject.SetActive(true);
- OnPanelMenuItemShowing(SetPanelMenuItemEvent(interactableObject));
- }
-
- /// <summary>
- /// The Hide method is used to show the menu.
- /// </summary>
- /// <param name="interactableObject">The object the menu is attached to.</param>
- public virtual void Hide(GameObject interactableObject)
- {
- gameObject.SetActive(false);
- OnPanelMenuItemHiding(SetPanelMenuItemEvent(interactableObject));
- }
-
- /// <summary>
- /// The SwipeLeft method is used when the control is swiped left.
- /// </summary>
- /// <param name="interactableObject">The object the menu is attached to.</param>
- public virtual void SwipeLeft(GameObject interactableObject)
- {
- OnPanelMenuItemSwipeLeft(SetPanelMenuItemEvent(interactableObject));
- }
-
- /// <summary>
- /// The SwipeRight method is used when the control is swiped right.
- /// </summary>
- /// <param name="interactableObject">The object the menu is attached to.</param>
- public virtual void SwipeRight(GameObject interactableObject)
- {
- OnPanelMenuItemSwipeRight(SetPanelMenuItemEvent(interactableObject));
- }
-
- /// <summary>
- /// The SwipeTop method is used when the control is swiped up.
- /// </summary>
- /// <param name="interactableObject">The object the menu is attached to.</param>
- public virtual void SwipeTop(GameObject interactableObject)
- {
- OnPanelMenuItemSwipeTop(SetPanelMenuItemEvent(interactableObject));
- }
-
- /// <summary>
- /// The SwipeBottom method is used when the control is swiped down.
- /// </summary>
- /// <param name="interactableObject">The object the menu is attached to.</param>
- public virtual void SwipeBottom(GameObject interactableObject)
- {
- OnPanelMenuItemSwipeBottom(SetPanelMenuItemEvent(interactableObject));
- }
-
- /// <summary>
- /// The TriggerPressed method is used when the control action button is pressed.
- /// </summary>
- /// <param name="interactableObject">The object the menu is attached to.</param>
- public virtual void TriggerPressed(GameObject interactableObject)
- {
- OnPanelMenuItemTriggerPressed(SetPanelMenuItemEvent(interactableObject));
- }
-
- protected virtual void OnPanelMenuItemTriggerPressed(PanelMenuItemControllerEventArgs e)
- {
- if (PanelMenuItemTriggerPressed != null)
- {
- PanelMenuItemTriggerPressed(this, e);
- }
- }
- }
- }
|