Get the thing building again after Eggification

This commit is contained in:
robojumper
2025-04-27 09:57:42 +02:00
parent 73ebfb9fae
commit f83815457f
22 changed files with 395 additions and 408 deletions
+60 -60
View File
@@ -7,24 +7,25 @@
#include "JSystem/JParticle/JPAFieldBlock.h"
#include "JSystem/JParticle/JPAEmitter.h"
#include "JSystem/JParticle/JPAParticle.h"
#include "egg/math/eggVector.h"
/* 8027BDEC-8027BF18 27672C 012C+00 8/8 0/0 0/0 .text
* calcAffect__12JPAFieldBaseFP13JPAFieldBlockP15JPABaseParticle */
void JPAFieldBase::calcAffect(JPAFieldBlock* block, JPABaseParticle* ptcl) {
JGeometry::TVec3<f32> vec = mAccel;
EGG::Vector3f vec = mAccel;
if (!ptcl->checkStatus(4) && block->checkStatus(0x78)) {
vec.scale(calcFadeAffect(block, ptcl->mTime));
vec *= calcFadeAffect(block, ptcl->mTime);
}
switch (block->getAddType()) {
case 0:
ptcl->mVelType0.add(vec);
ptcl->mVelType0 += vec;
break;
case 1:
ptcl->mVelType1.add(vec);
ptcl->mVelType1 += vec;
break;
case 2:
ptcl->mVelType2.add(vec);
ptcl->mVelType2 += vec;
break;
}
}
@@ -49,10 +50,10 @@ f32 JPAFieldBase::calcFadeAffect(JPAFieldBlock* block, f32 time) const {
* prepare__15JPAFieldGravityFP18JPAEmitterWorkDataP13JPAFieldBlock */
void JPAFieldGravity::prepare(JPAEmitterWorkData* work, JPAFieldBlock* block) {
if (block->checkStatus(2)) {
mAccel.scale(block->getMag(), block->getDir());
mAccel = block->getMag() * block->getDir();
} else {
MTXMultVecSR(work->mRotationMtx, &block->getDir(), &mAccel);
mAccel.scale(block->getMag());
MTXMultVecSR(work->mRotationMtx, block->getDir(), mAccel);
mAccel *= block->getMag();
}
}
@@ -65,13 +66,13 @@ void JPAFieldGravity::calc(JPAEmitterWorkData* work, JPAFieldBlock* block, JPABa
/* 8027C07C-8027C1B8 2769BC 013C+00 1/0 0/0 0/0 .text
* prepare__11JPAFieldAirFP18JPAEmitterWorkDataP13JPAFieldBlock */
void JPAFieldAir::prepare(JPAEmitterWorkData* work, JPAFieldBlock* block) {
JGeometry::TVec3<f32> vec;
vec.normalize(block->getDir());
EGG::Vector3f vec = block->getDir();
vec.normalise();
if (block->checkStatus(2)) {
mAccel.scale(block->getMag(), vec);
mAccel = block->getMag() * vec;
} else {
MTXMultVecSR(work->mRotationMtx, vec, mAccel);
mAccel.scale(block->getMag());
mAccel *= block->getMag();
}
}
@@ -82,7 +83,7 @@ void JPAFieldAir::calc(JPAEmitterWorkData* work, JPAFieldBlock* block, JPABasePa
if (block->checkStatus(4)) {
f32 len = ptcl->mVelType1.length();
if (len > block->getMagRndm()) {
ptcl->mVelType1.scale(block->getMagRndm() / len);
ptcl->mVelType1 *= block->getMagRndm() / len;
}
}
}
@@ -90,14 +91,14 @@ void JPAFieldAir::calc(JPAEmitterWorkData* work, JPAFieldBlock* block, JPABasePa
/* 8027C24C-8027C29C 276B8C 0050+00 1/0 0/0 0/0 .text
* prepare__14JPAFieldMagnetFP18JPAEmitterWorkDataP13JPAFieldBlock */
void JPAFieldMagnet::prepare(JPAEmitterWorkData* work, JPAFieldBlock* block) {
mDir.sub(block->getPos(), work->mEmitterPos);
MTXMultVecSR(work->mRotationMtx, &mDir, &mDir);
mDir = block->getPos() - work->mEmitterPos;
MTXMultVecSR(work->mRotationMtx, mDir, mDir);
}
/* 8027C29C-8027C36C 276BDC 00D0+00 1/0 0/0 0/0 .text
* calc__14JPAFieldMagnetFP18JPAEmitterWorkDataP13JPAFieldBlockP15JPABaseParticle */
void JPAFieldMagnet::calc(JPAEmitterWorkData* work, JPAFieldBlock* block, JPABaseParticle* ptcl) {
mAccel.sub(mDir, ptcl->mLocalPosition);
mAccel = mDir - ptcl->mLocalPosition;
mAccel.setLength(block->getMag());
calcAffect(block, ptcl);
}
@@ -105,16 +106,16 @@ void JPAFieldMagnet::calc(JPAEmitterWorkData* work, JPAFieldBlock* block, JPABas
/* 8027C36C-8027C3E0 276CAC 0074+00 1/0 0/0 0/0 .text
* prepare__14JPAFieldNewtonFP18JPAEmitterWorkDataP13JPAFieldBlock */
void JPAFieldNewton::prepare(JPAEmitterWorkData* work, JPAFieldBlock* block) {
mDir.sub(block->getPos(), work->mEmitterPos);
MTXMultVecSR(work->mRotationMtx, &mDir, &mDir);
mDir = block->getPos() - work->mEmitterPos;
MTXMultVecSR(work->mRotationMtx, mDir, mDir);
mCutoff = block->getVal1() * block->getVal1();
}
/* 8027C3E0-8027C56C 276D20 018C+00 1/0 0/0 0/0 .text
* calc__14JPAFieldNewtonFP18JPAEmitterWorkDataP13JPAFieldBlockP15JPABaseParticle */
void JPAFieldNewton::calc(JPAEmitterWorkData* work, JPAFieldBlock* block, JPABaseParticle* ptcl) {
mAccel.sub(mDir, ptcl->mLocalPosition);
f32 len_sq = mAccel.squared();
mAccel = mDir - ptcl->mLocalPosition;
f32 len_sq = mAccel.squaredLength();
if (len_sq > mCutoff) {
mAccel.setLength(mCutoff * (block->getMag() * 10.0f) / len_sq);
} else {
@@ -126,8 +127,8 @@ void JPAFieldNewton::calc(JPAEmitterWorkData* work, JPAFieldBlock* block, JPABas
/* 8027C56C-8027C674 276EAC 0108+00 1/0 0/0 0/0 .text
* prepare__14JPAFieldVortexFP18JPAEmitterWorkDataP13JPAFieldBlock */
void JPAFieldVortex::prepare(JPAEmitterWorkData* work, JPAFieldBlock* block) {
MTXMultVecSR(work->mGlobalRot, &block->getDir(), &field_0x10);
field_0x10.normalize();
PSMTXMultVecSR(work->mGlobalRot, block->getDir(), field_0x10);
field_0x10.normalise();
field_0x1c = block->getPos().z * block->getPos().z;
field_0x20 = 1.0f / field_0x1c;
}
@@ -135,48 +136,47 @@ void JPAFieldVortex::prepare(JPAEmitterWorkData* work, JPAFieldBlock* block) {
/* 8027C674-8027C814 276FB4 01A0+00 1/0 0/0 0/0 .text
* calc__14JPAFieldVortexFP18JPAEmitterWorkDataP13JPAFieldBlockP15JPABaseParticle */
void JPAFieldVortex::calc(JPAEmitterWorkData* work, JPAFieldBlock* block, JPABaseParticle* ptcl) {
JGeometry::TVec3<f32> vec;
vec.scale(field_0x10.dot(ptcl->mLocalPosition), field_0x10);
vec.sub(ptcl->mLocalPosition, vec);
f32 mag = vec.squared();
EGG::Vector3f vec;
vec = ptcl->mLocalPosition - field_0x10.dot(ptcl->mLocalPosition) * field_0x10;
f32 mag = vec.squaredLength();
if (mag > field_0x1c) {
mag = block->getMagRndm();
} else {
mag *= field_0x20;
mag = (1.0f - mag) * block->getMag() + mag * block->getMagRndm();
}
vec.normalize();
mAccel.cross(vec, field_0x10);
mAccel.scale(mag);
vec.normalise();
mAccel = vec.cross(field_0x10);
mAccel *= mag;
calcAffect(block, ptcl);
}
/* 8027C814-8027CA94 277154 0280+00 1/0 0/0 0/0 .text
* prepare__18JPAFieldConvectionFP18JPAEmitterWorkDataP13JPAFieldBlock */
void JPAFieldConvection::prepare(JPAEmitterWorkData* work, JPAFieldBlock* block) {
JGeometry::TVec3<f32> vec1, vec2;
vec2.cross(block->getPos(), block->getDir());
vec1.cross(block->getDir(), vec2);
MTXMultVecSR(work->mGlobalRot, &vec1, &field_0x10);
MTXMultVecSR(work->mGlobalRot, &block->getDir(), field_0x1c);
MTXMultVecSR(work->mGlobalRot, &vec2, &field_0x28);
field_0x10.normalize();
field_0x1c.normalize();
field_0x28.normalize();
EGG::Vector3f vec1, vec2;
vec2 = block->getPos().cross(block->getDir());
vec1 = block->getDir().cross(vec2);
MTXMultVecSR(work->mGlobalRot, vec1, field_0x10);
MTXMultVecSR(work->mGlobalRot, block->getDir(), field_0x1c);
MTXMultVecSR(work->mGlobalRot, vec2, field_0x28);
field_0x10.normalise();
field_0x1c.normalise();
field_0x28.normalise();
}
/* 8027CA94-8027CCCC 2773D4 0238+00 1/0 0/0 0/0 .text
* calc__18JPAFieldConvectionFP18JPAEmitterWorkDataP13JPAFieldBlockP15JPABaseParticle */
void JPAFieldConvection::calc(JPAEmitterWorkData* work, JPAFieldBlock* block,
JPABaseParticle* ptcl) {
JGeometry::TVec3<f32> vec1, vec2, vec3;
vec1.scale(field_0x10.dot(ptcl->mLocalPosition), field_0x10);
vec3.scale(field_0x28.dot(ptcl->mLocalPosition), field_0x28);
vec1.add(vec3);
EGG::Vector3f vec1, vec2, vec3;
vec1 = field_0x10.dot(ptcl->mLocalPosition) * field_0x10;
vec3 = field_0x28.dot(ptcl->mLocalPosition) * field_0x28;
vec1 += vec3;
vec1.setLength(vec1, block->getVal1());
vec2.sub(ptcl->mLocalPosition, vec1);
vec3.cross(field_0x1c, vec1);
mAccel.cross(vec3, vec2);
vec2 = ptcl->mLocalPosition - vec1;
vec3 = field_0x1c.cross(vec1);
mAccel = vec3.cross(vec2);
mAccel.setLength(block->getMag());
calcAffect(block, ptcl);
}
@@ -187,7 +187,7 @@ void JPAFieldRandom::calc(JPAEmitterWorkData* work, JPAFieldBlock* block, JPABas
if (ptcl->mAge == 0 || (block->getCycle() != 0 && ptcl->mAge % block->getCycle() == 0)) {
JPABaseEmitter* emtr = work->mpEmtr;
mAccel.set(emtr->get_r_zh(), emtr->get_r_zh(), emtr->get_r_zh());
mAccel.scale(block->getMag());
mAccel *= block->getMag();
calcAffect(block, ptcl);
}
}
@@ -206,11 +206,11 @@ void JPAFieldDrag::calc(JPAEmitterWorkData* work, JPAFieldBlock* block, JPABaseP
/* 8027CE64-8027CFA8 2777A4 0144+00 1/0 0/0 0/0 .text
* prepare__12JPAFieldSpinFP18JPAEmitterWorkDataP13JPAFieldBlock */
void JPAFieldSpin::prepare(JPAEmitterWorkData* work, JPAFieldBlock* block) {
JGeometry::TVec3<f32> axis;
MTXMultVecSR(work->mGlobalRot, &block->getDir(), &axis);
axis.normalize();
EGG::Vector3f axis;
MTXMultVecSR(work->mGlobalRot, block->getDir(), axis);
axis.normalise();
Mtx mtx;
MTXRotAxisRad(mtx, &axis, block->getMag());
MTXRotAxisRad(mtx, axis, block->getMag());
field_0x10.set(mtx[0][0], mtx[1][0], mtx[2][0]);
field_0x1c.set(mtx[0][1], mtx[1][1], mtx[2][1]);
field_0x28.set(mtx[0][2], mtx[1][2], mtx[2][2]);
@@ -231,7 +231,7 @@ void JPAFieldSpin::calc(JPAEmitterWorkData* work, JPAFieldBlock* block, JPABaseP
mtx[2][2] = field_0x28.z;
mtx[0][3] = mtx[1][3] = mtx[2][3] = 0.0f;
Vec vec;
MTXMultVecSR(mtx, &ptcl->mLocalPosition, &vec);
MTXMultVecSR(mtx, ptcl->mLocalPosition, &vec);
mAccel.set(vec.x - ptcl->mLocalPosition.x, vec.y - ptcl->mLocalPosition.y,
vec.z - ptcl->mLocalPosition.z);
calcAffect(block, ptcl);
@@ -266,31 +266,31 @@ void JPAFieldBlock::init(EGG::Heap* heap) {
switch (getType()) {
case FIELD_GRAVITY:
mpField = new (heap, 0) JPAFieldGravity();
mpField = new (heap, 4) JPAFieldGravity();
break;
case FIELD_AIR:
mpField = new (heap, 0) JPAFieldAir();
mpField = new (heap, 4) JPAFieldAir();
break;
case FIELD_MAGNET:
mpField = new (heap, 0) JPAFieldMagnet();
mpField = new (heap, 4) JPAFieldMagnet();
break;
case FIELD_NEWTON:
mpField = new (heap, 0) JPAFieldNewton();
mpField = new (heap, 4) JPAFieldNewton();
break;
case FIELD_VORTEX:
mpField = new (heap, 0) JPAFieldVortex();
mpField = new (heap, 4) JPAFieldVortex();
break;
case FIELD_RANDOM:
mpField = new (heap, 0) JPAFieldRandom();
mpField = new (heap, 4) JPAFieldRandom();
break;
case FIELD_DRAG:
mpField = new (heap, 0) JPAFieldDrag();
mpField = new (heap, 4) JPAFieldDrag();
break;
case FIELD_CONVECTION:
mpField = new (heap, 0) JPAFieldConvection();
mpField = new (heap, 4) JPAFieldConvection();
break;
case FIELD_SPIN:
mpField = new (heap, 0) JPAFieldSpin();
mpField = new (heap, 4) JPAFieldSpin();
break;
default:
mpField = NULL;