From 08df87b93cf45b28fd0e8ac0733f7ba644d75384 Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Tue, 5 Dec 2023 15:36:17 -0500 Subject: [PATCH] match JPABaseEmitter::calcKey --- include/JSystem/JParticle/JPAEmitter.h | 71 ++++++++++++++++++++------ src/JSystem/JParticle/JPAEmitter.cpp | 6 +-- 2 files changed, 58 insertions(+), 19 deletions(-) diff --git a/include/JSystem/JParticle/JPAEmitter.h b/include/JSystem/JParticle/JPAEmitter.h index 049999022..5b567441d 100644 --- a/include/JSystem/JParticle/JPAEmitter.h +++ b/include/JSystem/JParticle/JPAEmitter.h @@ -158,7 +158,7 @@ public: JPABaseParticle* getPtclFromVacList(); bool doStartFrameProcess(); bool doTerminationProcess(); - void calcEmitterGlobalPosition(JGeometry::TVec3&); + void calcEmitterGlobalPosition(JGeometry::TVec3&); void calcgReRDirection(); u32 getPivotX(); u32 getPivotY(); @@ -166,7 +166,7 @@ public: void setStatus(u32 status) { mFlags |= status; } void clearStatus(u32 status) { mFlags &= ~status; } bool checkStatus(u32 status) { return mFlags & status; } - void initStatus(u32 status); + void initStatus(u32 status) { mFlags = status; } int getParticleNumber() { return mActiveParticles.getNumLinks() + mChildParticles.getNumLinks(); @@ -183,28 +183,28 @@ public: void setGlobalRTMatrix(MtxP mtx) { JPASetRMtxTVecfromMtx(mtx, mGlobalRotation, mGlobalTranslation); } - void setGlobalRotation(const JGeometry::TVec3& rot) { + void setGlobalRotation(const JGeometry::TVec3& rot) { JPAGetXYZRotateMtx(rot.x, rot.y, rot.z, mGlobalRotation); } void setGlobalTranslation(f32 x, f32 y, f32 z) { mGlobalTranslation.set(x, y, z); } - void setGlobalTranslation(const JGeometry::TVec3& trans) { mGlobalTranslation.set(trans); } - void setGlobalScale(const JGeometry::TVec3& scale) { + void setGlobalTranslation(const JGeometry::TVec3& trans) { mGlobalTranslation.set(trans); } + void setGlobalScale(const JGeometry::TVec3& scale) { mGlobalDynamicsScale.set(scale); mGlobalParticleScale.set(scale); } - void setGlobalParticleScale(const JGeometry::TVec3& scale) { + void setGlobalParticleScale(const JGeometry::TVec3& scale) { mGlobalParticleScale.set(scale); } - void setGlobalDynamicsScale(const JGeometry::TVec3& scale) { + void setGlobalDynamicsScale(const JGeometry::TVec3& scale) { mGlobalDynamicsScale.set(scale); } - void setEmitterTranslation(const JGeometry::TVec3& trans) { + void setEmitterTranslation(const JGeometry::TVec3& trans) { mEmitterTranslation.set(trans); } - void setEmitterScale(const JGeometry::TVec3& scale) { + void setEmitterScale(const JGeometry::TVec3& scale) { mEmitterScale.set(scale); } - void setDirection(const JGeometry::TVec3& dir) { + void setDirection(const JGeometry::TVec3& dir) { mEmitterDir.set(dir); } void setMaxFrame(s32 maxFrame) { mMaxFrame = maxFrame; } @@ -214,13 +214,14 @@ public: mGlobalPrmColor.b = b; } - void setVolumeSweep(float i_volSweep) { mVolumeSweep = i_volSweep; } + void setVolumeSweep(f32 i_volSweep) { mVolumeSweep = i_volSweep; } + void setVolumeSize(u16 size) { mVolumeSize = size; } void setLifeTime(s16 i_lifeTime) { mLifeTime = i_lifeTime; } - void setRate(float i_rate) { mRate = i_rate; } - void setDirectionalSpeed(float i_speed) { mInitialVelDir = i_speed; } - void setAwayFromAxisSpeed(float i_speed) { mInitialVelAxis = i_speed; } - void setAwayFromCenterSpeed(float i_speed) { mInitialVelOmni = i_speed; } - void setSpread(float i_spread) { mSpread = i_spread; } + void setRate(f32 i_rate) { mRate = i_rate; } + void setDirectionalSpeed(f32 i_speed) { mInitialVelDir = i_speed; } + void setAwayFromAxisSpeed(f32 i_speed) { mInitialVelAxis = i_speed; } + void setAwayFromCenterSpeed(f32 i_speed) { mInitialVelOmni = i_speed; } + void setSpread(f32 i_spread) { mSpread = i_spread; } void stopCreateParticle() { setStatus(JPAEmtrStts_StopEmit); } void playCreateParticle() { clearStatus(JPAEmtrStts_StopEmit); } @@ -252,6 +253,44 @@ public: f32 getRandomSF() { return mRandomSeed.get_ufloat_1() - 0.5f; } s16 getRandomSS() { return mRandomSeed.get_bit16(); } + u32 getUserWork() { return mUserData; } + void setUserWork(u32 work) { mUserData = work; } + + // TODO + void becomeContinuousParticle() {} + void calcAfterCB() {} + void calcBeforeCB() {} + void calcEmitterGlobalTranslation(JGeometry::TVec3&) {} + void checkEmDataFlag(u32) {} + void drawCB() {} + void drawEmitterCallBack() {} + void getAspect() {} + void getAxisYVec(JGeometry::TVec3&) const {} + void getBaseEnvColor(GXColor&) {} + void getBasePrmColor(GXColor&) {} + void getCamMtxPtr() {} + void getChildParticleList() {} + void getCurrentCreateNumber() const {} + void getEmitterAxis(JGeometry::TVec3&, JGeometry::TVec3&, JGeometry::TVec3&) const {} + void getFovy() {} + void getFrame() {} + void getGlobalParticleScale(JGeometry::TVec3&) const {} + void getGlobalTranslation(JGeometry::TVec3&) const {} + void getParticleList() {} + void getRate() const {} + void getgReRDirection(JGeometry::TVec3&) {} + void isChildDraw() {} + void isContinuousParticle() {} + void isZDraw() {} + void loadTexture(u8, GXTexMapID) {} + void setEmitterRotation(const JGeometry::TVec3&) {} + void setGlobalEnvColor(u8, u8, u8) {} + void setGlobalParticleHeightScale(f32) {} + void setGlobalParticleScale(f32, f32) {} + void setGlobalParticleWidthScale(f32) {} + void setGlobalSRTMatrix(MtxP) {} + void setRandomDirectionSpeed(f32) {} + static JPAEmitterInfo emtrInfo; /* 0x000 */ VolumeFunc mVolumeFunc; diff --git a/src/JSystem/JParticle/JPAEmitter.cpp b/src/JSystem/JParticle/JPAEmitter.cpp index be3430f29..5bee20d7c 100644 --- a/src/JSystem/JParticle/JPAEmitter.cpp +++ b/src/JSystem/JParticle/JPAEmitter.cpp @@ -130,7 +130,7 @@ void JPABaseEmitter::create(JPADataBlockLinkInfo* info) { mSpread = dyn->getSpread(); mDataFlag = dyn->getDataFlag(); mUseKeyFlag = dyn->getUseKeyFlag(); - mFlags = JPAEmtrStts_FirstEmit | JPAEmtrStts_RateStepEmit; + initStatus(JPAEmtrStts_FirstEmit | JPAEmtrStts_RateStepEmit); MTXIdentity(mGlobalRotation); mGlobalDynamicsScale.x = 1.0f; mGlobalDynamicsScale.y = 1.0f; @@ -304,7 +304,6 @@ void JPABaseEmitter::calcChild() { /* 8025D8CC-8025DA90 .text calcKey__14JPABaseEmitterFv */ void JPABaseEmitter::calcKey() { - /* Nonmatching */ for (s32 i = 0; i < getEmitterDataBlockInfoPtr()->getKeyNum(); i++) { JPAKeyBlock* key = getEmitterDataBlockInfoPtr()->getKey()[i]; f32 tick = mTick; @@ -312,7 +311,8 @@ void JPABaseEmitter::calcKey() { u32 dataNum = key->getNumber(); if (key->isLoopEnable()) { s32 tickMax = (s32)(dataPtr[(dataNum - 1) * 4]) + 1; - tick -= (s32)tick % (s32)tickMax; + s32 numLoops = (s32)tick / tickMax; + tick -= numLoops * tickMax; } f32 value = JPAGetKeyFrameValue(tick, dataNum, dataPtr);