mirror of
https://github.com/zeldaret/tww.git
synced 2026-08-21 22:10:59 -04:00
JPAEmitter work
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user