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 biggerThanValue; public bool isSmallerThan; public SharedVariable smallerThanValue; public bool isEqual; public SharedVariable equalValue; private float tolerance = 1e-5f; public override void OnAwake() { attributeSm = gameObject.GetComponent().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; } } }