This commit is contained in:
Jasper St. Pierre
2023-10-29 18:54:28 -07:00
parent 5bbc0633f0
commit 855643ae72
9 changed files with 359 additions and 45 deletions
-2
View File
@@ -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;
+53 -11
View File
@@ -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;
+51
View File
@@ -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 */
+2 -1
View File
@@ -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:
+2 -2
View File
@@ -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;
+44
View File
@@ -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 */