diff options
| author | robojumper <robojumper@gmail.com> | 2025-04-27 07:13:47 +0200 |
|---|---|---|
| committer | robojumper <robojumper@gmail.com> | 2025-04-27 07:13:47 +0200 |
| commit | c1a0264e6ac151f3a884bc32126de192eede19c7 (patch) | |
| tree | 1649757ae5c7b47b87f17ef69760b4a359a8d46d /src/JSystem/JParticle/JPAExtraShape.cpp | |
| parent | 5df26c52fcc06e017f2cf525264d4f7563715e05 (diff) | |
Initial import of JParticle + JSUList from TP
Diffstat (limited to 'src/JSystem/JParticle/JPAExtraShape.cpp')
| -rw-r--r-- | src/JSystem/JParticle/JPAExtraShape.cpp | 152 |
1 files changed, 152 insertions, 0 deletions
diff --git a/src/JSystem/JParticle/JPAExtraShape.cpp b/src/JSystem/JParticle/JPAExtraShape.cpp new file mode 100644 index 00000000..2c269a31 --- /dev/null +++ b/src/JSystem/JParticle/JPAExtraShape.cpp @@ -0,0 +1,152 @@ +// +// Generated By: dol2asm +// Translation Unit: JPAExtraShape +// + +#include "JSystem/JParticle/JPAExtraShape.h" +#include "JSystem/JMath/JMATrigonometric.h" +#include "JSystem/JParticle/JPAParticle.h" +#include "JSystem/JParticle/JPAEmitter.h" +#include "dolphin/os.h" + +/* 8027A918-8027A990 275258 0078+00 0/0 1/1 0/0 .text + * JPACalcScaleX__FP18JPAEmitterWorkDataP15JPABaseParticle */ +void JPACalcScaleX(JPAEmitterWorkData* work, JPABaseParticle* ptcl) { + JPAExtraShape* esp = work->mpRes->getEsp(); + if (work->mScaleAnm < esp->getScaleInTiming()) { + ptcl->mParticleScaleX = + ptcl->mScaleOut * (esp->getScaleIncRateX() * work->mScaleAnm + esp->getScaleInValueX()); + } else if (work->mScaleAnm > esp->getScaleOutTiming()) { + ptcl->mParticleScaleX = + ptcl->mScaleOut * + (esp->getScaleDecRateX() * (work->mScaleAnm - esp->getScaleOutTiming()) + 1.0f); + } else { + ptcl->mParticleScaleX = ptcl->mScaleOut; + } +} + +/* 8027A990-8027AA08 2752D0 0078+00 0/0 1/1 0/0 .text + * JPACalcScaleY__FP18JPAEmitterWorkDataP15JPABaseParticle */ +void JPACalcScaleY(JPAEmitterWorkData* work, JPABaseParticle* ptcl) { + JPAExtraShape* esp = work->mpRes->getEsp(); + if (work->mScaleAnm < esp->getScaleInTiming()) { + ptcl->mParticleScaleY = + ptcl->mScaleOut * (esp->getScaleIncRateY() * work->mScaleAnm + esp->getScaleInValueY()); + } else if (work->mScaleAnm > esp->getScaleOutTiming()) { + ptcl->mParticleScaleY = + ptcl->mScaleOut * + (esp->getScaleDecRateY() * (work->mScaleAnm - esp->getScaleOutTiming()) + 1.0f); + } else { + ptcl->mParticleScaleY = ptcl->mScaleOut; + } +} + +/* 8027AA08-8027AA14 275348 000C+00 0/0 1/1 0/0 .text + * JPACalcScaleCopy__FP18JPAEmitterWorkDataP15JPABaseParticle */ +void JPACalcScaleCopy(JPAEmitterWorkData* work, JPABaseParticle* ptcl) { + JPAExtraShape* esp = work->mpRes->getEsp(); + ptcl->mParticleScaleY = ptcl->mParticleScaleX; +} + +/* 8027AA14-8027AA20 275354 000C+00 0/0 1/1 0/0 .text + * JPACalcScaleAnmNormal__FP18JPAEmitterWorkDataP15JPABaseParticle */ +void JPACalcScaleAnmNormal(JPAEmitterWorkData* work, JPABaseParticle* ptcl) { + work->mScaleAnm = ptcl->mTime; +} + +/* 8027AA20-8027AA84 275360 0064+00 0/0 1/1 0/0 .text + * JPACalcScaleAnmRepeatX__FP18JPAEmitterWorkDataP15JPABaseParticle */ +void JPACalcScaleAnmRepeatX(JPAEmitterWorkData* work, JPABaseParticle* ptcl) { + JPAExtraShape* esp = work->mpRes->getEsp(); + work->mScaleAnm = (ptcl->mAge % esp->getScaleAnmCycleX()) / (f32)esp->getScaleAnmCycleX(); +} + +/* 8027AA84-8027AAE8 2753C4 0064+00 0/0 1/1 0/0 .text + * JPACalcScaleAnmRepeatY__FP18JPAEmitterWorkDataP15JPABaseParticle */ +void JPACalcScaleAnmRepeatY(JPAEmitterWorkData* work, JPABaseParticle* ptcl) { + JPAExtraShape* esp = work->mpRes->getEsp(); + work->mScaleAnm = (ptcl->mAge % esp->getScaleAnmCycleY()) / (f32)esp->getScaleAnmCycleY(); +} + +/* 8027AAE8-8027AB7C 275428 0094+00 0/0 1/1 0/0 .text + * JPACalcScaleAnmReverseX__FP18JPAEmitterWorkDataP15JPABaseParticle */ +void JPACalcScaleAnmReverseX(JPAEmitterWorkData* work, JPABaseParticle* ptcl) { + JPAExtraShape* esp = work->mpRes->getEsp(); + s32 cycle = ptcl->mAge / esp->getScaleAnmCycleX(); + f32 base = (ptcl->mAge % esp->getScaleAnmCycleX()) / (f32)esp->getScaleAnmCycleX(); + work->mScaleAnm = base + ((cycle & 1) * (1.0f - base * 2.0f)); +} + +/* 8027AB7C-8027AC10 2754BC 0094+00 0/0 1/1 0/0 .text + * JPACalcScaleAnmReverseY__FP18JPAEmitterWorkDataP15JPABaseParticle */ +void JPACalcScaleAnmReverseY(JPAEmitterWorkData* work, JPABaseParticle* ptcl) { + JPAExtraShape* esp = work->mpRes->getEsp(); + s32 cycle = ptcl->mAge / esp->getScaleAnmCycleY(); + f32 base = (ptcl->mAge % esp->getScaleAnmCycleY()) / (f32)esp->getScaleAnmCycleY(); + work->mScaleAnm = base + ((cycle & 1) * (1.0f - base * 2.0f)); +} + +/* 8027AC10-8027AC98 275550 0088+00 0/0 1/1 0/0 .text + * JPACalcAlphaAnm__FP18JPAEmitterWorkDataP15JPABaseParticle */ +void JPACalcAlphaAnm(JPAEmitterWorkData* work, JPABaseParticle* ptcl) { + JPAExtraShape* esp = work->mpRes->getEsp(); + f32 alpha; + if (ptcl->mTime < esp->getAlphaInTiming()) { + alpha = 255.0f * (esp->getAlphaInValue() + esp->getAlphaIncRate() * ptcl->mTime); + } else if (ptcl->mTime > esp->getAlphaOutTiming()) { + alpha = 255.0f * ((ptcl->mTime - esp->getAlphaOutTiming()) * esp->getAlphaDecRate() + + esp->getAlphaBaseValue()); + } else { + alpha = 255.0f * esp->getAlphaBaseValue(); + } + OSf32tou8(&alpha, &ptcl->mPrmColorAlphaAnm); +} + +/* 8027AC98-8027AD88 2755D8 00F0+00 0/0 1/1 0/0 .text + * JPACalcAlphaFlickAnm__FP18JPAEmitterWorkDataP15JPABaseParticle */ +void JPACalcAlphaFlickAnm(JPAEmitterWorkData* work, JPABaseParticle* ptcl) { + JPAExtraShape* esp = work->mpRes->getEsp(); + f32 alpha; + if (ptcl->mTime < esp->getAlphaInTiming()) { + alpha = (esp->getAlphaInValue() + esp->getAlphaIncRate() * ptcl->mTime); + } else if (ptcl->mTime > esp->getAlphaOutTiming()) { + alpha = ((ptcl->mTime - esp->getAlphaOutTiming()) * esp->getAlphaDecRate() + + esp->getAlphaBaseValue()); + } else { + alpha = esp->getAlphaBaseValue(); + } + s32 theta = ptcl->mAlphaWaveRandom * ptcl->mAge * 16384.0f * (1.0f - esp->getAlphaFreq()); + f32 wave = JMASSin(theta); + alpha *= (1.0f + esp->getAlphaAmp() * (wave - 1.0f) * 0.5f) * 255.0f; + OSf32tou8(&alpha, &ptcl->mPrmColorAlphaAnm); +} + +/* 8027AD88-8027ADBC 2756C8 0034+00 0/0 1/1 0/0 .text __ct__13JPAExtraShapeFPCUc */ +JPAExtraShape::JPAExtraShape(u8 const* data) { + mpData = (const JPAExtraShapeData*)data; + init(); +} + +/* 8027ADBC-8027AEBC 2756FC 0100+00 1/1 0/0 0/0 .text init__13JPAExtraShapeFv */ +void JPAExtraShape::init() { + mAlphaIncRate = (getAlphaInTiming() != 0.0f) ? + (getAlphaBaseValue() - getAlphaInValue()) / getAlphaInTiming() : + 1.0f; + mAlphaDecRate = (getAlphaOutTiming() != 1.0f) ? + (getAlphaOutValue() - getAlphaBaseValue()) / (1.0f - getAlphaOutTiming()) : + 1.0f; + + if (getScaleInTiming() != 0.0f) { + mScaleIncRateX = (1.0f - getScaleInValueX()) / getScaleInTiming(); + mScaleIncRateY = (1.0f - getScaleInValueY()) / getScaleInTiming(); + } else { + mScaleIncRateX = mScaleIncRateY = 1.0f; + } + + if (getScaleOutTiming() != 1.0f) { + mScaleDecRateX = (getScaleOutValueX() - 1.0f) / (1.0f - getScaleOutTiming()); + mScaleDecRateY = (getScaleOutValueY() - 1.0f) / (1.0f - getScaleOutTiming()); + } else { + mScaleDecRateX = mScaleDecRateY = 1.0f; + } +} |
