summaryrefslogtreecommitdiff
path: root/src/JSystem/JParticle/JPAMath.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/JSystem/JParticle/JPAMath.cpp')
-rw-r--r--src/JSystem/JParticle/JPAMath.cpp182
1 files changed, 182 insertions, 0 deletions
diff --git a/src/JSystem/JParticle/JPAMath.cpp b/src/JSystem/JParticle/JPAMath.cpp
new file mode 100644
index 00000000..c8686038
--- /dev/null
+++ b/src/JSystem/JParticle/JPAMath.cpp
@@ -0,0 +1,182 @@
+//
+// Generated By: dol2asm
+// Translation Unit: JPAMath
+//
+
+#include "JSystem/JParticle/JPAMath.h"
+#include "JSystem/JMath/JMATrigonometric.h"
+#include "JSystem/J2DGraph/J2DAnimation.h"
+
+//
+// Types:
+//
+
+//
+// Forward References:
+//
+
+extern "C" void func_80280588();
+extern "C" void JPAGetYZRotateMtx__FssPA4_f();
+extern "C" void JPAGetXYZRotateMtx__FsssPA4_f();
+extern "C" void func_802807E0();
+extern "C" void func_80280808();
+extern "C" void JPACalcKeyAnmValue__FfUsPCf();
+
+//
+// External References:
+//
+
+extern "C" void _savegpr_28();
+extern "C" void _restgpr_28();
+extern "C" u8 sincosTable___5JMath[65536];
+
+//
+// Declarations:
+//
+
+/* ############################################################################################## */
+// Probably some local function needed to change float literal order
+static f32 floatDummyFunc() {
+ return 1.0f;
+}
+
+/* 80280588-802806C0 27AEC8 0138+00 0/0 1/1 0/0 .text JPAGetDirMtx__FRCQ29JGeometry8TVec3<f>PA4_f
+ */
+void JPAGetDirMtx(JGeometry::TVec3<f32> const& param_0, f32 (*param_1)[4]) {
+ JGeometry::TVec3<float> local_78(param_0.y, -param_0.x, 0.0f);
+ f32 len = local_78.length();
+
+ if (len <= JGeometry::TUtil<f32>::epsilon()) {
+ local_78.zero();
+ } else {
+ local_78.scale(1.0f / len);
+ }
+ f32 xsquared = local_78.x * local_78.x;
+ f32 ysquared = local_78.y * local_78.y;
+ f32 xlen = local_78.x * len;
+ f32 ylen = local_78.y * len;
+ f32 fVar5 = (1.0f - param_0.z) * (local_78.x * local_78.y);
+ param_1[0][0] = xsquared + param_0.z * (1.0f - xsquared);
+ param_1[0][1] = fVar5;
+ param_1[0][2] = -ylen;
+ param_1[0][3] = 0.0f;
+ param_1[1][0] = fVar5;
+ param_1[1][1] = ysquared + param_0.z * (1.0f - ysquared);
+ param_1[1][2] = xlen;
+ param_1[1][3] = 0.0f;
+ param_1[2][0] = ylen;
+ param_1[2][1] = -xlen;
+ param_1[2][2] = param_0.z;
+ param_1[2][3] = 0.0f;
+}
+
+/* 802806C0-80280734 27B000 0074+00 0/0 1/1 0/0 .text JPAGetYZRotateMtx__FssPA4_f */
+void JPAGetYZRotateMtx(s16 angleY, s16 angleZ, f32 (*param_2)[4]) {
+ f32 cosy = JMASCos(angleY);
+ f32 cosz = JMASCos(angleZ);
+ f32 siny = JMASSin(angleY);
+ f32 sinz = JMASSin(angleZ);
+ param_2[0][0] = (cosy * cosz);
+ param_2[0][1] = -sinz;
+ param_2[0][2] = (siny * cosz);
+ param_2[1][0] = (cosy * sinz);
+ param_2[1][1] = cosz;
+ param_2[1][2] = (siny * sinz);
+ param_2[2][0] = -siny;
+ param_2[2][2] = cosy;
+ param_2[2][3] = 0.0f;
+ param_2[2][1] = 0.0f;
+ param_2[1][3] = 0.0f;
+ param_2[0][3] = 0.0f;
+}
+
+/* 80280734-802807E0 27B074 00AC+00 0/0 6/6 11/11 .text JPAGetXYZRotateMtx__FsssPA4_f */
+void JPAGetXYZRotateMtx(s16 x, s16 y, s16 z, Mtx mtx) {
+ f32 cosx = JMASCos(x);
+ f32 cosy = JMASCos(y);
+ f32 cosz = JMASCos(z);
+ f32 sinx = JMASSin(x);
+ f32 siny = JMASSin(y);
+ f32 sinz = JMASSin(z);
+ mtx[0][0] = cosy * cosz;
+ mtx[1][0] = cosy * sinz;
+ mtx[2][0] = -siny;
+ mtx[2][1] = sinx * cosy;
+ mtx[2][2] = cosx * cosy;
+ f32 cosxsinz = cosx * sinz;
+ f32 sinxcosz = sinx * cosz;
+ mtx[0][1] = sinxcosz * siny - cosxsinz;
+ mtx[1][2] = cosxsinz * siny - sinxcosz;
+ f32 sinxsinz = sinx * sinz;
+ f32 cosxcosz = cosx * cosz;
+ mtx[0][2] = sinxsinz + cosxcosz * siny;
+ mtx[1][1] = cosxcosz + sinxsinz * siny;
+ mtx[2][3] = 0.0f;
+ mtx[1][3] = 0.0f;
+ mtx[0][3] = 0.0f;
+}
+
+/* 802807E0-80280808 27B120 0028+00 0/0 11/11 71/71 .text
+ * JPASetRMtxTVecfromMtx__FPA4_CfPA4_fPQ29JGeometry8TVec3<f> */
+void JPASetRMtxTVecfromMtx(f32 const (*param_0)[4], f32 (*param_1)[4],
+ JGeometry::TVec3<f32>* param_2) {
+ JGeometry::TVec3<f32> dummy;
+ JPASetRMtxSTVecfromMtx(param_0, param_1, &dummy, param_2);
+}
+
+/* 80280808-80280984 27B148 017C+00 1/1 1/1 53/53 .text
+ * JPASetRMtxSTVecfromMtx__FPA4_CfPA4_fPQ29JGeometry8TVec3<f>PQ29JGeometry8TVec3<f> */
+void JPASetRMtxSTVecfromMtx(f32 const (*param_0)[4], f32 (*param_1)[4],
+ JGeometry::TVec3<f32>* param_2, JGeometry::TVec3<f32>* param_3) {
+ JGeometry::TVec3<float> aTStack_54;
+ aTStack_54.set(param_0[0][0], param_0[1][0], param_0[2][0]);
+ param_2->x = aTStack_54.length();
+ aTStack_54.set(param_0[0][1], param_0[1][1], param_0[2][1]);
+ param_2->y = aTStack_54.length();
+ aTStack_54.set(param_0[0][2], param_0[1][2], param_0[2][2]);
+ param_2->z = aTStack_54.length();
+ MTXIdentity(param_1);
+ if (param_2->x != 0.0f) {
+ f32 fVar5 = 1.0f / param_2->x;
+ param_1[0][0] = param_0[0][0] * fVar5;
+ param_1[1][0] = param_0[1][0] * fVar5;
+ param_1[2][0] = param_0[2][0] * fVar5;
+ }
+ if (param_2->y != 0.0f) {
+ f32 fVar5 = 1.0f / param_2->y;
+ param_1[0][1] = param_0[0][1] * fVar5;
+ param_1[1][1] = param_0[1][1] * fVar5;
+ param_1[2][1] = param_0[2][1] * fVar5;
+ }
+ if (param_2->z != 0.0f) {
+ f32 fVar5 = 1.0f / param_2->z;
+ param_1[0][2] = param_0[0][2] * fVar5;
+ param_1[1][2] = param_0[1][2] * fVar5;
+ param_1[2][2] = param_0[2][2] * fVar5;
+ }
+ param_3->set(param_0[0][3], param_0[1][3], param_0[2][3]);
+}
+
+/* 80280984-80280A48 27B2C4 00C4+00 0/0 2/1 0/0 .text JPACalcKeyAnmValue__FfUsPCf */
+f32 JPACalcKeyAnmValue(f32 param_0, u16 param_1, f32 const* param_2) {
+ if (param_0 < param_2[0]) {
+ return param_2[1];
+ }
+ int ind = param_1 - 1;
+ if (param_2[ind * 4] <= param_0) {
+ return param_2[ind * 4 + 1];
+ }
+ int x = param_1;
+ while (x > 1) {
+ u32 uVar3 = x / 2;
+ if (param_0 >= param_2[uVar3 * 4]) {
+ param_2 += uVar3 * 4;
+ x -= uVar3;
+ } else {
+ x = uVar3;
+ }
+ }
+ return JMAHermiteInterpolation(param_0, param_2[0], param_2[1],
+ param_2[3], param_2[4],
+ param_2[5], param_2[6]);
+}