//============= Copyright (c) Ludic GmbH, All rights reserved. ============== // // Purpose: Part of the My Behaviour Tree Controller Code // //============================================================================= using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; using MyBT; using UnityEngine.XR.Interaction.Toolkit; #if UNITY_EDITOR using UnityEditor; [CustomEditor(typeof(NamedGrabEvent))] public class NamedGrabEventInspector : ComponentHandlerInspector { } #endif public class NamedGrabEvent : ComponentHandler { public override string TypeLabel () { return "NamedGrabEvent"; } public override string ContentLabel() { UpdateComponent(); return objName; } public override void UpdateComponent() { base.UpdateComponent(); if (GetComponent()) { GetComponent().selectEntered.AddListener(SelectEnterEventHandler); GetComponent().selectExited.AddListener(SelectExitEventHandler); } else { Debug.LogWarning($"NamedGrabEvent '{gameObject.name}' could not attach grab event (missing XR Grab Interactable?)"); } } public string objName = "GrabObjXY"; private bool selectEnterTriggered = false; private bool selectExitTriggered = false; private void SelectEnterEventHandler(SelectEnterEventArgs args) { selectEnterTriggered = true; } private void SelectExitEventHandler(SelectExitEventArgs args) { selectExitTriggered = true; } public override string titleText { get { return "Run: Will Succeed on Select Enter and Exit Event"; } } public override string[][] helpText { get { return new string[][] { new string[] {"Run", "Return Success on Select Enter and Exit Event", $"BTC.Run(\"{roomId}\", \"{gameObject.name}\")"}, }; } } public override void Run(MyBT.NodeState nodeState) { if (nodeState == NodeState.FirstRun) { // reset event trigger at start selectEnterTriggered = false; selectExitTriggered = false; } if (nodeState == NodeState.Aborting) { selectEnterTriggered = false; selectExitTriggered = false; } if (selectEnterTriggered) { Task.SetSucceeded(); return; } if (selectExitTriggered) { Task.SetSucceeded(); return; } } }