fix(lib): 位置探测增加矩阵式兜底([12],[13],[14] 平移分量)

- 旧版位置来自物理组件的世界变换矩阵(K$ 实例,非普通向量),新版字段平移后无法靠名字命中

- 兜底 2:遍历组件找长度 >=15 的矩阵对象,取 [12]/[13]/[14] 作为平移(引擎惯用布局)
This commit is contained in:
TermiNexus committed 2026-10-17 16:29:06 +08:00
1 parent 67b2ff4a80
commit 9506648877
3 files changed
+69 -3

No files matched your search

@@ -276,7 +276,7 @@
return { x: Comp[Key].f20_1, y: Comp[Key].g20_1, z: Comp[Key].h20_1 }; return { x: Comp[Key].f20_1, y: Comp[Key].g20_1, z: Comp[Key].h20_1 };
} }
} }
// 兜底:遍历坦克全部组件,找任意"带 O$ 向量"的组件(位置向量通常会每帧更新,取第一个数值合理的) // 兜底 1:遍历坦克全部组件,找任意"带 O$ 向量"的组件
var Found = null; var Found = null;
try { try {
tank.qz1_1.s2a_1.forEach(function (valueList) { tank.qz1_1.s2a_1.forEach(function (valueList) {
@@ -294,6 +294,28 @@
} }
}); });
} catch (e) {} } catch (e) {}
if (Found) return Found;
// 兜底 2:矩阵式位置 —— 引擎的世界矩阵通常是长度 ≥16 的数组,[12],[13],[14] 是平移分量
try {
tank.qz1_1.s2a_1.forEach(function (valueList) {
if (Found) return;
var comp = (valueList && typeof valueList.g1 === 'function') ? valueList.g1(0) : valueList;
if (!comp) return;
for (var K in comp) {
var M = comp[K];
if (M && typeof M === 'object' && typeof M.length === 'number' && M.length >= 15) {
var X = M[12], Y = M[13], Z = M[14];
if (typeof X === 'number' && typeof Y === 'number' && typeof Z === 'number' &&
Math.abs(X) < 1e6 && Math.abs(Y) < 1e6 && Math.abs(Z) < 1e6 &&
(X !== 0 || Y !== 0 || Z !== 0)) {
Found = { x: X, y: Y, z: Z };
return;
}
}
}
});
} catch (e) {}
return Found; return Found;
} }
+23 -1
View File
@@ -276,7 +276,7 @@
return { x: Comp[Key].f20_1, y: Comp[Key].g20_1, z: Comp[Key].h20_1 }; return { x: Comp[Key].f20_1, y: Comp[Key].g20_1, z: Comp[Key].h20_1 };
} }
} }
// 兜底:遍历坦克全部组件,找任意"带 O$ 向量"的组件(位置向量通常会每帧更新,取第一个数值合理的) // 兜底 1:遍历坦克全部组件,找任意"带 O$ 向量"的组件
var Found = null; var Found = null;
try { try {
tank.qz1_1.s2a_1.forEach(function (valueList) { tank.qz1_1.s2a_1.forEach(function (valueList) {
@@ -294,6 +294,28 @@
} }
}); });
} catch (e) {} } catch (e) {}
if (Found) return Found;
// 兜底 2:矩阵式位置 —— 引擎的世界矩阵通常是长度 ≥16 的数组,[12],[13],[14] 是平移分量
try {
tank.qz1_1.s2a_1.forEach(function (valueList) {
if (Found) return;
var comp = (valueList && typeof valueList.g1 === 'function') ? valueList.g1(0) : valueList;
if (!comp) return;
for (var K in comp) {
var M = comp[K];
if (M && typeof M === 'object' && typeof M.length === 'number' && M.length >= 15) {
var X = M[12], Y = M[13], Z = M[14];
if (typeof X === 'number' && typeof Y === 'number' && typeof Z === 'number' &&
Math.abs(X) < 1e6 && Math.abs(Y) < 1e6 && Math.abs(Z) < 1e6 &&
(X !== 0 || Y !== 0 || Z !== 0)) {
Found = { x: X, y: Y, z: Z };
return;
}
}
}
});
} catch (e) {}
return Found; return Found;
} }
+23 -1
View File
@@ -61,7 +61,7 @@
return { x: Comp[Key].f20_1, y: Comp[Key].g20_1, z: Comp[Key].h20_1 }; return { x: Comp[Key].f20_1, y: Comp[Key].g20_1, z: Comp[Key].h20_1 };
} }
} }
// 兜底:遍历坦克全部组件,找任意"带 O$ 向量"的组件(位置向量通常会每帧更新,取第一个数值合理的) // 兜底 1:遍历坦克全部组件,找任意"带 O$ 向量"的组件
var Found = null; var Found = null;
try { try {
tank.qz1_1.s2a_1.forEach(function (valueList) { tank.qz1_1.s2a_1.forEach(function (valueList) {
@@ -79,6 +79,28 @@
} }
}); });
} catch (e) {} } catch (e) {}
if (Found) return Found;
// 兜底 2:矩阵式位置 —— 引擎的世界矩阵通常是长度 ≥16 的数组,[12],[13],[14] 是平移分量
try {
tank.qz1_1.s2a_1.forEach(function (valueList) {
if (Found) return;
var comp = (valueList && typeof valueList.g1 === 'function') ? valueList.g1(0) : valueList;
if (!comp) return;
for (var K in comp) {
var M = comp[K];
if (M && typeof M === 'object' && typeof M.length === 'number' && M.length >= 15) {
var X = M[12], Y = M[13], Z = M[14];
if (typeof X === 'number' && typeof Y === 'number' && typeof Z === 'number' &&
Math.abs(X) < 1e6 && Math.abs(Y) < 1e6 && Math.abs(Z) < 1e6 &&
(X !== 0 || Y !== 0 || Z !== 0)) {
Found = { x: X, y: Y, z: Z };
return;
}
}
}
});
} catch (e) {}
return Found; return Found;
} }