JPAEmitter work

This commit is contained in:
Jasper St. Pierre
2024-07-14 23:46:20 -07:00
parent bae8aa63bc
commit d70fb719a1
2 changed files with 36 additions and 4 deletions
+4 -4
View File
@@ -124,10 +124,10 @@ public:
/* 0x130 */ f32 mVolumeSize;
/* 0x134 */ s32 mVolumeEmitCount;
/* 0x138 */ s32 mVolumeEmitIdx;
/* 0x13C */ u32 mVolumeEmitAngleCount;
/* 0x140 */ u32 mVolumeEmitXCount;
/* 0x144 */ u32 mVolumeEmitAngleMax;
/* 0x148 */ u32 mDivNumber;
/* 0x13C */ s32 mVolumeEmitAngleCount;
/* 0x140 */ s32 mVolumeEmitXCount;
/* 0x144 */ s32 mVolumeEmitAngleMax;
/* 0x148 */ s32 mDivNumber;
};
struct JPAFrameManager {
+32
View File
@@ -65,6 +65,38 @@ void JPABaseEmitter::calcVolumeCube() {
/* 8025C63C-8025C8A4 .text calcVolumeSphere__14JPABaseEmitterFv */
void JPABaseEmitter::calcVolumeSphere() {
/* Nonmatching */
s16 x;
s16 angle;
if (checkEmDataFlag(0x02)) {
x = (u16)(((s32)emtrInfo.mVolumeEmitXCount * 0x8000) / ((s32)(emtrInfo.mDivNumber - 1)) + 0x4000);
angle = mVolumeSweep * (f32)(u16)((emtrInfo.mVolumeEmitAngleCount * 0x10000) / emtrInfo.mVolumeEmitAngleMax) + 32768.0f;
if (++emtrInfo.mVolumeEmitAngleCount == emtrInfo.mVolumeEmitAngleMax) {
emtrInfo.mVolumeEmitAngleCount = 0;
++emtrInfo.mVolumeEmitXCount;
if (emtrInfo.mVolumeEmitXCount * 2 < emtrInfo.mDivNumber) {
emtrInfo.mVolumeEmitAngleMax = (emtrInfo.mVolumeEmitAngleMax != 1) ? emtrInfo.mVolumeEmitAngleMax + 4 : emtrInfo.mVolumeEmitAngleMax + 3;
} else {
emtrInfo.mVolumeEmitAngleMax = (emtrInfo.mVolumeEmitAngleMax != 4) ? emtrInfo.mVolumeEmitAngleMax - 4 : 1;
}
}
} else {
x = getRandomSS() >> 1;
angle = mVolumeSweep * getRandomSS();
}
f32 rad = getRandomF();
if (checkEmDataFlag(0x01)) {
rad = 1.0f - rad * rad * rad;
}
rad = emtrInfo.mVolumeSize * (mVolumeMinRad + rad * (1.0f - mVolumeMinRad));
emtrInfo.mVolumePos.set(
rad * JMASCos(x) * JMASSin(angle),
-rad * JMASSin(x),
rad * JMASCos(x) * JMASCos(angle)
);
emtrInfo.mVelOmni.mul(emtrInfo.mVolumePos, emtrInfo.mEmitterGlobalScale);
emtrInfo.mVelAxis.set(emtrInfo.mVolumePos.x, 0.0f, emtrInfo.mVolumePos.z);
}
/* 8025C8A4-8025CA28 .text calcVolumeCylinder__14JPABaseEmitterFv */