火力规则:装备匹配规则实现,目标规则实现,阵位规则、航迹规则【初版】

This commit is contained in:
MHW
2026-04-09 10:22:53 +08:00
parent 2fafd931cc
commit 6add28fdfb
11 changed files with 967 additions and 32 deletions

View File

@@ -6,6 +6,7 @@ import java.util.Map;
import static com.solution.rule.utils.RuleFunction.equipmentRule;
import static com.solution.rule.utils.RuleFunction.target;
import static com.solution.rule.utils.RuleFunction.position;
import static com.solution.rule.utils.RuleFunction.trackRoute;
global java.util.Map globalParams;
@@ -147,6 +148,34 @@ function Map buildParam(){
// minInterPlatformDistanceMeters平台最小间距下限用于抑制平台点位过度重叠。
param.put("minInterPlatformDistanceMeters", 80);
// ===================== 航迹规则参数(写入 TrackParam 动态 key + execute.targetList.moveRouteId =====================
// trackRuleEnabled是否启用航迹生成与 moveRouteId 绑定。
param.put("trackRuleEnabled", true);
// trackRouteAlgorithm航迹变形算法。followBlue(默认) / shortestPath / flank / jam
param.put("trackRouteAlgorithm", "followBlue");
// trackRouteNameSuffix航迹名称 = 红方任务 drawName + 此后缀(默认「航迹」→ 如 xxx打击任务航迹
param.put("trackRouteNameSuffix", "航迹");
// trackAirDataTypeCsv蓝方 dataType 命中任一子串(忽略大小写)则 TrackType=routeLineAir
param.put("trackAirDataTypeCsv", "taskPlane,air,plane,flight");
// trackAirKeywordsCsv蓝方 drawName 或红方 name/platformType 命中任一子串则视为飞行航迹
param.put("trackAirKeywordsCsv", "机,飞,空,J-,F-,无人机,直升机");
// trackGroundTrackType非飞行类时 TrackType 取值(可先占位,后续再接地面路网)
param.put("trackGroundTrackType", "routeLineGround");
// 航迹侧向算法复用上方「阵位规则」中的 trackPointDirectionModehead2next / tail2prev缺省回退见 trackFallbackBearingDeg
param.put("trackFallbackBearingDeg", 0);
// enableTrackWarZoneClamp航迹点是否约束在 warZoneLocation 多边形内
param.put("enableTrackWarZoneClamp", true);
// trackExtraNodesMax在蓝方航迹点基础上最多额外插入的点数0=与蓝方点数持平;>0 时在中段均匀插值)
param.put("trackExtraNodesMax", 0);
// shortestPath相邻两点间直线插值分段数>=1越大折线越平滑非真实路网最短路径
param.put("trackShortPathSegments", 3);
// flank侧向偏移距离trackFlankSideModealternate / left / right
param.put("trackFlankOffsetMeters", 800);
param.put("trackFlankSideMode", "alternate");
// jam正弦扰动振幅、沿航迹起伏周期数越大摆动越密
param.put("trackJamWobbleMeters", 400);
param.put("trackJamSegments", 4);
return param;
}
@@ -179,3 +208,13 @@ then
globalParams.putAll(buildParam());
position($fact, globalParams);
end
rule "航迹匹配"
salience 70
when
$fact : DroolsFact(task != null)
then
// 显式航迹规则:填充 TrackParam 下各航迹 id并绑定 execute[0].targetList[*].moveRouteId
globalParams.putAll(buildParam());
trackRoute($fact, globalParams);
end