diff options
| author | robojumper <robojumper@gmail.com> | 2026-05-07 21:23:47 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-05-07 21:23:47 +0200 |
| commit | f7b4c029fd5176e817e3de7209727480c445a3d2 (patch) | |
| tree | 9cddc9fa36ec13e7dac76c54d74257c61fe20b47 /src/JSystem/JParticle/JPADynamicsBlock.cpp | |
| parent | ddb116187922a3f73ae3c97a136f499b7d724a2c (diff) | |
| parent | f4d163797f3c21e5a705b75043e0a8fbe7dc2460 (diff) | |
Merge pull request #313 from robojumper/vec-mtx-cleanup
Cleanup
Diffstat (limited to 'src/JSystem/JParticle/JPADynamicsBlock.cpp')
| -rw-r--r-- | src/JSystem/JParticle/JPADynamicsBlock.cpp | 76 |
1 files changed, 24 insertions, 52 deletions
diff --git a/src/JSystem/JParticle/JPADynamicsBlock.cpp b/src/JSystem/JParticle/JPADynamicsBlock.cpp index a037be31..4804cd6d 100644 --- a/src/JSystem/JParticle/JPADynamicsBlock.cpp +++ b/src/JSystem/JParticle/JPADynamicsBlock.cpp @@ -1,14 +1,8 @@ -// -// Generated By: dol2asm -// Translation Unit: JPADynamicsBlock -// - #include "JSystem/JParticle/JPADynamicsBlock.h" #include "JSystem/JParticle/JPAEmitter.h" #include "nw4r/math/math_triangular.h" -/* 8027B144-8027B220 275A84 00DC+00 1/1 0/0 0/0 .text JPAVolumePoint__FP18JPAEmitterWorkData */ void JPAVolumePoint(JPAEmitterWorkData* work) { work->mVolumeCalcData.mVolumePos.setZero(); work->mVolumeCalcData.mVelOmni.set(work->mpEmtr->get_r_zh(), work->mpEmtr->get_r_zh(), @@ -17,7 +11,6 @@ void JPAVolumePoint(JPAEmitterWorkData* work) { work->mVolumeCalcData.mVelOmni.z); } -/* 8027B220-8027B33C 275B60 011C+00 1/1 0/0 0/0 .text JPAVolumeLine */ void JPAVolumeLine(JPAEmitterWorkData* work) { if (work->mpEmtr->checkFlag(JPADynFlag_FixedInterval)) { work->mVolumeCalcData.mVolumePos.set( @@ -34,7 +27,6 @@ void JPAVolumeLine(JPAEmitterWorkData* work) { work->mVolumeCalcData.mVelAxis.set(0.0f, 0.0f, work->mVolumeCalcData.mVolumePos.z); } -/* 8027B33C-8027B4E8 275C7C 01AC+00 1/1 0/0 0/0 .text JPAVolumeCircle */ // NONMATCHING regalloc. Could be issue with mul asm implementations void JPAVolumeCircle(JPAEmitterWorkData* work) { s16 theta; @@ -56,29 +48,25 @@ void JPAVolumeCircle(JPAEmitterWorkData* work) { distance = work->mVolumeSize * (work->mVolumeMinRad + distance * (1.0f - work->mVolumeMinRad)); work->mVolumeCalcData.mVolumePos.set(distance * nw4r::math::SinIdx(theta), 0.0f, distance * nw4r::math::CosIdx(theta)); - work->mVolumeCalcData.mVelOmni = work->mVolumeCalcData.mVolumePos; - work->mVolumeCalcData.mVelOmni *= work->mGlobalScl; + work->mVolumeCalcData.mVelOmni.mul(work->mVolumeCalcData.mVolumePos, work->mGlobalScl); work->mVolumeCalcData.mVelAxis.set(work->mVolumeCalcData.mVolumePos.x, 0.0f, work->mVolumeCalcData.mVolumePos.z); } -/* 8027B4E8-8027B5F0 275E28 0108+00 1/1 0/0 0/0 .text JPAVolumeCube */ void JPAVolumeCube(JPAEmitterWorkData* work) { work->mVolumeCalcData.mVolumePos.set(work->mpEmtr->get_r_zh() * work->mVolumeSize, work->mpEmtr->get_r_zh() * work->mVolumeSize, work->mpEmtr->get_r_zh() * work->mVolumeSize); - work->mVolumeCalcData.mVelOmni = work->mVolumeCalcData.mVolumePos; - work->mVolumeCalcData.mVelOmni *= work->mGlobalScl; + work->mVolumeCalcData.mVelOmni.mul(work->mVolumeCalcData.mVolumePos, work->mGlobalScl); work->mVolumeCalcData.mVelAxis.set(work->mVolumeCalcData.mVolumePos.x, 0.0f, work->mVolumeCalcData.mVolumePos.z); } -/* 8027B5F0-8027B87C 275F30 028C+00 1/1 0/0 0/0 .text JPAVolumeSphere__FP18JPAEmitterWorkData */ static void JPAVolumeSphere(JPAEmitterWorkData* work) { - s16 phi, theta; + s16 phi, r28; if (work->mpEmtr->checkFlag(JPADynFlag_FixedInterval)) { - phi = (u16)(work->mVolumeX * 0x8000 / (work->mDivNumber - 1) + 0x4000); - f32 tmp = (u16)(work->mVolumeAngleNum * 0x10000 / (work->mVolumeAngleMax - 1)); - theta = tmp * work->mVolumeSweep + 0x8000; + phi = u16(work->mVolumeX * 0x8000 / (work->mDivNumber - 1) + 0x4000); + u16 r26 = u16(work->mVolumeAngleNum * 0x10000 / (work->mVolumeAngleMax - 1)); + r28 = f32(r26) * work->mVolumeSweep + 0x8000; work->mVolumeAngleNum++; if (work->mVolumeAngleNum == work->mVolumeAngleMax) { work->mVolumeAngleNum = 0; @@ -92,16 +80,16 @@ static void JPAVolumeSphere(JPAEmitterWorkData* work) { } } else { phi = work->mpEmtr->get_r_ss() >> 1; - theta = work->mVolumeSweep * work->mpEmtr->get_r_ss(); + r28 = work->mVolumeSweep * work->mpEmtr->get_r_ss(); } - f32 rnd = work->mpEmtr->get_r_f(); + f32 f31 = work->mpEmtr->get_r_f(); if (work->mpEmtr->checkFlag(JPADynFlag_FixedDensity)) { - rnd = 1.0f - rnd * rnd * rnd; + f31 = 1.0f - f31 * f31 * f31; } - f32 rad = work->mVolumeSize * (work->mVolumeMinRad + rnd * (1.0f - work->mVolumeMinRad)); - work->mVolumeCalcData.mVolumePos.set(rad * nw4r::math::CosIdx(phi) * nw4r::math::SinIdx(theta), -rad * nw4r::math::SinIdx(phi), - rad * nw4r::math::CosIdx(phi) * nw4r::math::CosIdx(theta)); + f31 = work->mVolumeSize * (work->mVolumeMinRad + f31 * (1.0f - work->mVolumeMinRad)); + work->mVolumeCalcData.mVolumePos.set(f31 * nw4r::math::CosIdx(phi) * nw4r::math::SinIdx(r28), -f31 * nw4r::math::SinIdx(phi), + f31 * nw4r::math::CosIdx(phi) * nw4r::math::CosIdx(r28)); work->mVolumeCalcData.mVelOmni.set( work->mVolumeCalcData.mVolumePos.x * work->mGlobalScl.x, work->mVolumeCalcData.mVolumePos.y * work->mGlobalScl.y, work->mVolumeCalcData.mVolumePos.z * work->mGlobalScl.z @@ -110,16 +98,15 @@ static void JPAVolumeSphere(JPAEmitterWorkData* work) { work->mVolumeCalcData.mVolumePos.z); } -/* 8027B87C-8027B9F8 2761BC 017C+00 1/1 0/0 0/0 .text JPAVolumeCylinder__FP18JPAEmitterWorkData */ static void JPAVolumeCylinder(JPAEmitterWorkData* work) { - s16 theta = work->mVolumeSweep * work->mpEmtr->get_r_ss(); - f32 rnd = work->mpEmtr->get_r_f(); + s16 r30 = work->mVolumeSweep * work->mpEmtr->get_r_ss(); + f32 f31 = work->mpEmtr->get_r_f(); if (work->mpEmtr->checkFlag(JPADynFlag_FixedDensity)) { - rnd = 1.0f - rnd * rnd; + f31 = 1.0f - f31 * f31; } - f32 rad = work->mVolumeSize * (work->mVolumeMinRad + rnd * (1.0f - work->mVolumeMinRad)); + f31 = work->mVolumeSize * (work->mVolumeMinRad + f31 * (1.0f - work->mVolumeMinRad)); work->mVolumeCalcData.mVolumePos.set( - rad * nw4r::math::SinIdx(theta), work->mVolumeSize * work->mpEmtr->get_r_zp(), rad * nw4r::math::CosIdx(theta)); + f31 * nw4r::math::SinIdx(r30), work->mVolumeSize * work->mpEmtr->get_r_zp(), f31 * nw4r::math::CosIdx(r30)); work->mVolumeCalcData.mVelOmni.set( work->mVolumeCalcData.mVolumePos.x * work->mGlobalScl.x, work->mVolumeCalcData.mVolumePos.y * work->mGlobalScl.y, work->mVolumeCalcData.mVolumePos.z * work->mGlobalScl.z @@ -128,7 +115,6 @@ static void JPAVolumeCylinder(JPAEmitterWorkData* work) { work->mVolumeCalcData.mVolumePos.z); } -/* 8027B9F8-8027BB18 276338 0120+00 1/1 0/0 0/0 .text JPAVolumeTorus__FP18JPAEmitterWorkData */ static void JPAVolumeTorus(JPAEmitterWorkData* work) { s16 theta = work->mVolumeSweep * work->mpEmtr->get_r_ss(); s16 phi = work->mpEmtr->get_r_ss(); @@ -145,7 +131,6 @@ static void JPAVolumeTorus(JPAEmitterWorkData* work) { ); } -/* 8027BB18-8027BB4C 276458 0034+00 0/0 1/1 0/0 .text __ct__16JPADynamicsBlockFPCUc */ JPADynamicsBlock::JPADynamicsBlock(u8 const* data) { mpData = (const JPADynamicsBlockData*)data; init(); @@ -161,7 +146,6 @@ enum { VOL_Line = 0x06, }; -/* 8027BB4C-8027BBE8 27648C 009C+00 2/1 0/0 0/0 .text init__16JPADynamicsBlockFv */ void JPADynamicsBlock::init() { switch (getVolumeType()) { case VOL_Cube: @@ -188,30 +172,18 @@ void JPADynamicsBlock::init() { } } -/* 8027BBE8-8027BDEC 276528 0204+00 0/0 1/1 0/0 .text - * create__16JPADynamicsBlockFP18JPAEmitterWorkData */ void JPADynamicsBlock::create(JPAEmitterWorkData* work) { if (work->mpEmtr->checkStatus(JPAEmtrStts_RateStepEmit)) { - s32 emitCount; - s32 createCount; + s32 emitCount = 0; - // Probably an inlined function. if (work->mpEmtr->checkFlag(JPADynFlag_FixedInterval)) { - s32 count; - if (getVolumeType() == VOL_Sphere) { - count = 4 * getDivNumber() * getDivNumber() + 2; - } else { - count = getDivNumber(); - } - emitCount = count; + emitCount = getVolumeType() == VOL_Sphere ? 4 * getDivNumber() * getDivNumber() + 2 : getDivNumber(); work->mVolumeEmitIdx = 0; } else { f32 newPtclCount = work->mpEmtr->mRate * (getRateRndm() * work->mpEmtr->get_r_zp() + 1.0f); - f32 newEmitCount = work->mpEmtr->mEmitCount + newPtclCount; - work->mpEmtr->mEmitCount = newEmitCount; - emitCount = (s32)newEmitCount; + emitCount = work->mpEmtr->mEmitCount += newPtclCount; work->mpEmtr->mEmitCount -= emitCount; if (work->mpEmtr->checkStatus(JPAEmtrStts_FirstEmit) && 0.0f < newPtclCount && @@ -224,10 +196,10 @@ void JPADynamicsBlock::create(JPAEmitterWorkData* work) { emitCount = 0; } - // Probably an inlined function. - createCount = emitCount; + JPABaseParticle* ptcl = NULL; + s32 createCount = emitCount; while (createCount > 0) { - JPABaseParticle* ptcl = work->mpEmtr->createParticle(); + ptcl = work->mpEmtr->createParticle(); if (ptcl == NULL) break; createCount--; @@ -235,7 +207,7 @@ void JPADynamicsBlock::create(JPAEmitterWorkData* work) { } if (++work->mpEmtr->mRateStepTimer >= (work->mpEmtr->mRateStep + 1)) { - work->mpEmtr->mRateStepTimer -= (work->mpEmtr->mRateStep + 1); + work->mpEmtr->mRateStepTimer -= work->mpEmtr->mRateStep + 1; work->mpEmtr->setStatus(JPAEmtrStts_RateStepEmit); } else { work->mpEmtr->clearStatus(JPAEmtrStts_RateStepEmit); |
