fix(ignore): 只忽略立面三角形,type 1/4 静态代理不再跳过(修复掉地)
实测 byType={16/4:26530,16/1:4620} 表明被跳过的是非三角形地形代理,导致穿地。现判定只对 type=8 三角形生效:最高点高于车体中心 1m 且 |法线z|<0.6;非三角形静态一律保留。
This commit is contained in:
1 parent
580a456032
commit
2ba8df0245
3 files changed
+21
-21
No files matched your search
@@ -6675,10 +6675,6 @@
|
|||||||
|
|
||||||
var FPhysicsPosition = Fld('Physics.Position', 'bzr_1'); // 本地坦克世界位置
|
var FPhysicsPosition = Fld('Physics.Position', 'bzr_1'); // 本地坦克世界位置
|
||||||
|
|
||||||
// 「栅栏类」= 静态几何中「明显高于车体中心」的那部分:
|
|
||||||
// · 三角形:|法线 z| < 0.6(立面)且最高点高于车体中心 1m → 墙/栅栏
|
|
||||||
// · 非三角形(盒/柱等代理):中心高于车体中心 1m → 障碍
|
|
||||||
// · 地面/缓坡(最高点不高于车体中心)→ 一律保留,避免掉出地图
|
|
||||||
function LocalTankZ() {
|
function LocalTankZ() {
|
||||||
var Phys = GetLocalPhysics();
|
var Phys = GetLocalPhysics();
|
||||||
var P = Phys && Phys[FPhysicsPosition];
|
var P = Phys && Phys[FPhysicsPosition];
|
||||||
@@ -6698,16 +6694,20 @@
|
|||||||
return (P && typeof P.h20_1 === 'number') ? P.h20_1 : null;
|
return (P && typeof P.h20_1 === 'number') ? P.h20_1 : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 「栅栏类」= 静态几何中的**立面三角形**:
|
||||||
|
// · 必须是三角形(type 8)—— 非三角形静态体(type 1/4 等)是地面/地形代理,跳过会导致掉出地图
|
||||||
|
// · 最高点高于车体中心 1m(地面/缓坡不满足)
|
||||||
|
// · |法线 z| < 0.6(竖直立面)
|
||||||
function IsFenceLike(Shape) {
|
function IsFenceLike(Shape) {
|
||||||
if (!IsStaticShape(Shape)) return false;
|
if (!IsStaticShape(Shape)) return false;
|
||||||
|
if (!IsTriangle(Shape)) return false;
|
||||||
var TankZ = LocalTankZ();
|
var TankZ = LocalTankZ();
|
||||||
if (TankZ === null) return false;
|
if (TankZ === null) return false;
|
||||||
var MaxZ = ShapeMaxZ(Shape);
|
var MaxZ = ShapeMaxZ(Shape);
|
||||||
if (MaxZ === null) return false;
|
if (MaxZ === null) return false;
|
||||||
if (MaxZ < TankZ + 100) return false; // 不高于车体中心 1m → 地面/缓坡/低矮物
|
if (MaxZ < TankZ + 100) return false;
|
||||||
if (!IsTriangle(Shape)) return true; // 高于车体中心的盒/柱代理 → 障碍
|
|
||||||
var Nz = TriangleNormalZ(Shape);
|
var Nz = TriangleNormalZ(Shape);
|
||||||
return Nz !== null && Math.abs(Nz) < 0.6; // 立面才算墙/栅栏
|
return Nz !== null && Math.abs(Nz) < 0.6;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ===== 诊断:识别「正在和什么物体重叠」=====
|
// ===== 诊断:识别「正在和什么物体重叠」=====
|
||||||
|
|||||||
+7
-7
@@ -6675,10 +6675,6 @@
|
|||||||
|
|
||||||
var FPhysicsPosition = Fld('Physics.Position', 'bzr_1'); // 本地坦克世界位置
|
var FPhysicsPosition = Fld('Physics.Position', 'bzr_1'); // 本地坦克世界位置
|
||||||
|
|
||||||
// 「栅栏类」= 静态几何中「明显高于车体中心」的那部分:
|
|
||||||
// · 三角形:|法线 z| < 0.6(立面)且最高点高于车体中心 1m → 墙/栅栏
|
|
||||||
// · 非三角形(盒/柱等代理):中心高于车体中心 1m → 障碍
|
|
||||||
// · 地面/缓坡(最高点不高于车体中心)→ 一律保留,避免掉出地图
|
|
||||||
function LocalTankZ() {
|
function LocalTankZ() {
|
||||||
var Phys = GetLocalPhysics();
|
var Phys = GetLocalPhysics();
|
||||||
var P = Phys && Phys[FPhysicsPosition];
|
var P = Phys && Phys[FPhysicsPosition];
|
||||||
@@ -6698,16 +6694,20 @@
|
|||||||
return (P && typeof P.h20_1 === 'number') ? P.h20_1 : null;
|
return (P && typeof P.h20_1 === 'number') ? P.h20_1 : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 「栅栏类」= 静态几何中的**立面三角形**:
|
||||||
|
// · 必须是三角形(type 8)—— 非三角形静态体(type 1/4 等)是地面/地形代理,跳过会导致掉出地图
|
||||||
|
// · 最高点高于车体中心 1m(地面/缓坡不满足)
|
||||||
|
// · |法线 z| < 0.6(竖直立面)
|
||||||
function IsFenceLike(Shape) {
|
function IsFenceLike(Shape) {
|
||||||
if (!IsStaticShape(Shape)) return false;
|
if (!IsStaticShape(Shape)) return false;
|
||||||
|
if (!IsTriangle(Shape)) return false;
|
||||||
var TankZ = LocalTankZ();
|
var TankZ = LocalTankZ();
|
||||||
if (TankZ === null) return false;
|
if (TankZ === null) return false;
|
||||||
var MaxZ = ShapeMaxZ(Shape);
|
var MaxZ = ShapeMaxZ(Shape);
|
||||||
if (MaxZ === null) return false;
|
if (MaxZ === null) return false;
|
||||||
if (MaxZ < TankZ + 100) return false; // 不高于车体中心 1m → 地面/缓坡/低矮物
|
if (MaxZ < TankZ + 100) return false;
|
||||||
if (!IsTriangle(Shape)) return true; // 高于车体中心的盒/柱代理 → 障碍
|
|
||||||
var Nz = TriangleNormalZ(Shape);
|
var Nz = TriangleNormalZ(Shape);
|
||||||
return Nz !== null && Math.abs(Nz) < 0.6; // 立面才算墙/栅栏
|
return Nz !== null && Math.abs(Nz) < 0.6;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ===== 诊断:识别「正在和什么物体重叠」=====
|
// ===== 诊断:识别「正在和什么物体重叠」=====
|
||||||
|
|||||||
@@ -151,10 +151,6 @@
|
|||||||
|
|
||||||
var FPhysicsPosition = Fld('Physics.Position', 'bzr_1'); // 本地坦克世界位置
|
var FPhysicsPosition = Fld('Physics.Position', 'bzr_1'); // 本地坦克世界位置
|
||||||
|
|
||||||
// 「栅栏类」= 静态几何中「明显高于车体中心」的那部分:
|
|
||||||
// · 三角形:|法线 z| < 0.6(立面)且最高点高于车体中心 1m → 墙/栅栏
|
|
||||||
// · 非三角形(盒/柱等代理):中心高于车体中心 1m → 障碍
|
|
||||||
// · 地面/缓坡(最高点不高于车体中心)→ 一律保留,避免掉出地图
|
|
||||||
function LocalTankZ() {
|
function LocalTankZ() {
|
||||||
var Phys = GetLocalPhysics();
|
var Phys = GetLocalPhysics();
|
||||||
var P = Phys && Phys[FPhysicsPosition];
|
var P = Phys && Phys[FPhysicsPosition];
|
||||||
@@ -174,16 +170,20 @@
|
|||||||
return (P && typeof P.h20_1 === 'number') ? P.h20_1 : null;
|
return (P && typeof P.h20_1 === 'number') ? P.h20_1 : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 「栅栏类」= 静态几何中的**立面三角形**:
|
||||||
|
// · 必须是三角形(type 8)—— 非三角形静态体(type 1/4 等)是地面/地形代理,跳过会导致掉出地图
|
||||||
|
// · 最高点高于车体中心 1m(地面/缓坡不满足)
|
||||||
|
// · |法线 z| < 0.6(竖直立面)
|
||||||
function IsFenceLike(Shape) {
|
function IsFenceLike(Shape) {
|
||||||
if (!IsStaticShape(Shape)) return false;
|
if (!IsStaticShape(Shape)) return false;
|
||||||
|
if (!IsTriangle(Shape)) return false;
|
||||||
var TankZ = LocalTankZ();
|
var TankZ = LocalTankZ();
|
||||||
if (TankZ === null) return false;
|
if (TankZ === null) return false;
|
||||||
var MaxZ = ShapeMaxZ(Shape);
|
var MaxZ = ShapeMaxZ(Shape);
|
||||||
if (MaxZ === null) return false;
|
if (MaxZ === null) return false;
|
||||||
if (MaxZ < TankZ + 100) return false; // 不高于车体中心 1m → 地面/缓坡/低矮物
|
if (MaxZ < TankZ + 100) return false;
|
||||||
if (!IsTriangle(Shape)) return true; // 高于车体中心的盒/柱代理 → 障碍
|
|
||||||
var Nz = TriangleNormalZ(Shape);
|
var Nz = TriangleNormalZ(Shape);
|
||||||
return Nz !== null && Math.abs(Nz) < 0.6; // 立面才算墙/栅栏
|
return Nz !== null && Math.abs(Nz) < 0.6;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ===== 诊断:识别「正在和什么物体重叠」=====
|
// ===== 诊断:识别「正在和什么物体重叠」=====
|
||||||
|
|||||||
Reference in new issue
Block a user