2024-06-23 19:12:22 +01:00

103 lines
3.3 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace MBT
{
[AddComponentMenu("")]
[MBTNode(name = "Conditions/Is Set Condition")]
public class IsSetCondition : Condition
{
public Abort abort;
public bool invert = false;
public Type type = Type.Boolean;
public BoolReference boolReference = new BoolReference(VarRefMode.DisableConstant);
public GameObjectReference objectReference = new GameObjectReference(VarRefMode.DisableConstant);
public TransformReference transformReference = new TransformReference(VarRefMode.DisableConstant);
public override bool Check()
{
switch (type)
{
case Type.Boolean:
return (boolReference.Value == true) ^ invert;
case Type.GameObject:
return (objectReference.Value != null) ^ invert;
case Type.Transform:
return (transformReference.Value != null) ^ invert;
}
return invert;
}
public override void OnAllowInterrupt()
{
if (abort != Abort.None)
{
ObtainTreeSnapshot();
switch (type)
{
case Type.Boolean:
boolReference.GetVariable().AddListener(OnVariableChange);
break;
case Type.GameObject:
objectReference.GetVariable().AddListener(OnVariableChange);
break;
case Type.Transform:
transformReference.GetVariable().AddListener(OnVariableChange);
break;
}
}
}
public override void OnDisallowInterrupt()
{
if (abort != Abort.None)
{
switch (type)
{
case Type.Boolean:
boolReference.GetVariable().RemoveListener(OnVariableChange);
break;
case Type.GameObject:
objectReference.GetVariable().RemoveListener(OnVariableChange);
break;
case Type.Transform:
transformReference.GetVariable().RemoveListener(OnVariableChange);
break;
}
}
}
private void OnVariableChange(bool oldValue, bool newValue)
{
EvaluateConditionAndTryAbort(abort);
}
private void OnVariableChange(GameObject oldValue, GameObject newValue)
{
EvaluateConditionAndTryAbort(abort);
}
private void OnVariableChange(Transform oldValue, Transform newValue)
{
EvaluateConditionAndTryAbort(abort);
}
public override bool IsValid()
{
switch (type)
{
case Type.Boolean: return !boolReference.isInvalid;
case Type.GameObject: return !objectReference.isInvalid;
case Type.Transform: return !transformReference.isInvalid;
default: return true;
}
}
public enum Type
{
Boolean, GameObject, Transform
}
}
}