//============= 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.UI; using MyBT; #if UNITY_EDITOR using UnityEditor; [CustomEditor(typeof(NamedCollider))] public class NamedColliderInspector : ComponentHandlerInspector { } #endif [System.Serializable] public class NamedCollider : ComponentHandler { public override string TypeLabel () { return "Collider"; } public override string ContentLabel() { UpdateComponent(); return objName; } public override void UpdateComponent() { base.UpdateComponent(); colliderComponent = GetComponent(); rigidbodyComponent = GetComponent(); } public Collider colliderComponent; public string objName = "ColliderXY"; public Rigidbody rigidbodyComponent; private bool _collidedWithObj = false; private string _otherColliderTag = ""; public override string titleText { get { return "Show/Hide: Enable/Disable Collider"; } } public override string[][] helpText { get { return new string[][] { new string[] {"Show", null, $"BTC.Show(\"{roomId}\", \"{gameObject.name}\")"}, new string[] {"Hide", null, $"BTC.Hide(\"{roomId}\", \"{gameObject.name}\")"} }; } } public override void Show (MyBT.NodeState nodeState) { // whan aborting if (nodeState == NodeState.Aborting) { return; } // at start if (nodeState == NodeState.FirstRun) { // reset event trigger colliderComponent.enabled = true; Task.SetSucceeded(); } // during runtime if (nodeState == NodeState.Running) { } } public override void Hide (MyBT.NodeState nodeState) { // whan aborting if (nodeState == NodeState.Aborting) { return; } // at start if (nodeState == NodeState.FirstRun) { // reset event trigger colliderComponent.enabled = false; Task.SetSucceeded(); } // during runtime if (nodeState == NodeState.Running) { } } public override void Run(NodeState nodeState) { switch (nodeState) { case NodeState.FirstRun: _collidedWithObj = false; /* colliderComponent.isTrigger = true; if (rigidbodyComponent != null) { rigidbodyComponent.isKinematic = true; }*/ break; case NodeState.Running: if (_collidedWithObj) { _otherColliderTag = ""; Task.SetSucceeded(); } break; case NodeState.Aborting: //colliderComponent.isTrigger = false; _collidedWithObj = false; _otherColliderTag = ""; /* if (rigidbodyComponent != null) { rigidbodyComponent.isKinematic = false; }*/ break; } } public override void Set(NodeState nodeState, string key, string value) { if (nodeState == NodeState.FirstRun) { if (key == "tag") { _otherColliderTag = value; Task.SetSucceeded(); return; } } Task.SetFailed(); } private void OnTriggerEnter(Collider other) { if (_otherColliderTag != "") { if(other.gameObject.CompareTag(_otherColliderTag)) { _collidedWithObj = true; } } else { _collidedWithObj = true; } } private void OnCollisionEnter(Collision collision) { if (_otherColliderTag != "") { if (collision.gameObject.CompareTag(_otherColliderTag)) { _collidedWithObj = true; } } else { _collidedWithObj = true; } } }