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

Function xcsCalcAnimMatrices

src/SB/Core/x/xCutscene.cpp:358–434  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

356}
357
358static void xcsCalcAnimMatrices(RwMatrixTag* animMat, RpAtomic* model, xCutsceneAnimHdr* ahdr,
359 F32 time, U32 tworoot)
360{
361 xQuat quatresult[65];
362 xVec3 tranresult[65];
363
364 void* afile = &ahdr[1];
365 iAnimEval(afile, time, 0x0, tranresult, quatresult);
366
367 if (iModelNumBones(model) != 0)
368 {
369 xMat4x3Identity((xMat4x3*)animMat);
370 animMat->pos.x = ahdr->Translate[0];
371 animMat->pos.y = ahdr->Translate[1];
372 animMat->pos.z = ahdr->Translate[2];
373
374 if (tworoot)
375 {
376 xMat4x3 m1;
377 xMat4x3 m2;
378
379 quatresult[1].s = -quatresult[1].s;
380 quatresult[2].s = -quatresult[2].s;
381 xQuatToMat(&quatresult[1], &m1);
382 xQuatToMat(&quatresult[2], &m2);
383
384 m1.pos = tranresult[1];
385 m2.pos = tranresult[2];
386
387 xMat4x3Mul(&m1, &m2, &m1);
388
389 tranresult[2].x = 0.0f;
390 tranresult[2].y = 0.0f;
391 tranresult[2].z = 0.0f;
392 quatresult[2].v.x = 0.0f;
393 quatresult[2].v.y = 0.0f;
394 quatresult[2].v.z = 0.0f;
395 quatresult[2].s = 1.0f;
396
397 xQuatFromMat(&quatresult[1], &m1);
398
399 quatresult[1].s = -quatresult[1].s;
400 m1.pos = tranresult[1];
401 }
402
403 U32 numbone = iModelNumBones(model);
404 U32 boneidx = 0;
405 xQuat* qqq = quatresult;
406 xVec3* ttt = tranresult;
407 while (boneidx < numbone && boneidx <= ahdr->RootIndex)
408 {
409 animMat->pos.x += tranresult[boneidx].x;
410 animMat->pos.y += tranresult[boneidx].y;
411 animMat->pos.z += tranresult[boneidx].z;
412
413 tranresult[boneidx].x = 0.0f;
414 tranresult[boneidx].y = 0.0f;
415 tranresult[boneidx].z = 0.0f;

Callers

nothing calls this directly

Calls 7

iAnimEvalFunction · 0.85
iModelNumBonesFunction · 0.85
xMat4x3IdentityFunction · 0.85
xMat4x3MulFunction · 0.85
xQuatToMatFunction · 0.70
xQuatFromMatFunction · 0.70
iModelAnimMatricesFunction · 0.50

Tested by

no test coverage detected