// // Generated by dtk // Translation Unit: JPAEmitterManager.cpp // #include "JSystem/JParticle/JPAEmitterManager.h" #include "JSystem/JParticle/JPAEmitterLoader.h" #include "JSystem/JParticle/JPAResourceManager.h" #include "JSystem/JKernel/JKRHeap.h" #include "JSystem/JUtility/JUTAssert.h" /* 8025EE44-8025F0E4 .text __ct__17JPAEmitterManagerFP18JPAResourceManagerUlUlUlP7JKRHeap */ JPAEmitterManager::JPAEmitterManager(JPAResourceManager* resMgr, u32 ptclNum, u32 emtrNum, u32 fieldNum, JKRHeap* heap) { heap = heap != NULL ? heap : JKRHeap::getCurrentHeap(); mPtclNum = ptclNum; mEmtrNum = emtrNum; mFieldNum = fieldNum; pResMgrArray[0] = resMgr; for (u32 i = 1; i < 8; i++) pResMgrArray[i] = 0; JPABaseParticle* pPtclArray = new(heap, 0) JPABaseParticle[mPtclNum]; JUT_ASSERT(0x2e, pPtclArray); for (u32 i = 0; i < mPtclNum; i++) { JPABaseParticle* ptcl = &pPtclArray[i]; mPtclPool.prepend(ptcl->getLinkBufferPtr()); } JPABaseEmitter* pEmtrArray = new(heap, 0) JPABaseEmitter[mEmtrNum]; JUT_ASSERT(0x35, pEmtrArray); for (u32 i = 0; i < mEmtrNum; i++) { JPABaseEmitter* emtr = &pEmtrArray[i]; emtr->setParticleList(&mPtclPool); emtr->setFieldList(&mFieldPool); mEmtrPool.prepend(emtr->getLinkBufferPtr()); } JPAFieldData* pFieldArray = new(heap, 0) JPAFieldData[mFieldNum]; JUT_ASSERT(0x3e, pFieldArray); for (u32 i = 0; i < mFieldNum; i++) { JPAFieldData* field = &pFieldArray[i]; mFieldPool.prepend(field->getLinkBufferPtr()); } } /* 8025F0E4-8025F2F4 .text createSimpleEmitterID__17JPAEmitterManagerFRCQ29JGeometry8TVec3UsUcUcP34JPACallBackBaseP54JPACallBackBase2 */ JPABaseEmitter* JPAEmitterManager::createSimpleEmitterID(const JGeometry::TVec3& pos, u16 userID, u8 groupID, u8 rmID, JPACallBackBase* pEmtrCallBack, JPACallBackBase2* pPtclCallBack) { /* Nonmatching */ JUT_ASSERT(0x56, groupID < 16); JUT_ASSERT(0x57, rmID < 8); JUT_ASSERT(0x58, pResMgrArray[rmID] != 0); JPABaseEmitter* emtr; JPAEmitterData* emtrData; JPAResourceManager* resMgr; emtr = NULL; resMgr = pResMgrArray[rmID]; emtrData = resMgr->getEmitterResource()->getByUserIndex(userID); if (emtrData == NULL) { JUT_WARN(98, "%s", "JParticle::Couldn't Create Emitter!"); JUT_WARN(99, "%s", "User Index Number specification has mistaken."); JUT_WARN(100, "Group ID (%d),EmitterManagerPtr(%x)", groupID, resMgr); } else if (mEmtrPool.getNumLinks() != 0) { emtr = mEmtrPool.getFirst()->getObject(); mEmtrPool.remove(emtr->getLinkBufferPtr()); mEmtrGroup[groupID].append(emtr->getLinkBufferPtr()); emtr->create(emtrData->getLinkInfo()[0]); emtr->initDrawMgr(pResMgrArray[rmID]->getTextureResource()); emtr->setEmitterCallBackPtr(pEmtrCallBack); emtr->setParticleCallBackPtr(pPtclCallBack); emtr->mGroupID = groupID; emtr->mResMgrID = rmID; emtr->mGlobalTranslation.set(pos); } return emtr; } /* 8025F2F4-8025F3C4 .text calc__17JPAEmitterManagerFUc */ void JPAEmitterManager::calc(u8 groupID) { JUT_ASSERT(0xbb, groupID < 16); for (JSULink* link = mEmtrGroup[groupID].getFirst(); link != NULL;) { JSULink* next = link->getNext(); JPABaseEmitter *emtr = link->getObject(); bool started = emtr->doStartFrameProcess(); if (started) { if (emtr->doTerminationProcess()) deleteEmitter(emtr); else emtr->calc(); } link = next; } } /* 8025F3C4-8025F494 .text draw__17JPAEmitterManagerFP11JPADrawInfoUc */ void JPAEmitterManager::draw(JPADrawInfo* drawInfo, u8 groupID) { JUT_ASSERT(0xde, groupID < 16); JPABaseEmitter::emtrInfo.mFovy = drawInfo->getFovy(); JPABaseEmitter::emtrInfo.mAspect = drawInfo->getAspect(); for (JSULink* link = mEmtrGroup[groupID].getFirst(); link != NULL; link = link->getNext()) { JPABaseEmitter *emtr = link->getObject(); if (emtr->isDraw()) { emtr->calcgReRDirection(); emtr->draw(drawInfo->getCameraMtxPtr()); } } } /* 8025F494-8025F4F4 .text deleteEmitter__17JPAEmitterManagerFP14JPABaseEmitter */ void JPAEmitterManager::deleteEmitter(JPABaseEmitter* emtr) { emtr->mFieldManager.deleteAllField(); mEmtrGroup[emtr->getGroupID()].remove(emtr->getLinkBufferPtr()); mEmtrPool.prepend(emtr->getLinkBufferPtr()); } /* 8025F4F4-8025F53C .text forceDeleteEmitter__17JPAEmitterManagerFP14JPABaseEmitter */ void JPAEmitterManager::forceDeleteEmitter(JPABaseEmitter* emtr) { emtr->deleteAllParticle(); deleteEmitter(emtr); } /* 8025F53C-8025F5B4 .text forceDeleteAllEmitter__17JPAEmitterManagerFv */ void JPAEmitterManager::forceDeleteAllEmitter() { /* Nonmatching */ for (u32 i = 0; i < 16; i++) { for (JSULink* link = mEmtrGroup[i].getFirst(); link != NULL;) { JSULink* next = link->getNext(); JPABaseEmitter* emtr = link->getObject(); forceDeleteEmitter(emtr); link = next; } } } /* 8025F5B4-8025F68C .text clearResourceManager__17JPAEmitterManagerFUc */ void JPAEmitterManager::clearResourceManager(u8 rmID) { /* Nonmatching */ JUT_ASSERT(0x14b, rmID < 8); for (u32 i = 0; i < 16; i++) { for (JSULink* link = mEmtrGroup[i].getFirst(); link != NULL;) { JSULink* next = link->getNext(); JPABaseEmitter* emtr = link->getObject(); if (emtr->getResourceManagerID() == rmID) forceDeleteEmitter(emtr); link = next; } } pResMgrArray[rmID] = NULL; }