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("检查一个属性是否满足条件")] public class CheckAttribute : AutomataConditionalBase { 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() { base.OnAwake(); attributeSm = self.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; } } }