MCPcopy Create free account
hub / github.com/bfbbdecomp/bfbb / zCameraFlyUpdate

Function zCameraFlyUpdate

src/SB/Game/zCamera.cpp:275–385  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

273}
274
275static 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;

Callers

nothing calls this directly

Calls 7

floorfFunction · 0.85
TranSpeedFunction · 0.85
xVec3LerpFunction · 0.85
MatrixSpeedFunction · 0.70
xQuatFromMatFunction · 0.50
xQuatSlerpFunction · 0.50
xQuatToMatFunction · 0.50

Tested by

no test coverage detected