UP-Viagg-io/Viagg-io/Assets/Packages/MyBT/BTC/Handlers/NamedCollider.cs

138 lines
3.5 KiB
C#

//============= 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<Collider>();
}
public Collider colliderComponent;
public string objName = "ColliderXY";
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}\")"},
new string[] {"Run", "Return Success on Trigger Event", $"BTC.Run(\"{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();
}
}
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();
}
}
public override void Run(NodeState nodeState)
{
switch (nodeState)
{
case NodeState.FirstRun:
_collidedWithObj = false;
break;
case NodeState.Running:
if (_collidedWithObj)
{
Task.SetSucceeded();
_otherColliderTag = "";
}
break;
case NodeState.Aborting:
_collidedWithObj = false;
_otherColliderTag = "";
break;
}
}
public override void Set(NodeState nodeState, string key, string value)
{
if (nodeState == NodeState.FirstRun)
{
if (key == "otherTag")
{
_otherColliderTag = value;
Task.SetSucceeded();
return;
}
}
Task.SetFailed();
}
private void OnTriggerEnter(Collider other)
{
if (_otherColliderTag != "")
{
if(other.gameObject.CompareTag(_otherColliderTag))
{
_collidedWithObj = true;
}
}
else
{
_collidedWithObj = true;
}
}
}