| 273 | } |
| 274 | |
| 275 | static S32 zCameraFlyUpdate(xCamera* cam, F32 dt) |
| 276 | { |
| 277 | S32 i; |
| 278 | S32 flyIdx; |
| 279 | S32 numKeys; |
| 280 | S32 flySize; |
| 281 | F32 flyLerp; |
| 282 | F32 flyFrame; |
| 283 | zFlyKey keys[4]; |
| 284 | F32 matdiff1; |
| 285 | F32 matdiff2; |
| 286 | F32 matdiff3; |
| 287 | xMat3x3 tmpMat; |
| 288 | xQuat quats[2]; |
| 289 | xQuat qresult; |
| 290 | |
| 291 | if ((globals.pad0->pressed & 0x50000) && zcam_flytime > gSkipTimeFlythrough) |
| 292 | { |
| 293 | zcam_flytime = 0.033333335f * zcam_flysize; |
| 294 | } |
| 295 | |
| 296 | flyFrame = 30.0f * zcam_flytime; |
| 297 | numKeys = std::floorf(flyFrame); |
| 298 | flyLerp = flyFrame - std::floorf(flyFrame); |
| 299 | |
| 300 | flySize = (S32)(zcam_flysize >> 6) - 1; |
| 301 | if (!(numKeys < flySize)) |
| 302 | { |
| 303 | return 0; |
| 304 | } |
| 305 | |
| 306 | flyIdx = numKeys; |
| 307 | if (numKeys - 1 >= 0) |
| 308 | { |
| 309 | flyIdx = numKeys - 1; |
| 310 | } |
| 311 | |
| 312 | keys[0] = *((zFlyKey*)zcam_flydata + flyIdx); |
| 313 | keys[1] = *((zFlyKey*)zcam_flydata + numKeys); |
| 314 | keys[2] = *((zFlyKey*)zcam_flydata + (numKeys + 1)); |
| 315 | |
| 316 | flyIdx = numKeys + 1; |
| 317 | if (numKeys + 2 < flySize) |
| 318 | { |
| 319 | flyIdx = numKeys + 2; |
| 320 | } |
| 321 | |
| 322 | keys[3] = *((zFlyKey*)zcam_flydata + flyIdx); |
| 323 | |
| 324 | // Reverses the byte order (endianness) of 64 4-byte blocks |
| 325 | U8* framePtr = (U8*)&keys[0].frame; |
| 326 | for (i = 64; i > 0; i--) |
| 327 | { |
| 328 | S8 tmp1 = *framePtr; |
| 329 | S8 tmp2 = *(framePtr + 1); |
| 330 | *framePtr = *(framePtr + 3); |
| 331 | *(framePtr + 1) = *(framePtr + 2); |
| 332 | *(framePtr + 2) = tmp2; |
nothing calls this directly
no test coverage detected