feat(ignore): x9o 路径改为忽略本车与任意静态形状的相交查询

接触路径(q9q)仍只忽略立面三角形以防掉地;形状相交查询(x9o)对本车与任意静态形状返回 false,覆盖扫掠/查询式阻挡;新增 skippedOverlap 计数。
This commit is contained in:
TermiNexus committed 2026-10-21 00:42:54 +08:00
1 parent 0e8af39bfe
commit f455fe5c35
3 files changed
+21 -15

No files matched your search

@@ -6720,9 +6720,11 @@
return !!(Local && IsTankShape(Shape) && OwnerOf(Shape) === Local); return !!(Local && IsTankShape(Shape) && OwnerOf(Shape) === Local);
} }
function IsFencePair(ShapeA, ShapeB) { // 「本车 ↔ 任意静态形状」:用于形状相交查询(x9o)这条路径。
return (IsLocalTankShape(ShapeA) && IsFenceLike(ShapeB)) || // 扫掠/查询被挡时返回 false 即可穿过;地面支撑走的是射线(l9m),不经过 x9o。
(IsLocalTankShape(ShapeB) && IsFenceLike(ShapeA)); function IsLocalStaticPair(ShapeA, ShapeB) {
return (IsLocalTankShape(ShapeA) && IsStaticShape(ShapeB)) ||
(IsLocalTankShape(ShapeB) && IsStaticShape(ShapeA));
} }
// ===== 诊断:识别「正在和什么物体重叠」===== // ===== 诊断:识别「正在和什么物体重叠」=====
@@ -6904,9 +6906,9 @@
Proto[MOverlap] = function (ShapeA, ShapeB) { Proto[MOverlap] = function (ShapeA, ShapeB) {
if (Stat.running && Stat.ignoreFence) { if (Stat.running && Stat.ignoreFence) {
try { try {
if (IsFencePair(ShapeA, ShapeB)) { if (IsLocalStaticPair(ShapeA, ShapeB)) {
Stat.skippedOverlap++; Stat.skippedOverlap++;
return false; // 查询结果:不相交 return false; // 查询结果:不相交(穿栅栏走这条路径)
} }
} catch (e) {} } catch (e) {}
} }
+7 -5
View File
@@ -6720,9 +6720,11 @@
return !!(Local && IsTankShape(Shape) && OwnerOf(Shape) === Local); return !!(Local && IsTankShape(Shape) && OwnerOf(Shape) === Local);
} }
function IsFencePair(ShapeA, ShapeB) { // 「本车 ↔ 任意静态形状」:用于形状相交查询(x9o)这条路径。
return (IsLocalTankShape(ShapeA) && IsFenceLike(ShapeB)) || // 扫掠/查询被挡时返回 false 即可穿过;地面支撑走的是射线(l9m),不经过 x9o。
(IsLocalTankShape(ShapeB) && IsFenceLike(ShapeA)); function IsLocalStaticPair(ShapeA, ShapeB) {
return (IsLocalTankShape(ShapeA) && IsStaticShape(ShapeB)) ||
(IsLocalTankShape(ShapeB) && IsStaticShape(ShapeA));
} }
// ===== 诊断:识别「正在和什么物体重叠」===== // ===== 诊断:识别「正在和什么物体重叠」=====
@@ -6904,9 +6906,9 @@
Proto[MOverlap] = function (ShapeA, ShapeB) { Proto[MOverlap] = function (ShapeA, ShapeB) {
if (Stat.running && Stat.ignoreFence) { if (Stat.running && Stat.ignoreFence) {
try { try {
if (IsFencePair(ShapeA, ShapeB)) { if (IsLocalStaticPair(ShapeA, ShapeB)) {
Stat.skippedOverlap++; Stat.skippedOverlap++;
return false; // 查询结果:不相交 return false; // 查询结果:不相交(穿栅栏走这条路径)
} }
} catch (e) {} } catch (e) {}
} }
+7 -5
View File
@@ -195,9 +195,11 @@
return !!(Local && IsTankShape(Shape) && OwnerOf(Shape) === Local); return !!(Local && IsTankShape(Shape) && OwnerOf(Shape) === Local);
} }
function IsFencePair(ShapeA, ShapeB) { // 「本车 ↔ 任意静态形状」:用于形状相交查询(x9o)这条路径。
return (IsLocalTankShape(ShapeA) && IsFenceLike(ShapeB)) || // 扫掠/查询被挡时返回 false 即可穿过;地面支撑走的是射线(l9m),不经过 x9o。
(IsLocalTankShape(ShapeB) && IsFenceLike(ShapeA)); function IsLocalStaticPair(ShapeA, ShapeB) {
return (IsLocalTankShape(ShapeA) && IsStaticShape(ShapeB)) ||
(IsLocalTankShape(ShapeB) && IsStaticShape(ShapeA));
} }
// ===== 诊断:识别「正在和什么物体重叠」===== // ===== 诊断:识别「正在和什么物体重叠」=====
@@ -379,9 +381,9 @@
Proto[MOverlap] = function (ShapeA, ShapeB) { Proto[MOverlap] = function (ShapeA, ShapeB) {
if (Stat.running && Stat.ignoreFence) { if (Stat.running && Stat.ignoreFence) {
try { try {
if (IsFencePair(ShapeA, ShapeB)) { if (IsLocalStaticPair(ShapeA, ShapeB)) {
Stat.skippedOverlap++; Stat.skippedOverlap++;
return false; // 查询结果:不相交 return false; // 查询结果:不相交(穿栅栏走这条路径)
} }
} catch (e) {} } catch (e) {}
} }