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