summaryrefslogtreecommitdiff
path: root/src/JSystem/JParticle/JPAExtraShape.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/JSystem/JParticle/JPAExtraShape.cpp')
-rw-r--r--src/JSystem/JParticle/JPAExtraShape.cpp152
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;
+ }
+}