/* * @Author: 白哉 * @Description: * @Date: 2025年06月06日 星期五 19:06:16 * @Modify: */ using System; using System.Collections.Generic; using Logic.AI; using NodeCanvas.Framework; using ParadoxNotion.Design; using RuntimeData; namespace NodeCanvas.Tasks.Actions { [Name("周围友方英雄")] [Category("AI节点")] [Serializable] public class AIParamAroundSelfUnitCount : BaseActionTask { public bool GreaterThan = true; public float Count = 0; private static List _aroundBuf; protected override string desc { get { if (GreaterThan) return string.Format($"周围友方英雄大于等于 {Count}"); return string.Format($"周围友方英雄小于等于 {Count}"); } } protected override void OnExecute() { base.OnExecute(); // 直接从Blackboard获取AICalculatorData var data = blackboard.GetVariable("Data"); if (data?.value?.TargetParam.UnitData == null) { EndAction(false); return; } var selfUnit = data.value.TargetParam.UnitData; var selfGrid = selfUnit.Grid(data.value.TargetParam.MapData); var selfPlayer = selfUnit.Player(data.value.TargetParam.MapData); if (selfGrid != null && selfPlayer != null) { var count = 0; _aroundBuf ??= new List(); _aroundBuf.Clear(); data.value.TargetParam.MapData.GridMap.GetAroundGridData(1, 1, selfGrid, _aroundBuf); foreach (var around in _aroundBuf) { around.VisibleUnit(data.value.TargetParam.MapData,selfPlayer,out var unit); if (unit == null || unit == selfUnit) continue; if (unit.UnitFullType.UnitType != UnitType.Giant) continue; var player = unit?.Player(data.value.TargetParam.MapData); if (player == null || player != selfPlayer) continue; count++; } if (GreaterThan) EndAction(count >= Count); else EndAction(count <= Count); return; } EndAction(false); } } }