// // Generated By: dol2asm // Translation Unit: JPAEmitterManager // #include "JSystem/JParticle/JPAEmitterManager.h" #include "JSystem/JKernel/JKRHeap.h" #include "JSystem/JParticle/JPAParticle.h" #include "JSystem/JParticle/JPAResourceManager.h" #include "dol2asm.h" #include "dolphin/types.h" // // Types: // // // Forward References: // extern "C" void __ct__17JPAEmitterManagerFUlUlP7JKRHeapUcUc(); extern "C" void func_8027DEBC(); extern "C" void calc__17JPAEmitterManagerFUc(); extern "C" void draw__17JPAEmitterManagerFPC11JPADrawInfoUc(); extern "C" void forceDeleteAllEmitter__17JPAEmitterManagerFv(); extern "C" void forceDeleteGroupEmitter__17JPAEmitterManagerFUc(); extern "C" void forceDeleteEmitter__17JPAEmitterManagerFP14JPABaseEmitter(); extern "C" void entryResourceManager__17JPAEmitterManagerFP18JPAResourceManagerUc(); extern "C" void clearResourceManager__17JPAEmitterManagerFUc(); extern "C" void calcYBBCam__17JPAEmitterManagerFv(); extern "C" void func_8027E51C(void* _this); extern "C" void func_8027E54C(void* _this); extern "C" void func_8027E588(void* _this); extern "C" void func_8027E598(void* _this); extern "C" void __dt__14JPABaseEmitterFv(); extern "C" void __ct__14JPABaseEmitterFv(); // // External References: // extern "C" void getResource__18JPAResourceManagerCFUs(); extern "C" void calc__11JPAResourceFP18JPAEmitterWorkDataP14JPABaseEmitter(); extern "C" void draw__11JPAResourceFP18JPAEmitterWorkDataP14JPABaseEmitter(); extern "C" void init__14JPABaseEmitterFP17JPAEmitterManagerP11JPAResource(); extern "C" void deleteAllParticle__14JPABaseEmitterFv(); extern "C" void* __nw__FUlP7JKRHeapi(); extern "C" void* __nwa__FUlP7JKRHeapi(); extern "C" void __dl__FPv(); extern "C" void __ct__10JSUPtrLinkFPv(); extern "C" void __dt__10JSUPtrLinkFv(); extern "C" void __dt__10JSUPtrListFv(); extern "C" void initiate__10JSUPtrListFv(); extern "C" void append__10JSUPtrListFP10JSUPtrLink(); extern "C" void prepend__10JSUPtrListFP10JSUPtrLink(); extern "C" void remove__10JSUPtrListFP10JSUPtrLink(); extern "C" void __construct_new_array(); extern "C" void _savegpr_24(); extern "C" void _savegpr_26(); extern "C" void _savegpr_27(); extern "C" void _savegpr_29(); extern "C" void _restgpr_24(); extern "C" void _restgpr_26(); extern "C" void _restgpr_27(); extern "C" void _restgpr_29(); extern "C" extern u32 __float_epsilon; // // Declarations: // /* 8027DCA0-8027DEBC 2785E0 021C+00 0/0 1/1 0/0 .text __ct__17JPAEmitterManagerFUlUlP7JKRHeapUcUc */ #ifdef NONMATCHING JPAEmitterManager::JPAEmitterManager(u32 ptclMax, u32 emtrMax, JKRHeap* pHeap, u8 grpMax, u8 resMax) { mEmtrMax = emtrMax; mPtclMax = ptclMax; mGrpMax = grpMax; mResMax = resMax; JPABaseEmitter* emtr = new (pHeap, 0) JPABaseEmitter[mEmtrMax]; for (u32 i = 0; i < mEmtrMax; i++) mFreeEmtrList.prepend(&emtr[i].mLink); JPANode* ptcl = new (pHeap, 0) JPANode[mPtclMax]; for (u32 i = 0; i < mPtclMax; i++) mPtclPool.push_back(&ptcl[i]); // can't get __construct_new_array to call the correct constructor within. mpGrpEmtr = new (pHeap, 0) JSUList[mGrpMax]; mpResMgrAry = new (pHeap, 0) JPAResourceManager*[mResMax]; for (u8 i = 0; i < mResMax; i++) mpResMgrAry[i] = NULL; mpWorkData = new (pHeap, 0) JPAEmitterWorkData(); } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm JPAEmitterManager::JPAEmitterManager(u32 param_0, u32 param_1, JKRHeap* param_2, u8 param_3, u8 param_4) { nofralloc #include "asm/JSystem/JParticle/JPAEmitterManager/__ct__17JPAEmitterManagerFUlUlP7JKRHeapUcUc.s" } #pragma pop #endif /* 8027DEBC-8027DFA0 2787FC 00E4+00 0/0 3/3 0/0 .text * createSimpleEmitterID__17JPAEmitterManagerFRCQ29JGeometry8TVec3UsUcUcP18JPAEmitterCallBackP19JPAParticleCallBack */ JPABaseEmitter* JPAEmitterManager::createSimpleEmitterID(JGeometry::TVec3 const& pos, u16 resID, u8 groupID, u8 resMgrID, JPAEmitterCallBack* emtrCB, JPAParticleCallBack* ptclCB) { JPAResource* pRes = mpResMgrAry[resMgrID]->getResource(resID); if (pRes != NULL && mFreeEmtrList.getNumLinks() != 0) { JSULink* pLink = mFreeEmtrList.getFirst(); mFreeEmtrList.remove(pLink); mpGrpEmtr[groupID].append(pLink); JPABaseEmitter* emtr = pLink->getObject(); emtr->init(this, pRes); emtr->mpPtclPool = &mPtclPool; emtr->mpEmtrCallBack = emtrCB; emtr->mpPtclCallBack = ptclCB; emtr->mGroupID = groupID; emtr->mResMgrID = resMgrID; emtr->mGlobalTrs.set(pos); return emtr; } return NULL; } /* 8027DFA0-8027E028 2788E0 0088+00 0/0 3/3 0/0 .text calc__17JPAEmitterManagerFUc */ void JPAEmitterManager::calc(u8 groupID) { for (JSULink*pLink = mpGrpEmtr[groupID].getFirst(), *pNext; pLink != mpGrpEmtr[groupID].getEnd(); pLink = pNext) { pNext = pLink->getNext(); JPABaseEmitter* emtr = pLink->getObject(); bool done = emtr->mpRes->calc(mpWorkData, emtr); if (done && !emtr->checkStatus(0x200)) forceDeleteEmitter(emtr); } } /* 8027E028-8027E220 278968 01F8+00 0/0 1/1 0/0 .text draw__17JPAEmitterManagerFPC11JPADrawInfoUc */ void JPAEmitterManager::draw(JPADrawInfo const* drawInfo, u8 groupID) { drawInfo->getCamMtx(&mpWorkData->mPosCamMtx); drawInfo->getPrjMtx(&mpWorkData->mPrjMtx); calcYBBCam(); GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); GXEnableTexOffsets(GX_TEXCOORD0, GX_TRUE, GX_TRUE); GXEnableTexOffsets(GX_TEXCOORD1, GX_TRUE, GX_TRUE); GXEnableTexOffsets(GX_TEXCOORD2, GX_TRUE, GX_TRUE); GXSetCullMode(GX_CULL_NONE); GXSetCoPlanar(GX_FALSE); GXClearVtxDesc(); GXSetVtxDesc(GX_VA_POS, GX_INDEX8); GXSetVtxDesc(GX_VA_TEX0, GX_INDEX8); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_S8, 0); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_S8, 0); GXSetVtxAttrFmt(GX_VTXFMT1, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); GXSetVtxAttrFmt(GX_VTXFMT1, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0); GXSetCurrentMtx(GX_PNMTX0); GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, GX_SRC_VTX, GX_LIGHT_NULL, GX_DF_NONE, GX_AF_NONE); GXSetChanCtrl(GX_COLOR1A1, GX_FALSE, GX_SRC_REG, GX_SRC_VTX, GX_LIGHT_NULL, GX_DF_NONE, GX_AF_NONE); GXSetNumChans(0); for (JSULink* pLink = mpGrpEmtr[groupID].getFirst(); pLink != mpGrpEmtr[groupID].getEnd(); pLink = pLink->getNext()) { JPABaseEmitter* emtr = pLink->getObject(); if (!emtr->checkStatus(0x04)) { mpWorkData->mpResMgr = mpResMgrAry[emtr->mResMgrID]; emtr->mpRes->draw(mpWorkData, emtr); } } } /* 8027E220-8027E278 278B60 0058+00 0/0 1/1 0/0 .text forceDeleteAllEmitter__17JPAEmitterManagerFv */ void JPAEmitterManager::forceDeleteAllEmitter() { for (u8 i = 0; i < mGrpMax; i++) forceDeleteGroupEmitter(i); } /* 8027E278-8027E2D8 278BB8 0060+00 1/1 0/0 0/0 .text * forceDeleteGroupEmitter__17JPAEmitterManagerFUc */ void JPAEmitterManager::forceDeleteGroupEmitter(u8 groupID) { while (mpGrpEmtr[groupID].getNumLinks()) forceDeleteEmitter(mpGrpEmtr[groupID].getLast()->getObject()); } /* 8027E2D8-8027E344 278C18 006C+00 3/3 1/1 0/0 .text * forceDeleteEmitter__17JPAEmitterManagerFP14JPABaseEmitter */ void JPAEmitterManager::forceDeleteEmitter(JPABaseEmitter* emtr) { emtr->deleteAllParticle(); emtr->setStatus(0x300); mpGrpEmtr[emtr->getGroupID()].remove(&emtr->mLink); mFreeEmtrList.prepend(&emtr->mLink); } /* 8027E344-8027E354 278C84 0010+00 0/0 2/2 0/0 .text * entryResourceManager__17JPAEmitterManagerFP18JPAResourceManagerUc */ void JPAEmitterManager::entryResourceManager(JPAResourceManager* resMgr, u8 resMgrID) { mpResMgrAry[resMgrID] = resMgr; } /* 8027E354-8027E3F4 278C94 00A0+00 0/0 1/1 0/0 .text clearResourceManager__17JPAEmitterManagerFUc */ void JPAEmitterManager::clearResourceManager(u8 resMgrID) { for (u8 i = 0; i < mGrpMax; i++) { for (JSULink*pLink = mpGrpEmtr[i].getFirst(), *pNext; pLink != mpGrpEmtr[i].getEnd(); pLink = pNext) { pNext = pLink->getNext(); if (resMgrID == pLink->getObject()->getResourceManagerID()) forceDeleteEmitter(pLink->getObject()); } } mpResMgrAry[resMgrID] = NULL; } /* ############################################################################################## */ /* 80455358-8045535C 003958 0004+00 1/1 0/0 0/0 .sdata2 @2632 */ SECTION_SDATA2 static u8 lit_2632[4] = { 0x00, 0x00, 0x00, 0x00, }; /* 8045535C-80455360 00395C 0004+00 1/1 0/0 0/0 .sdata2 @2633 */ SECTION_SDATA2 static f32 lit_2633 = 32.0f; /* 80455360-80455364 003960 0004+00 1/1 0/0 0/0 .sdata2 @2634 */ SECTION_SDATA2 static f32 lit_2634 = 0.5f; /* 80455364-80455368 003964 0004+00 1/1 0/0 0/0 .sdata2 @2635 */ SECTION_SDATA2 static f32 lit_2635 = 3.0f; /* 80455368-80455370 003968 0004+04 1/1 0/0 0/0 .sdata2 @2636 */ SECTION_SDATA2 static f32 lit_2636[1 + 1 /* padding */] = { 1.0f, /* padding */ 0.0f, }; /* 8027E3F4-8027E51C 278D34 0128+00 1/1 0/0 0/0 .text calcYBBCam__17JPAEmitterManagerFv */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void JPAEmitterManager::calcYBBCam() { nofralloc #include "asm/JSystem/JParticle/JPAEmitterManager/calcYBBCam__17JPAEmitterManagerFv.s" } #pragma pop /* 8027E51C-8027E54C 278E5C 0030+00 1/1 0/0 0/0 .text __ct__25JSUList<14JPABaseEmitter>Fv */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off extern "C" asm void func_8027E51C(void* _this) { nofralloc #include "asm/JSystem/JParticle/JPAEmitterManager/func_8027E51C.s" } #pragma pop /* 8027E54C-8027E588 278E8C 003C+00 1/1 0/0 0/0 .text __dt__26JPANode<15JPABaseParticle>Fv */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off extern "C" asm void func_8027E54C(void* _this) { nofralloc #include "asm/JSystem/JParticle/JPAEmitterManager/func_8027E54C.s" } #pragma pop /* 8027E588-8027E598 278EC8 0010+00 1/1 0/0 0/0 .text __ct__26JPANode<15JPABaseParticle>Fv */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off extern "C" asm void func_8027E588(void* _this) { nofralloc #include "asm/JSystem/JParticle/JPAEmitterManager/func_8027E588.s" } #pragma pop /* 8027E598-8027E5EC 278ED8 0054+00 1/1 0/0 0/0 .text __dt__25JSUList<14JPABaseEmitter>Fv */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off extern "C" asm void func_8027E598(void* _this) { nofralloc #include "asm/JSystem/JParticle/JPAEmitterManager/func_8027E598.s" } #pragma pop /* 8027E5EC-8027E64C 278F2C 0060+00 1/1 0/0 0/0 .text __dt__14JPABaseEmitterFv */ JPABaseEmitter::~JPABaseEmitter() {} /* 8027E64C-8027E6A4 278F8C 0058+00 1/1 0/0 0/0 .text __ct__14JPABaseEmitterFv */ JPABaseEmitter::JPABaseEmitter() : mLink(this) {}