/* * @Author: 白哉 * @Description: * @Date: 2025年06月06日 星期五 19:06:16 * @Modify: */ using System; using Logic.Action; using Logic.AI; using NodeCanvas.Framework; using ParadoxNotion.Design; using RuntimeData; namespace NodeCanvas.Tasks.Actions { [Name("判断移动距离")] [Category("AI节点")] [Serializable] public class AIParamTargetGridDistance : BaseActionTask { public int Distance; public bool GreaterThan = true; protected override string desc { get { if (GreaterThan) return $"移动距离大于等于 {Distance}"; return $"移动距离小于等于 {Distance}"; } } protected override void OnExecute() { base.OnExecute(); // 直接从Blackboard获取AICalculatorData var data = blackboard.GetVariable("Data"); if (data?.value?.TargetParam.UnitData == null) { EndAction(false); return; } for (int i = data.value.AIActions.Count - 1; i >= 0; i--) { var map = data.value.AIActions[i].Param.MapData; var unit = data.value.AIActions[i].Param.UnitData; var grid = data.value.AIActions[i].Param.GridData; var selfGrid = unit.Grid(map); if (grid != null && selfGrid != null) { var dis = map.GridMap.CalcDistance(grid, selfGrid); if (GreaterThan && dis >= Distance) continue; if (!GreaterThan && dis <= Distance) continue; } data.value.AIActions.RemoveAt(i); } EndAction(data.value.AIActions.Count > 0); } } }