| 1315 | } |
| 1316 | |
| 1317 | void xCameraLookYPR(xCamera* cam, U32 flags, F32 yaw, F32 pitch, F32 roll, F32 tm, F32 tm_acc, |
| 1318 | F32 tm_dec) |
| 1319 | { |
| 1320 | cam->flags = (cam->flags & ~0xF80) | (flags & 0xF80) | 0x80; |
| 1321 | cam->yaw_goal = yaw; |
| 1322 | cam->pitch_goal = pitch; |
| 1323 | cam->roll_goal = roll; |
| 1324 | |
| 1325 | if (tm <= 0.0f) |
| 1326 | { |
| 1327 | if (cam->tgt_mat) |
| 1328 | { |
| 1329 | cam->yaw_cur = yaw; |
| 1330 | cam->pitch_cur = pitch; |
| 1331 | cam->roll_cur = roll; |
| 1332 | |
| 1333 | xMat3x3Euler(&cam->mat, yaw, pitch, roll); |
| 1334 | |
| 1335 | *(xMat3x3*)&cam->omat = *(xMat3x3*)&cam->mat; |
| 1336 | } |
| 1337 | } |
| 1338 | else |
| 1339 | { |
| 1340 | cam->flags |= 0x40; |
| 1341 | cam->ltm_acc = tm - tm_acc; |
| 1342 | cam->ltm_dec = tm_dec; |
| 1343 | cam->ltmr = tm; |
| 1344 | |
| 1345 | F32 s = 1.0f / (tm - 0.5f * (tm_acc - tm_dec)); |
| 1346 | |
| 1347 | cam->yaw_epv = s * xDangleClamp(yaw - cam->yaw_cur); |
| 1348 | cam->pitch_epv = s * xDangleClamp(pitch - cam->pitch_cur); |
| 1349 | cam->roll_epv = s * xDangleClamp(roll - cam->roll_cur); |
| 1350 | } |
| 1351 | } |
| 1352 | |
| 1353 | void xCameraRotate(xCamera* cam, const xMat3x3& m, F32 time, F32 accel, F32 decl) |
| 1354 | { |
no test coverage detected