(data: string)
| 119 | * Format: camera=px,py,pz,tx,ty,tz,qx,qy,qz,qw |
| 120 | */ |
| 121 | export function decodeCameraStateLegacy(data: string): CameraViewState | null { |
| 122 | const values = data.split(',').map(v => parseFiniteNumberString(v)); |
| 123 | if (values.length !== 10 || values.some(value => value === null)) return null; |
| 124 | |
| 125 | const [px, py, pz, tx, ty, tz, qx, qy, qz, qw] = values as [ |
| 126 | number, |
| 127 | number, |
| 128 | number, |
| 129 | number, |
| 130 | number, |
| 131 | number, |
| 132 | number, |
| 133 | number, |
| 134 | number, |
| 135 | number, |
| 136 | ]; |
| 137 | |
| 138 | const quatLength = Math.sqrt(qx * qx + qy * qy + qz * qz + qw * qw); |
| 139 | if (quatLength < 0.9 || quatLength > 1.1) return null; |
| 140 | |
| 141 | return { |
| 142 | position: [px, py, pz], |
| 143 | target: [tx, ty, tz], |
| 144 | quaternion: [qx, qy, qz, qw], |
| 145 | distance: Math.sqrt( |
| 146 | (px - tx) * (px - tx) + |
| 147 | (py - ty) * (py - ty) + |
| 148 | (pz - tz) * (pz - tz) |
| 149 | ), |
| 150 | }; |
| 151 | } |
no test coverage detected