/* * @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 { [Category("AIAction")] [Serializable] public class AIParamAroundNoUnitCity : BaseActionTask { public int Offset; protected override string desc { get { return string.Format($"周围 {Offset} 格内存在无人驻守的我方城市"); } } protected override void OnExecute() { base.OnExecute(); // 直接从Blackboard获取AICalculatorData var data = blackboard.GetVariable("Data"); if (data?.value?.TargetParam.UnitData == null) { EndAction(false); return; } var param = data.value.TargetParam; var unit = data.value.TargetParam.UnitData; if (!param.MapData.GetGridDataByUnitId(unit.Id, out var unitGrid)) { EndAction(false); return; } var selfCity = new HashSet(); param.MapData.GetCityDataListByPlayerId(param.PlayerData.Id, selfCity); var aroundGrid = param.MapData.GridMap.GetAroundGridData(Offset, Offset, unitGrid); foreach (var grid in aroundGrid) { if (!param.MapData.GetCityDataByGid(grid.Id, out var city)) continue; if (param.MapData.GetUnitDataByGid(grid.Id, out var cityUnit)) continue; if (!selfCity.Contains(city)) continue; data.value.TargetParam.TargetGridData = grid; data.value.TargetParam.OnParamChanged(); EndAction(true); return; } EndAction(false); } } }