mirror of
https://github.com/zeldaret/tww.git
synced 2026-06-23 00:29:57 -04:00
JPA work
This commit is contained in:
@@ -18,8 +18,6 @@ struct TRandom_fast_ {
|
||||
// due to the float constant, having this function inlined adds that float to data,
|
||||
// making it not match
|
||||
float get_ufloat_1(void) {
|
||||
// !@bug UB: in C++ it's not legal to read from an union member other
|
||||
// than the last one that was written to.
|
||||
union {
|
||||
f32 f;
|
||||
u32 s;
|
||||
|
||||
@@ -12,7 +12,42 @@
|
||||
#include "dolphin/gx/GXStruct.h"
|
||||
#include "dolphin/mtx/mtx.h"
|
||||
|
||||
class JPADataBlockLinkInfo;
|
||||
class JPADynamicsBlock;
|
||||
class JPABaseShape;
|
||||
class JPAExtraShape;
|
||||
class JPASweepShape;
|
||||
class JPAExTexShape;
|
||||
class JPAKeyBlock;
|
||||
class JPAFieldBlock;
|
||||
|
||||
class JPADataBlockLinkInfo {
|
||||
public:
|
||||
JPAFieldBlock * getField() { return mpFieldBlock; }
|
||||
u8 getFieldNum() { return mFieldNum; }
|
||||
JPADynamicsBlock * getDynamics() { return mpDynamicsBlock; }
|
||||
JPASweepShape * getSweepShape() { return mpSweepShape; }
|
||||
u8 getKeyNum() { return mKeyNum; }
|
||||
JPAKeyBlock * getKey() { return mpKeyBlock; }
|
||||
JPAExtraShape * getExtraShape() { return mpExtraShape; }
|
||||
u32 * getTextureDataBase() { return mpTextureDataBase; }
|
||||
JPAExTexShape * getExTexShape() { return mpExTexShape; }
|
||||
JPABaseShape * getBaseShape() { return mpBaseShape; }
|
||||
u8 getTextureNum() { return mTextureNum; }
|
||||
|
||||
public:
|
||||
/* 0x00 */ JPADynamicsBlock * mpDynamicsBlock;
|
||||
/* 0x04 */ JPABaseShape * mpBaseShape;
|
||||
/* 0x08 */ JPAExtraShape * mpExtraShape;
|
||||
/* 0x0C */ JPASweepShape * mpSweepShape;
|
||||
/* 0x10 */ JPAExTexShape * mpExTexShape;
|
||||
/* 0x14 */ JPAKeyBlock * mpKeyBlock;
|
||||
/* 0x18 */ JPAFieldBlock * mpFieldBlock;
|
||||
/* 0x1C */ u32 * mpTextureDataBase;
|
||||
/* 0x20 */ u8 mFieldNum;
|
||||
/* 0x21 */ u8 mTextureNum;
|
||||
/* 0x22 */ u8 mKeyNum;
|
||||
/* 0x23 */ u8 field_0x23;
|
||||
};
|
||||
|
||||
enum {
|
||||
JPAEmtrStts_StopEmit = 0x01,
|
||||
@@ -48,6 +83,10 @@ public:
|
||||
};
|
||||
|
||||
struct JPAEmitterInfo {
|
||||
public:
|
||||
JPAEmitterInfo() : mRandom(0) {}
|
||||
~JPAEmitterInfo() {}
|
||||
|
||||
public:
|
||||
/* 0x000 */ JMath::TRandom_fast_ mRandom;
|
||||
/* 0x004 */ JPABaseEmitter * mpCurEmitter;
|
||||
@@ -59,7 +98,9 @@ public:
|
||||
/* 0x0D4 */ JGeometry::TVec3<f32> mEmitterTranslation;
|
||||
/* 0x0E0 */ JGeometry::TVec3<f32> mEmitterGlobalCenter;
|
||||
/* 0x0EC */ JGeometry::TVec3<f32> mPublicScale;
|
||||
/* 0x0F8 */ u8 field_0xf8[0x10c - 0xf8];
|
||||
/* 0x0F8 */ JGeometry::TVec3<f32> mgReRDir;
|
||||
/* 0x100 */ void* field_0x100;
|
||||
/* 0x104 */ void* field_0x104;
|
||||
/* 0x10C */ JGeometry::TVec3<f32> mVolumePos;
|
||||
/* 0x118 */ JGeometry::TVec3<f32> mVelOmni;
|
||||
/* 0x124 */ JGeometry::TVec3<f32> mVelAxis;
|
||||
@@ -94,13 +135,13 @@ public:
|
||||
void calcKey();
|
||||
void deleteParticle(JPABaseParticle*, JSUList<JPABaseParticle>*);
|
||||
void deleteAllParticle();
|
||||
void getPtclFromVacList();
|
||||
void doStartFrameProcess();
|
||||
void doTerminationProcess();
|
||||
JPABaseParticle* getPtclFromVacList();
|
||||
bool doStartFrameProcess();
|
||||
bool doTerminationProcess();
|
||||
void calcEmitterGlobalPosition(JGeometry::TVec3<float>&);
|
||||
void calcgReRDirection();
|
||||
void getPivotX();
|
||||
void getPivotY();
|
||||
u32 getPivotX();
|
||||
u32 getPivotY();
|
||||
|
||||
void setStatus(u32 status) { mFlags |= status; }
|
||||
void clearStatus(u32 status) { mFlags &= ~status; }
|
||||
@@ -111,6 +152,7 @@ public:
|
||||
return mActiveParticles.getNumLinks() + mChildParticles.getNumLinks();
|
||||
}
|
||||
|
||||
JPADataBlockLinkInfo * getEmitterDataBlockInfoPtr() const { return mpDataLinkInfo; }
|
||||
bool isEnableDeleteEmitter() { return checkStatus(JPAEmtrStts_EnableDeleteEmitter) && getParticleNumber() == 0; }
|
||||
|
||||
u8 getGlobalAlpha() { return mGlobalPrmColor.a; }
|
||||
@@ -189,8 +231,8 @@ public:
|
||||
/* 0x060 */ s32 mMaxFrame;
|
||||
/* 0x064 */ s16 mLifeTime;
|
||||
/* 0x066 */ s16 mStartFrame;
|
||||
/* 0x068 */ s16 mVolumeSize;
|
||||
/* 0x06A */ s16 mDivNumber;
|
||||
/* 0x068 */ u16 mVolumeSize;
|
||||
/* 0x06A */ u16 mDivNumber;
|
||||
/* 0x06C */ f32 mInitialVelOmni;
|
||||
/* 0x070 */ f32 mInitialVelAxis;
|
||||
/* 0x074 */ f32 mInitialVelDir;
|
||||
@@ -205,8 +247,8 @@ public:
|
||||
/* 0x164 */ f32 mTick;
|
||||
/* 0x168 */ f32 mTime;
|
||||
/* 0x16C */ JPAFieldManager mFieldManager;
|
||||
/* 0x17C */ JSUPtrList mActiveParticles;
|
||||
/* 0x188 */ JSUPtrList mChildParticles;
|
||||
/* 0x17C */ JSUList<JPABaseParticle> mActiveParticles;
|
||||
/* 0x188 */ JSUList<JPABaseParticle> mChildParticles;
|
||||
/* 0x194 */ JSUPtrList* mpPtclVacList;
|
||||
/* 0x198 */ JPADataBlockLinkInfo* mpDataLinkInfo;
|
||||
/* 0x19C */ JPACallBackBase<JPABaseEmitter*>* mpEmitterCallBack;
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
#ifndef JPAEXTRASHAPE_H
|
||||
#define JPAEXTRASHAPE_H
|
||||
|
||||
#include "JSystem/JParticle/JPAParticle.h"
|
||||
|
||||
class JPAExtraShape {
|
||||
public:
|
||||
virtual ~JPAExtraShape() {};
|
||||
virtual void isEnableScale() = 0;
|
||||
virtual void isDiffXY() = 0;
|
||||
virtual void isEnableScaleAnmX() = 0;
|
||||
virtual void isEnableScaleAnmY() = 0;
|
||||
virtual void isEnableScaleBySpeedX() = 0;
|
||||
virtual void isEnableScaleBySpeedY() = 0;
|
||||
virtual void getScaleInTiming() = 0;
|
||||
virtual void getScaleOutTiming() = 0;
|
||||
virtual void getScaleInValueX() = 0;
|
||||
virtual void getScaleInValueY() = 0;
|
||||
virtual void getAnmTypeX() = 0;
|
||||
virtual void getAnmTypeY() = 0;
|
||||
virtual void getAnmCycleX() = 0;
|
||||
virtual void getAnmCycleY() = 0;
|
||||
virtual void getIncreaseRateX() = 0;
|
||||
virtual void getIncreaseRateY() = 0;
|
||||
virtual void getDecreaseRateX() = 0;
|
||||
virtual void getDecreaseRateY() = 0;
|
||||
virtual u32 getPivotX() = 0;
|
||||
virtual u32 getPivotY() = 0;
|
||||
virtual void getRandomScale() = 0;
|
||||
virtual void isEnableAlpha() = 0;
|
||||
virtual void isEnableSinWave() = 0;
|
||||
virtual void getAlphaInTiming() = 0;
|
||||
virtual void getAlphaOutTiming() = 0;
|
||||
virtual void getAlphaInValue() = 0;
|
||||
virtual void getAlphaBaseValue() = 0;
|
||||
virtual void getAlphaWaveType() = 0;
|
||||
virtual void getAlphaWaveParam1() = 0;
|
||||
virtual void getAlphaWaveParam2() = 0;
|
||||
virtual void getAlphaWaveParam3() = 0;
|
||||
virtual void getAlphaWaveRandom() = 0;
|
||||
virtual void getAlphaIncreaseRate() = 0;
|
||||
virtual void getAlphaDecreaseRate() = 0;
|
||||
virtual void isEnableRotate() = 0;
|
||||
virtual void getRotateAngle() = 0;
|
||||
virtual void getRotateSpeed() = 0;
|
||||
virtual void getRotateRandomAngle() = 0;
|
||||
virtual void getRotateRandomSpeed() = 0;
|
||||
virtual void getRotateDirection() = 0;
|
||||
};
|
||||
|
||||
#endif /* JPAEXTRASHAPE_H */
|
||||
@@ -1,11 +1,12 @@
|
||||
#ifndef JPAFIELD_H
|
||||
#define JPAFIELD_H
|
||||
|
||||
#include "JSystem/JParticle/JPAParticle.h"
|
||||
#include "JSystem/JSupport/JSUList.h"
|
||||
|
||||
class JPADataBlockLinkInfo;
|
||||
class JPAEmitterInfo;
|
||||
class JPAFieldData;
|
||||
class JPABaseParticle;
|
||||
|
||||
class JPAFieldManager {
|
||||
public:
|
||||
|
||||
@@ -28,13 +28,13 @@ public:
|
||||
void incFrame();
|
||||
void calcVelocity();
|
||||
void calcPosition();
|
||||
void checkCreateChild();
|
||||
bool checkCreateChild();
|
||||
|
||||
~JPABaseParticle();
|
||||
JPABaseParticle();
|
||||
|
||||
public:
|
||||
/* 0x00 */ JSUPtrLink mLink;
|
||||
/* 0x00 */ JSULink<JPABaseParticle> mLink;
|
||||
/* 0x10 */ JGeometry::TVec3<f32> mGlobalPosition;
|
||||
/* 0x1C */ JGeometry::TVec3<f32> mLocalPosition;
|
||||
/* 0x28 */ JGeometry::TVec3<f32> mPosition;
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
#ifndef JPASWEEPSHAPE_H
|
||||
#define JPASWEEPSHAPE_H
|
||||
|
||||
#include "JSystem/JParticle/JPAParticle.h"
|
||||
|
||||
class JPASweepShape {
|
||||
public:
|
||||
virtual ~JPASweepShape() {};
|
||||
virtual void getType() = 0;
|
||||
virtual void getDirType() = 0;
|
||||
virtual void getRotType() = 0;
|
||||
virtual void getBasePlaneType() = 0;
|
||||
virtual void getLife() = 0;
|
||||
virtual s16 getRate() = 0;
|
||||
virtual void getTiming() = 0;
|
||||
virtual void getStep() = 0;
|
||||
virtual void getPosRndm() = 0;
|
||||
virtual void getVelInfRate() = 0;
|
||||
virtual void getBaseVel() = 0;
|
||||
virtual void getBaseVelRndm() = 0;
|
||||
virtual void getGravity() = 0;
|
||||
virtual void isEnableField() = 0;
|
||||
virtual void isEnableDrawParent() = 0;
|
||||
virtual void isClipOn() = 0;
|
||||
virtual void isEnableScaleOut() = 0;
|
||||
virtual void isEnableAlphaOut() = 0;
|
||||
virtual void isEnableRotate() = 0;
|
||||
virtual void isInheritedScale() = 0;
|
||||
virtual void isInheritedAlpha() = 0;
|
||||
virtual void isInheritedRGB() = 0;
|
||||
virtual void getTextureIndex() = 0;
|
||||
virtual void getScaleX() = 0;
|
||||
virtual void getScaleY() = 0;
|
||||
virtual void getPrm() = 0;
|
||||
virtual void getEnv() = 0;
|
||||
virtual void getPrmAlpha() = 0;
|
||||
virtual void getEnvAlpha() = 0;
|
||||
virtual void getRotateSpeed() = 0;
|
||||
virtual void getInheritScale() = 0;
|
||||
virtual void getInheritAlpha() = 0;
|
||||
virtual void getInheritRGB() = 0;
|
||||
};
|
||||
|
||||
#endif /* JPASWEEPSHAPE_H */
|
||||
@@ -4,11 +4,27 @@
|
||||
//
|
||||
|
||||
#include "JSystem/JParticle/JPAEmitter.h"
|
||||
#include "dolphin/types.h"
|
||||
#include "JSystem/JParticle/JPAExtraShape.h"
|
||||
#include "JSystem/JParticle/JPASweepShape.h"
|
||||
#include "dolphin/mtx/mtx.h"
|
||||
#include "dolphin/mtx/mtxvec.h"
|
||||
|
||||
JPAEmitterInfo JPABaseEmitter::emtrInfo;
|
||||
|
||||
/* 8025C128-8025C254 .text calcVolumePoint__14JPABaseEmitterFv */
|
||||
void JPABaseEmitter::calcVolumePoint() {
|
||||
/* Nonmatching */
|
||||
emtrInfo.mVolumePos.z = 0.0f;
|
||||
emtrInfo.mVolumePos.y = 0.0f;
|
||||
emtrInfo.mVolumePos.x = 0.0f;
|
||||
|
||||
emtrInfo.mVelOmni.z = mRandomSeed.get_ufloat_1() - 0.5f;
|
||||
emtrInfo.mVelOmni.y = mRandomSeed.get_ufloat_1() - 0.5f;
|
||||
emtrInfo.mVelOmni.x = mRandomSeed.get_ufloat_1() - 0.5f;
|
||||
|
||||
emtrInfo.mVelAxis.x = mRandomSeed.get_ufloat_1() - 0.5f;
|
||||
emtrInfo.mVelAxis.y = 0.0f;
|
||||
emtrInfo.mVelAxis.z = mRandomSeed.get_ufloat_1() - 0.5f;
|
||||
}
|
||||
|
||||
/* 8025C254-8025C394 .text calcVolumeLine__14JPABaseEmitterFv */
|
||||
@@ -49,11 +65,64 @@ void JPABaseEmitter::create(JPADataBlockLinkInfo*) {
|
||||
/* 8025D0B0-8025D294 .text calcEmitterInfo__14JPABaseEmitterFv */
|
||||
void JPABaseEmitter::calcEmitterInfo() {
|
||||
/* Nonmatching */
|
||||
emtrInfo.mpCurEmitter = this;
|
||||
emtrInfo.mVolumeEmitXCount = 0;
|
||||
emtrInfo.mVolumeEmitAngleCount = 0;
|
||||
emtrInfo.mVolumeEmitAngleMax = 1;
|
||||
emtrInfo.mDivNumber = mDivNumber * 2 + 1;
|
||||
emtrInfo.mVolumeSize = mVolumeSize;
|
||||
|
||||
Mtx mtxScale, mtxRot, mtx;
|
||||
MTXScale(mtxScale, mEmitterScale.x, mEmitterScale.y, mEmitterScale.z);
|
||||
JPAGetXYZRotateMtx((mEmitterRot.x << 14) / 0x5a, (mEmitterRot.y << 14) / 0x5a, (mEmitterRot.z << 14) / 0x5a, mtxRot);
|
||||
|
||||
MTXScale(mtx, mGlobalDynamicsScale.x, mGlobalDynamicsScale.y, mGlobalDynamicsScale.z);
|
||||
MTXConcat(mGlobalRotation, mtx, mtx);
|
||||
mtx[0][3] = mGlobalTranslation.x;
|
||||
mtx[1][3] = mGlobalTranslation.y;
|
||||
mtx[2][3] = mGlobalTranslation.z;
|
||||
MTXCopy(mGlobalRotation, emtrInfo.mGlobalRot);
|
||||
MTXConcat(mGlobalRotation, mtxRot, emtrInfo.mEmitterGlobalRot);
|
||||
MTXConcat(emtrInfo.mEmitterGlobalRot, mtxScale, emtrInfo.mEmitterGlobalSR);
|
||||
JPAGetDirMtx(mEmitterDir, emtrInfo.mEmitterDirMtx);
|
||||
emtrInfo.mEmitterGlobalScale.x = mEmitterScale.x * mGlobalDynamicsScale.x;
|
||||
emtrInfo.mEmitterGlobalScale.y = mEmitterScale.y * mGlobalDynamicsScale.y;
|
||||
emtrInfo.mEmitterGlobalScale.z = mEmitterScale.z * mGlobalDynamicsScale.z;
|
||||
emtrInfo.mEmitterTranslation.x = mEmitterTranslation.x;
|
||||
emtrInfo.mEmitterTranslation.y = mEmitterTranslation.y;
|
||||
emtrInfo.mEmitterTranslation.z = mEmitterTranslation.z;
|
||||
emtrInfo.mPublicScale.x = mGlobalDynamicsScale.x * 1.0f;
|
||||
emtrInfo.mPublicScale.y = mGlobalDynamicsScale.y * 1.0f;
|
||||
emtrInfo.mPublicScale.z = mGlobalDynamicsScale.z * 1.0f;
|
||||
MTXMultVec(mtx, &mEmitterTranslation, emtrInfo.mEmitterGlobalCenter);
|
||||
}
|
||||
|
||||
/* 8025D294-8025D3C0 .text calc__14JPABaseEmitterFv */
|
||||
void JPABaseEmitter::calc() {
|
||||
/* Nonmatching */
|
||||
emtrInfo.mVolumeEmitCount = 0;
|
||||
if (!checkStatus(JPAEmtrStts_StopCalc)) {
|
||||
calcKey();
|
||||
if (mpEmitterCallBack != NULL)
|
||||
mpEmitterCallBack->execute(this);
|
||||
calcEmitterInfo();
|
||||
mDraw.calc();
|
||||
mFieldManager.preCalc();
|
||||
if (!checkStatus(JPAEmtrStts_EnableDeleteEmitter))
|
||||
calcCreatePtcls();
|
||||
if (mpEmitterCallBack != NULL)
|
||||
mpEmitterCallBack->executeAfter(this);
|
||||
calcParticle();
|
||||
calcChild();
|
||||
mTick += 1.0f;
|
||||
if (mTick < 0.0f)
|
||||
mTick = 0.0f;
|
||||
} else {
|
||||
if (mpEmitterCallBack != NULL)
|
||||
mpEmitterCallBack->execute(this);
|
||||
if (mpEmitterCallBack != NULL)
|
||||
mpEmitterCallBack->executeAfter(this);
|
||||
}
|
||||
}
|
||||
|
||||
/* 8025D3C0-8025D5D4 .text calcCreatePtcls__14JPABaseEmitterFv */
|
||||
@@ -62,23 +131,81 @@ void JPABaseEmitter::calcCreatePtcls() {
|
||||
}
|
||||
|
||||
/* 8025D5D4-8025D670 .text createChildren__14JPABaseEmitterFP15JPABaseParticle */
|
||||
void JPABaseEmitter::createChildren(JPABaseParticle*) {
|
||||
/* Nonmatching */
|
||||
void JPABaseEmitter::createChildren(JPABaseParticle* ptcl) {
|
||||
s32 num = getEmitterDataBlockInfoPtr()->getSweepShape()->getRate();
|
||||
for (s32 i = 0; i < num; i++) {
|
||||
JPABaseParticle * chld = getPtclFromVacList();
|
||||
if (chld == NULL)
|
||||
break;
|
||||
mChildParticles.prepend(&chld->mLink);
|
||||
chld->initChild(ptcl);
|
||||
mDraw.initChild(ptcl, chld);
|
||||
}
|
||||
}
|
||||
|
||||
/* 8025D670-8025D6E0 .text createParticle__14JPABaseEmitterFv */
|
||||
void JPABaseEmitter::createParticle() {
|
||||
/* Nonmatching */
|
||||
JPABaseParticle * JPABaseEmitter::createParticle() {
|
||||
/* Nonmatching - PTMF */
|
||||
JPABaseParticle * ptcl = getPtclFromVacList();
|
||||
if (ptcl != NULL) {
|
||||
mActiveParticles.prepend(&ptcl->mLink);
|
||||
ptcl->initParticle();
|
||||
mDraw.initParticle(ptcl);
|
||||
}
|
||||
return ptcl;
|
||||
}
|
||||
|
||||
/* 8025D6E0-8025D7E0 .text calcParticle__14JPABaseEmitterFv */
|
||||
void JPABaseEmitter::calcParticle() {
|
||||
/* Nonmatching */
|
||||
for (JSULink<JPABaseParticle> * link = mActiveParticles.getFirst(); link != NULL;) {
|
||||
JSULink<JPABaseParticle> * next = link->getNext();
|
||||
JPABaseParticle * ptcl = (JPABaseParticle *) link->getObjectPtr();
|
||||
ptcl->incFrame();
|
||||
if (!(ptcl->mStatus & 0x80)) {
|
||||
ptcl->calcVelocity();
|
||||
if (ptcl->mpCallBack2 != NULL)
|
||||
ptcl->mpCallBack2->execute(this, ptcl);
|
||||
if (!(ptcl->mStatus & 0x02)) {
|
||||
mDraw.calcParticle(ptcl);
|
||||
if (getEmitterDataBlockInfoPtr()->getSweepShape() != NULL && ptcl->checkCreateChild())
|
||||
createChildren(ptcl);
|
||||
ptcl->calcPosition();
|
||||
}
|
||||
} else {
|
||||
ptcl->mStatus |= 0x02;
|
||||
}
|
||||
|
||||
if (ptcl->mStatus & 0x02)
|
||||
deleteParticle(ptcl, &mActiveParticles);
|
||||
|
||||
link = next;
|
||||
}
|
||||
}
|
||||
|
||||
/* 8025D7E0-8025D8CC .text calcChild__14JPABaseEmitterFv */
|
||||
void JPABaseEmitter::calcChild() {
|
||||
/* Nonmatching */
|
||||
for (JSULink<JPABaseParticle> * link = mChildParticles.getFirst(); link != NULL;) {
|
||||
JSULink<JPABaseParticle> * next = link->getNext();
|
||||
JPABaseParticle * ptcl = (JPABaseParticle *) link->getObjectPtr();
|
||||
ptcl->incFrame();
|
||||
if (!(ptcl->mStatus & 0x80)) {
|
||||
if ((s32)ptcl->mCurFrame != 0)
|
||||
ptcl->calcVelocity();
|
||||
if (ptcl->mpCallBack2 != NULL)
|
||||
ptcl->mpCallBack2->execute(this, ptcl);
|
||||
if (!(ptcl->mStatus & 0x02)) {
|
||||
mDraw.calcChild(ptcl);
|
||||
ptcl->calcPosition();
|
||||
}
|
||||
} else {
|
||||
ptcl->mStatus |= 0x02;
|
||||
}
|
||||
|
||||
if (ptcl->mStatus & 0x02)
|
||||
deleteParticle(ptcl, &mChildParticles);
|
||||
|
||||
link = next;
|
||||
}
|
||||
}
|
||||
|
||||
/* 8025D8CC-8025DA90 .text calcKey__14JPABaseEmitterFv */
|
||||
@@ -87,51 +214,103 @@ void JPABaseEmitter::calcKey() {
|
||||
}
|
||||
|
||||
/* 8025DA90-8025DAD8 .text deleteParticle__14JPABaseEmitterFP15JPABaseParticleP26JSUList<15JPABaseParticle> */
|
||||
void JPABaseEmitter::deleteParticle(JPABaseParticle*, JSUList<JPABaseParticle>*) {
|
||||
/* Nonmatching */
|
||||
void JPABaseEmitter::deleteParticle(JPABaseParticle* ptcl, JSUList<JPABaseParticle>* list) {
|
||||
JSUPtrList * ptrlist = list;
|
||||
ptrlist->remove(&ptcl->mLink);
|
||||
mpPtclVacList->prepend(&ptcl->mLink);
|
||||
}
|
||||
|
||||
/* 8025DAD8-8025DB68 .text deleteAllParticle__14JPABaseEmitterFv */
|
||||
void JPABaseEmitter::deleteAllParticle() {
|
||||
/* Nonmatching */
|
||||
for (JSULink<JPABaseParticle>* link = mActiveParticles.getFirst(); link != NULL;) {
|
||||
JSULink<JPABaseParticle>* next = link->getNext();
|
||||
mActiveParticles.remove(link);
|
||||
mpPtclVacList->prepend(link);
|
||||
link = next;
|
||||
}
|
||||
|
||||
for (JSULink<JPABaseParticle>* link = mChildParticles.getFirst(); link != NULL;) {
|
||||
JSULink<JPABaseParticle>* next = link->getNext();
|
||||
mChildParticles.remove(link);
|
||||
mpPtclVacList->prepend(link);
|
||||
link = next;
|
||||
}
|
||||
}
|
||||
|
||||
/* 8025DB68-8025DBB4 .text getPtclFromVacList__14JPABaseEmitterFv */
|
||||
void JPABaseEmitter::getPtclFromVacList() {
|
||||
/* Nonmatching */
|
||||
JPABaseParticle * JPABaseEmitter::getPtclFromVacList() {
|
||||
JPABaseParticle * ptcl = NULL;
|
||||
if (mpPtclVacList->getNumLinks() != 0) {
|
||||
ptcl = (JPABaseParticle*)mpPtclVacList->getFirstLink()->getObjectPtr();
|
||||
mpPtclVacList->remove(&ptcl->mLink);
|
||||
}
|
||||
return ptcl;
|
||||
}
|
||||
|
||||
/* 8025DBB4-8025DC2C .text doStartFrameProcess__14JPABaseEmitterFv */
|
||||
void JPABaseEmitter::doStartFrameProcess() {
|
||||
bool JPABaseEmitter::doStartFrameProcess() {
|
||||
/* Nonmatching */
|
||||
if (mTime >= mStartFrame)
|
||||
return true;
|
||||
|
||||
if (!checkStatus(JPAEmtrStts_StopCalc)) {
|
||||
mTime++;
|
||||
if (mTime < 0.0f)
|
||||
mTime = 0.0f;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/* 8025DC2C-8025DCDC .text doTerminationProcess__14JPABaseEmitterFv */
|
||||
void JPABaseEmitter::doTerminationProcess() {
|
||||
/* Nonmatching */
|
||||
bool JPABaseEmitter::doTerminationProcess() {
|
||||
if (mMaxFrame == 0) {
|
||||
return false;
|
||||
} else if (mMaxFrame < 0) {
|
||||
mFlags |= JPAEmtrStts_EnableDeleteEmitter;
|
||||
return getParticleNumber() == 0;
|
||||
} else if (mTick >= mMaxFrame) {
|
||||
mFlags |= JPAEmtrStts_EnableDeleteEmitter;
|
||||
if (mFlags & JPAEmtrStts_Immortal)
|
||||
return false;
|
||||
return getParticleNumber() == 0;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/* 8025DCDC-8025DD5C .text calcEmitterGlobalPosition__14JPABaseEmitterFRQ29JGeometry8TVec3<f> */
|
||||
void JPABaseEmitter::calcEmitterGlobalPosition(JGeometry::TVec3<float>&) {
|
||||
/* Nonmatching */
|
||||
void JPABaseEmitter::calcEmitterGlobalPosition(JGeometry::TVec3<float>& dst) {
|
||||
Mtx mtx;
|
||||
MTXScale(mtx, mGlobalDynamicsScale.x, mGlobalDynamicsScale.y, mGlobalDynamicsScale.z);
|
||||
MTXConcat(mGlobalRotation, mtx, mtx);
|
||||
mtx[0][3] = mGlobalTranslation.x;
|
||||
mtx[1][3] = mGlobalTranslation.y;
|
||||
mtx[2][3] = mGlobalTranslation.z;
|
||||
MTXMultVec(mtx, &mEmitterTranslation, dst);
|
||||
}
|
||||
|
||||
/* 8025DD5C-8025DDE8 .text calcgReRDirection__14JPABaseEmitterFv */
|
||||
void JPABaseEmitter::calcgReRDirection() {
|
||||
/* Nonmatching */
|
||||
// gReR = globalRotation emitterRotation
|
||||
Mtx mtx;
|
||||
JPAGetXYZRotateMtx((mEmitterRot.x << 14) / 0x5a, (mEmitterRot.y << 14) / 0x5a, (mEmitterRot.z << 14) / 0x5a, mtx);
|
||||
MTXConcat(mGlobalRotation, mtx, mtx);
|
||||
MTXMultVec(mtx, mEmitterDir, emtrInfo.mgReRDir);
|
||||
}
|
||||
|
||||
/* 8025DDE8-8025DE2C .text getPivotX__14JPABaseEmitterFv */
|
||||
void JPABaseEmitter::getPivotX() {
|
||||
/* Nonmatching */
|
||||
u32 JPABaseEmitter::getPivotX() {
|
||||
if (getEmitterDataBlockInfoPtr()->getExtraShape() != NULL)
|
||||
return getEmitterDataBlockInfoPtr()->getExtraShape()->getPivotX();
|
||||
else
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* 8025DE2C-8025DE70 .text getPivotY__14JPABaseEmitterFv */
|
||||
void JPABaseEmitter::getPivotY() {
|
||||
/* Nonmatching */
|
||||
}
|
||||
|
||||
/* 8025DEB8-8025DEF4 .text __dt__14JPAEmitterInfoFv */
|
||||
JPAEmitterInfo::~JPAEmitterInfo() {
|
||||
/* Nonmatching */
|
||||
u32 JPABaseEmitter::getPivotY() {
|
||||
if (getEmitterDataBlockInfoPtr()->getExtraShape() != NULL)
|
||||
return getEmitterDataBlockInfoPtr()->getExtraShape()->getPivotY();
|
||||
else
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
//
|
||||
|
||||
#include "JSystem/JParticle/JPAField.h"
|
||||
#include "dolphin/types.h"
|
||||
|
||||
/* 80259EE8-8025A0D8 .text loadFieldData__12JPABaseFieldFP12JPAFieldDataP13JPAFieldBlock */
|
||||
void JPABaseField::loadFieldData(JPAFieldData*, JPAFieldBlock*) {
|
||||
|
||||
@@ -78,6 +78,6 @@ void JPABaseParticle::calcPosition() {
|
||||
}
|
||||
|
||||
/* 8025ED6C-8025EE44 .text checkCreateChild__15JPABaseParticleFv */
|
||||
void JPABaseParticle::checkCreateChild() {
|
||||
bool JPABaseParticle::checkCreateChild() {
|
||||
/* Nonmatching */
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user