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 };
|
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
@@ -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
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user