51 lines
1.6 KiB
C#
51 lines
1.6 KiB
C#
using Opsive.BehaviorDesigner.Runtime.Tasks;
|
|
using Opsive.BehaviorDesigner.Runtime.Tasks.Conditionals;
|
|
using Opsive.GraphDesigner.Runtime.Variables;
|
|
using Opsive.Shared.Utility;
|
|
using UnityEngine;
|
|
|
|
namespace Cielonos.MainGame.Characters.AI
|
|
{
|
|
[Category("Cielonos")]
|
|
[Description("Checks a numeric attribute against specified conditions.")]
|
|
public class CheckAttribute : Conditional
|
|
{
|
|
private AttributeSubmodule attributeSm;
|
|
|
|
public string attributeName;
|
|
public bool isBiggerThan;
|
|
public SharedVariable<float> biggerThanValue;
|
|
public bool isSmallerThan;
|
|
public SharedVariable<float> smallerThanValue;
|
|
public bool isEqual;
|
|
public SharedVariable<float> equalValue;
|
|
private float tolerance = 1e-5f;
|
|
|
|
public override void OnAwake()
|
|
{
|
|
attributeSm = gameObject.GetComponent<Automata>().attributeSm;
|
|
}
|
|
|
|
public override TaskStatus OnUpdate()
|
|
{
|
|
float attributeValue = attributeSm[attributeName];
|
|
|
|
if (isBiggerThan && attributeValue <= biggerThanValue.Value)
|
|
{
|
|
return TaskStatus.Failure;
|
|
}
|
|
|
|
if (isSmallerThan && attributeValue >= smallerThanValue.Value)
|
|
{
|
|
return TaskStatus.Failure;
|
|
}
|
|
|
|
if (isEqual && Mathf.Abs(attributeValue - equalValue.Value) > tolerance)
|
|
{
|
|
return TaskStatus.Failure;
|
|
}
|
|
|
|
return TaskStatus.Success;
|
|
}
|
|
}
|
|
} |