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

54 lines
1.8 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace MBT
{
[AddComponentMenu("")]
[MBTNode(name = "Tasks/Set Object")]
public class SetObject : Leaf
{
[SerializeField]
private Type type = Type.Transform;
public TransformReference sourceTransform;
public GameObjectReference sourceGameObject;
public TransformReference destinationTransform = new TransformReference(VarRefMode.DisableConstant);
public GameObjectReference destinationGameObject = new GameObjectReference(VarRefMode.DisableConstant);
public override NodeResult Execute()
{
if (type == Type.Transform)
{
destinationTransform.Value = sourceTransform.Value;
}
else
{
destinationGameObject.Value = sourceGameObject.Value;
}
return NodeResult.success;
}
public override bool IsValid()
{
// Custom validation to allow nulls in source objects
switch (type)
{
case Type.Transform: return !( sourceTransform == null || IsInvalid(sourceTransform) || destinationTransform.isInvalid);
case Type.GameObject: return !( sourceGameObject == null || IsInvalid(sourceGameObject) || destinationGameObject.isInvalid);
default: return true;
}
}
private static bool IsInvalid(BaseVariableReference variable)
{
// Custom validation to allow null objects without warnings
return (variable.isConstant)? false : variable.blackboard == null || string.IsNullOrEmpty(variable.key);
}
private enum Type
{
Transform, GameObject
}
}
}