fix(lib): 位置探测增加矩阵式兜底([12],[13],[14] 平移分量)
- 旧版位置来自物理组件的世界变换矩阵(K$ 实例,非普通向量),新版字段平移后无法靠名字命中 - 兜底 2:遍历组件找长度 >=15 的矩阵对象,取 [12]/[13]/[14] 作为平移(引擎惯用布局)
This commit is contained in:
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 };
|
||||
}
|
||||
}
|
||||
// 兜底:遍历坦克全部组件,找任意"带 O$ 向量"的组件(位置向量通常会每帧更新,取第一个数值合理的)
|
||||
// 兜底 1:遍历坦克全部组件,找任意"带 O$ 向量"的组件
|
||||
var Found = null;
|
||||
try {
|
||||
tank.qz1_1.s2a_1.forEach(function (valueList) {
|
||||
@@ -294,6 +294,28 @@
|
||||
}
|
||||
});
|
||||
} 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;
|
||||
}
|
||||
|
||||
|
||||
+23
-1
@@ -276,7 +276,7 @@
|
||||
return { x: Comp[Key].f20_1, y: Comp[Key].g20_1, z: Comp[Key].h20_1 };
|
||||
}
|
||||
}
|
||||
// 兜底:遍历坦克全部组件,找任意"带 O$ 向量"的组件(位置向量通常会每帧更新,取第一个数值合理的)
|
||||
// 兜底 1:遍历坦克全部组件,找任意"带 O$ 向量"的组件
|
||||
var Found = null;
|
||||
try {
|
||||
tank.qz1_1.s2a_1.forEach(function (valueList) {
|
||||
@@ -294,6 +294,28 @@
|
||||
}
|
||||
});
|
||||
} 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;
|
||||
}
|
||||
|
||||
|
||||
+23
-1
@@ -61,7 +61,7 @@
|
||||
return { x: Comp[Key].f20_1, y: Comp[Key].g20_1, z: Comp[Key].h20_1 };
|
||||
}
|
||||
}
|
||||
// 兜底:遍历坦克全部组件,找任意"带 O$ 向量"的组件(位置向量通常会每帧更新,取第一个数值合理的)
|
||||
// 兜底 1:遍历坦克全部组件,找任意"带 O$ 向量"的组件
|
||||
var Found = null;
|
||||
try {
|
||||
tank.qz1_1.s2a_1.forEach(function (valueList) {
|
||||
@@ -79,6 +79,28 @@
|
||||
}
|
||||
});
|
||||
} 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;
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user