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

Function PipeForAllSceneModels

src/SB/Game/zScene.cpp:718–780  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

716}
717
718static void PipeForAllSceneModels(void (*pipeCB)(RpAtomic* data, U32 pipeFlags, U32 subObjects))
719{
720 // non-matching: wrong registers
721
722 S32 i, j, k;
723 S32 numModels = xSTAssetCountByType('MODL');
724
725 for (i = 0; i < numModels; i++)
726 {
727 RpAtomic* model = (RpAtomic*)xSTFindAssetByType('MODL', i, NULL);
728
729 if (model)
730 {
731 st_PKR_ASSET_TOCINFO ainfo;
732 U32 numSubObjects, remainSubObjBits, currSubObjBits;
733 RpAtomic* tempmodel;
734
735 xSTGetAssetInfoByType('MODL', i, &ainfo);
736
737 numSubObjects = 0;
738 tempmodel = model;
739
740 do
741 {
742 numSubObjects++;
743 tempmodel = iModelFile_RWMultiAtomic(tempmodel);
744 } while (tempmodel);
745
746 remainSubObjBits = (1 << numSubObjects) - 1;
747
748 for (j = 0; j < xModelPipeNumTables; j++)
749 {
750 for (k = 0; k < xModelPipeCount[j]; k++)
751 {
752 if (ainfo.aid == xModelPipeData[j][k].ModelHashID)
753 {
754 currSubObjBits = remainSubObjBits & xModelPipeData[j][k].SubObjectBits;
755
756 if (currSubObjBits)
757 {
758 pipeCB(model, xModelPipeData[j][k].PipeFlags, currSubObjBits);
759 }
760
761 remainSubObjBits &= ~currSubObjBits;
762
763 if (!remainSubObjBits)
764 {
765 goto loc_800B1698;
766 }
767 }
768 }
769 }
770
771 if (remainSubObjBits)
772 {
773 pipeCB(model, 0, remainSubObjBits);
774 }
775 }

Callers 1

zSceneInitFunction · 0.70

Calls 4

xSTAssetCountByTypeFunction · 0.50
xSTFindAssetByTypeFunction · 0.50
xSTGetAssetInfoByTypeFunction · 0.50
iModelFile_RWMultiAtomicFunction · 0.50

Tested by

no test coverage detected