mirror of https://github.com/zeldaret/tp.git
315 lines
11 KiB
C++
315 lines
11 KiB
C++
//
|
|
// 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<JPABaseParticle>* ptcl = new (pHeap, 0) JPANode<JPABaseParticle>[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<JPABaseEmitter>[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__17JPAEmitterManagerFRCQ29JGeometry8TVec3<f>UsUcUcP18JPAEmitterCallBackP19JPAParticleCallBack
|
|
*/
|
|
JPABaseEmitter* JPAEmitterManager::createSimpleEmitterID(JGeometry::TVec3<f32> 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<JPABaseEmitter>* 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<JPABaseEmitter>*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<JPABaseEmitter>* 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<JPABaseEmitter>*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) {}
|