JPAEmitterManager OK

This commit is contained in:
robojumper
2025-04-27 11:14:54 +02:00
parent 70125c1eac
commit a962cdd14a
21 changed files with 230 additions and 177 deletions
+2 -2
View File
@@ -53,8 +53,8 @@ struct JPABaseShapeAlphaArg {
*/
struct JPABaseShape {
public:
/* 8027A6DC */ JPABaseShape(u8 const*, EGG::Heap*);
/* 8027A7E8 */ void setGX(JPAEmitterWorkData*) const;
JPABaseShape(u8 const*, EGG::Heap*);
void setGX(JPAEmitterWorkData*) const;
static GXBlendMode st_bm[3];
static GXBlendFactor st_bf[10];
+1 -1
View File
@@ -43,7 +43,7 @@ struct JPAChildShapeData {
*/
class JPAChildShape {
public:
/* 8027B038 */ JPAChildShape(u8 const*);
JPAChildShape(u8 const*);
f32 getPosRndm() const { return mpData->mPosRndm; }
f32 getBaseVel() const { return mpData->mBaseVel; }
+3 -3
View File
@@ -62,9 +62,9 @@ enum {
*/
class JPADynamicsBlock {
public:
/* 8027BB18 */ JPADynamicsBlock(u8 const*);
/* 8027BB4C */ void init();
/* 8027BBE8 */ void create(JPAEmitterWorkData*);
JPADynamicsBlock(u8 const*);
void init();
void create(JPAEmitterWorkData*);
void calc(JPAEmitterWorkData* work) { mpCalcVolumeFunc(work); }
+18 -18
View File
@@ -75,12 +75,12 @@ struct JPAEmitterWorkData {
class JPAEmitterCallBack {
public:
virtual ~JPAEmitterCallBack() = 0;
/* 80050368 */ virtual void execute(JPABaseEmitter*) {}
/* 80050374 */ virtual void executeAfter(JPABaseEmitter*) {}
/* 8005036C */ virtual void draw(JPABaseEmitter*) {}
/* 80050370 */ virtual void drawAfter(JPABaseEmitter*) {}
/* 8027E6A4 */ //~JPAEmitterCallBack();
virtual void execute(JPABaseEmitter*) {}
virtual void executeAfter(JPABaseEmitter*) {}
virtual void draw(JPABaseEmitter*) {}
virtual void drawAfter(JPABaseEmitter*) {}
//~JPAEmitterCallBack();
};
enum {
@@ -100,18 +100,18 @@ enum {
*/
class JPABaseEmitter {
public:
/* 8027E5EC */ ~JPABaseEmitter() {}
/* 8027E64C */ JPABaseEmitter() : mLink(this), mRndm(0) {}
/* 8027E6EC */ void init(JPAEmitterManager*, JPAResource*);
/* 8027EDD4 */ bool processTillStartFrame();
/* 8027EE14 */ bool processTermination();
/* 8027EEB0 */ void calcEmitterGlobalPosition(EGG::Vector3f*) const;
/* 8027EC60 */ void deleteAllParticle();
/* 8027EB60 */ JPABaseParticle* createChild(JPABaseParticle*);
/* 8027EA40 */ JPABaseParticle* createParticle();
/* 8027EF30 */ u32 getCurrentCreateNumber() const;
/* 8027EF40 */ u8 getDrawCount() const;
/* 8027EF50 */ bool loadTexture(u8, GXTexMapID);
~JPABaseEmitter() {}
JPABaseEmitter() : mLink(this), mRndm(0) {}
void init(JPAEmitterManager*, JPAResource*);
bool processTillStartFrame();
bool processTermination();
void calcEmitterGlobalPosition(EGG::Vector3f*) const;
void deleteAllParticle();
JPABaseParticle* createChild(JPABaseParticle*);
JPABaseParticle* createParticle();
u32 getCurrentCreateNumber() const;
u8 getDrawCount() const;
bool loadTexture(u8, GXTexMapID);
void initStatus(u32 status) { mStatus = status; }
void setStatus(u32 status) { mStatus |= status; }
+14 -10
View File
@@ -21,17 +21,21 @@ struct JPAEmitterWorkData;
*/
class JPAEmitterManager {
public:
/* 8027DCA0 */ JPAEmitterManager(u32, u32, EGG::Heap*, u8, u8);
/* 8027DEBC */ JPABaseEmitter* createSimpleEmitterID(EGG::Vector3f const&, u16, u8, u8,
JPAEmitterManager(u32, u32, EGG::Heap*, u8, u8);
JPABaseEmitter* createSimpleEmitterID(EGG::Vector3f const&, u16, u8, u8,
JPAEmitterCallBack*, JPAParticleCallBack*);
/* 8027DFA0 */ void calc(u8);
/* 8027E028 */ void draw(JPADrawInfo const*, u8);
/* 8027E220 */ void forceDeleteAllEmitter();
/* 8027E278 */ void forceDeleteGroupEmitter(u8);
/* 8027E2D8 */ void forceDeleteEmitter(JPABaseEmitter*);
/* 8027E344 */ void entryResourceManager(JPAResourceManager*, u8);
/* 8027E354 */ void clearResourceManager(u8);
/* 8027E3F4 */ void calcYBBCam();
~JPAEmitterManager() {}
void fn_80320E20(u8, f32, f32); // SS addition
void calc(u8);
void draw(JPADrawInfo const*, u8);
void forceDeleteAllEmitter();
void forceDeleteGroupEmitter(u8);
void forceDeleteEmitter(JPABaseEmitter*);
void entryResourceManager(JPAResourceManager*, u8);
void clearResourceManager(u8);
void calcYBBCam();
JPAResourceManager* getResourceManager(u16 idx) { return pResMgrAry[idx]; }
public:
+1 -1
View File
@@ -27,7 +27,7 @@ struct JPAExTexShapeData {
*/
class JPAExTexShape {
public:
/* 8027B13C */ JPAExTexShape(u8 const*);
JPAExTexShape(u8 const*);
const f32* getIndTexMtx() const { return &mpData->mIndTexMtx[0][0]; }
s8 getExpScale() const { return mpData->mExpScale; }
+2 -2
View File
@@ -46,8 +46,8 @@ struct JPAExtraShapeData {
*/
class JPAExtraShape {
public:
/* 8027AD88 */ JPAExtraShape(u8 const*);
/* 8027ADBC */ void init();
JPAExtraShape(u8 const*);
void init();
f32 getScaleInTiming() const { return mpData->mScaleInTiming; }
f32 getScaleOutTiming() const { return mpData->mScaleOutTiming; }
+57 -57
View File
@@ -11,92 +11,92 @@ class JPAFieldBlock;
class JPAFieldBase {
public:
/* 8027BDEC */ void calcAffect(JPAFieldBlock*, JPABaseParticle*);
/* 8027BF18 */ f32 calcFadeAffect(JPAFieldBlock*, f32) const;
void calcAffect(JPAFieldBlock*, JPABaseParticle*);
f32 calcFadeAffect(JPAFieldBlock*, f32) const;
/* 8027D3AC */ virtual ~JPAFieldBase() {}
/* 80276A8C */ virtual void prepare(JPAEmitterWorkData*, JPAFieldBlock*) {}
virtual ~JPAFieldBase() {}
virtual void prepare(JPAEmitterWorkData*, JPAFieldBlock*) {}
virtual void calc(JPAEmitterWorkData*, JPAFieldBlock*, JPABaseParticle*) = 0;
/* 0x04 */ EGG::Vector3f mAccel;
};
class JPAFieldGravity : public JPAFieldBase {
public:
void prepare(JPAEmitterWorkData*, JPAFieldBlock*);
void calc(JPAEmitterWorkData*, JPAFieldBlock*, JPABaseParticle*);
~JPAFieldGravity() {}
};
class JPAFieldAir : public JPAFieldBase {
public:
void prepare(JPAEmitterWorkData*, JPAFieldBlock*);
void calc(JPAEmitterWorkData*, JPAFieldBlock*, JPABaseParticle*);
~JPAFieldAir() {}
};
class JPAFieldMagnet : public JPAFieldBase {
public:
void prepare(JPAEmitterWorkData*, JPAFieldBlock*);
void calc(JPAEmitterWorkData*, JPAFieldBlock*, JPABaseParticle*);
~JPAFieldMagnet() {}
/* 0x10 */ EGG::Vector3f mDir;
};
class JPAFieldNewton : public JPAFieldBase {
public:
void prepare(JPAEmitterWorkData*, JPAFieldBlock*);
void calc(JPAEmitterWorkData*, JPAFieldBlock*, JPABaseParticle*);
~JPAFieldNewton() {}
/* 0x10 */ EGG::Vector3f mDir;
/* 0x1C */ f32 mCutoff;
};
class JPAFieldVortex : public JPAFieldBase {
public:
/* 8027C56C */ void prepare(JPAEmitterWorkData*, JPAFieldBlock*);
/* 8027C674 */ void calc(JPAEmitterWorkData*, JPAFieldBlock*, JPABaseParticle*);
/* 8027D564 */ ~JPAFieldVortex() {}
void prepare(JPAEmitterWorkData*, JPAFieldBlock*);
void calc(JPAEmitterWorkData*, JPAFieldBlock*, JPABaseParticle*);
~JPAFieldVortex() {}
/* 0x10 */ EGG::Vector3f field_0x10;
/* 0x1C */ f32 field_0x1c;
/* 0x20 */ f32 field_0x20;
};
class JPAFieldSpin : public JPAFieldBase {
public:
/* 8027CE64 */ void prepare(JPAEmitterWorkData*, JPAFieldBlock*);
/* 8027CFA8 */ void calc(JPAEmitterWorkData*, JPAFieldBlock*, JPABaseParticle*);
/* 8027D3F4 */ ~JPAFieldSpin() {}
/* 0x10 */ EGG::Vector3f field_0x10;
/* 0x1C */ EGG::Vector3f field_0x1c;
/* 0x28 */ EGG::Vector3f field_0x28;
};
class JPAFieldRandom : public JPAFieldBase {
public:
/* 8027CCCC */ void calc(JPAEmitterWorkData*, JPAFieldBlock*, JPABaseParticle*);
/* 8027D4AC */ ~JPAFieldRandom() {}
};
class JPAFieldNewton : public JPAFieldBase {
public:
/* 8027C36C */ void prepare(JPAEmitterWorkData*, JPAFieldBlock*);
/* 8027C3E0 */ void calc(JPAEmitterWorkData*, JPAFieldBlock*, JPABaseParticle*);
/* 8027D5C0 */ ~JPAFieldNewton() {}
/* 0x10 */ EGG::Vector3f mDir;
/* 0x1C */ f32 mCutoff;
};
class JPAFieldMagnet : public JPAFieldBase {
public:
/* 8027C24C */ void prepare(JPAEmitterWorkData*, JPAFieldBlock*);
/* 8027C29C */ void calc(JPAEmitterWorkData*, JPAFieldBlock*, JPABaseParticle*);
/* 8027D61C */ ~JPAFieldMagnet() {}
/* 0x10 */ EGG::Vector3f mDir;
};
class JPAFieldGravity : public JPAFieldBase {
public:
/* 8027BFB4 */ void prepare(JPAEmitterWorkData*, JPAFieldBlock*);
/* 8027C054 */ void calc(JPAEmitterWorkData*, JPAFieldBlock*, JPABaseParticle*);
/* 8027D6D4 */ ~JPAFieldGravity() {}
void calc(JPAEmitterWorkData*, JPAFieldBlock*, JPABaseParticle*);
~JPAFieldRandom() {}
};
class JPAFieldDrag : public JPAFieldBase {
public:
/* 8027CDE4 */ void calc(JPAEmitterWorkData*, JPAFieldBlock*, JPABaseParticle*);
/* 8027D450 */ ~JPAFieldDrag() {}
void calc(JPAEmitterWorkData*, JPAFieldBlock*, JPABaseParticle*);
~JPAFieldDrag() {}
};
class JPAFieldConvection : public JPAFieldBase {
public:
/* 8027C814 */ void prepare(JPAEmitterWorkData*, JPAFieldBlock*);
/* 8027CA94 */ void calc(JPAEmitterWorkData*, JPAFieldBlock*, JPABaseParticle*);
/* 8027D508 */ ~JPAFieldConvection() {}
void prepare(JPAEmitterWorkData*, JPAFieldBlock*);
void calc(JPAEmitterWorkData*, JPAFieldBlock*, JPABaseParticle*);
~JPAFieldConvection() {}
/* 0x10 */ EGG::Vector3f field_0x10;
/* 0x1C */ EGG::Vector3f field_0x1c;
/* 0x28 */ EGG::Vector3f field_0x28;
};
class JPAFieldAir : public JPAFieldBase {
class JPAFieldSpin : public JPAFieldBase {
public:
/* 8027C07C */ void prepare(JPAEmitterWorkData*, JPAFieldBlock*);
/* 8027C1B8 */ void calc(JPAEmitterWorkData*, JPAFieldBlock*, JPABaseParticle*);
/* 8027D678 */ ~JPAFieldAir() {}
void prepare(JPAEmitterWorkData*, JPAFieldBlock*);
void calc(JPAEmitterWorkData*, JPAFieldBlock*, JPABaseParticle*);
~JPAFieldSpin() {}
/* 0x10 */ EGG::Vector3f field_0x10;
/* 0x1C */ EGG::Vector3f field_0x1c;
/* 0x28 */ EGG::Vector3f field_0x28;
};
// unknown name
@@ -119,8 +119,8 @@ public:
class JPAFieldBlock {
public:
/* 8027D088 */ JPAFieldBlock(u8 const*, EGG::Heap*);
/* 8027D0C0 */ void init(EGG::Heap*);
JPAFieldBlock(u8 const*, EGG::Heap*);
void init(EGG::Heap*);
u32 getType() { return mpData->mFlags & 0xF; }
u32 getAddType() { return (mpData->mFlags >> 8) & 3; }
+2 -2
View File
@@ -8,8 +8,8 @@
*
*/
struct JPAKeyBlock {
/* 8027D730 */ JPAKeyBlock(u8 const*);
/* 8027D740 */ f32 calc(f32);
JPAKeyBlock(u8 const*);
f32 calc(f32);
u8 getID() { return mDataStart[8]; }
+7 -7
View File
@@ -20,13 +20,13 @@ struct JPAEmitterWorkData;
class JPABaseParticle {
public:
~JPABaseParticle() {}
/* 8027EFEC */ void init_p(JPAEmitterWorkData*);
/* 8027F8C8 */ void init_c(JPAEmitterWorkData*, JPABaseParticle*);
/* 8027FFD0 */ bool calc_p(JPAEmitterWorkData*);
/* 80280260 */ bool calc_c(JPAEmitterWorkData*);
/* 802804C8 */ bool canCreateChild(JPAEmitterWorkData*);
/* 80280548 */ f32 getWidth(JPABaseEmitter const*) const;
/* 80280568 */ f32 getHeight(JPABaseEmitter const*) const;
void init_p(JPAEmitterWorkData*);
void init_c(JPAEmitterWorkData*, JPABaseParticle*);
bool calc_p(JPAEmitterWorkData*);
bool calc_c(JPAEmitterWorkData*);
bool canCreateChild(JPAEmitterWorkData*);
f32 getWidth(JPABaseEmitter const*) const;
f32 getHeight(JPABaseEmitter const*) const;
int getAge() { return mAge; }
void setOffsetPosition(const EGG::Vector3f& pos) { mOffsetPosition.set(pos); }
void setOffsetPosition(f32 x, f32 y, f32 z) { mOffsetPosition.set(x, y, z); }
+14 -14
View File
@@ -22,20 +22,20 @@ class JPAKeyBlock;
*/
class JPAResource {
public:
/* 80274010 */ JPAResource();
/* 80274080 */ void init(EGG::Heap*);
/* 802755E8 */ bool calc(JPAEmitterWorkData*, JPABaseEmitter*);
/* 80275A94 */ void draw(JPAEmitterWorkData*, JPABaseEmitter*);
/* 80275B74 */ void drawP(JPAEmitterWorkData*);
/* 80275EB0 */ void drawC(JPAEmitterWorkData*);
/* 802761A8 */ void setPTev();
/* 8027642C */ void setCTev(JPAEmitterWorkData*);
/* 8027658C */ void calc_p(JPAEmitterWorkData*, JPABaseParticle*);
/* 80276608 */ void calc_c(JPAEmitterWorkData*, JPABaseParticle*);
/* 80276684 */ void calcField(JPAEmitterWorkData*, JPABaseParticle*);
/* 80276700 */ void calcKey(JPAEmitterWorkData*);
/* 80276840 */ void calcWorkData_c(JPAEmitterWorkData*);
/* 80276A0C */ void calcWorkData_d(JPAEmitterWorkData*);
JPAResource();
void init(EGG::Heap*);
bool calc(JPAEmitterWorkData*, JPABaseEmitter*);
void draw(JPAEmitterWorkData*, JPABaseEmitter*);
void drawP(JPAEmitterWorkData*);
void drawC(JPAEmitterWorkData*);
void setPTev();
void setCTev(JPAEmitterWorkData*);
void calc_p(JPAEmitterWorkData*, JPABaseParticle*);
void calc_c(JPAEmitterWorkData*, JPABaseParticle*);
void calcField(JPAEmitterWorkData*, JPABaseParticle*);
void calcKey(JPAEmitterWorkData*);
void calcWorkData_c(JPAEmitterWorkData*);
void calcWorkData_d(JPAEmitterWorkData*);
JPABaseShape* getBsp() const { return mpBaseShape; }
JPAExtraShape* getEsp() const { return mpExtraShape; }
@@ -7,8 +7,8 @@ class JPAResourceManager;
class JPAResourceLoader {
public:
/* 8027D8A0 */ JPAResourceLoader(u8 const*, JPAResourceManager*);
/* 8027D8E0 */ void load_jpc(u8 const*, JPAResourceManager*);
JPAResourceLoader(u8 const*, JPAResourceManager*);
void load_jpc(u8 const*, JPAResourceManager*);
};
#endif /* JPARESOURCELOADER_H */
@@ -14,13 +14,13 @@ class JPAResource;
*/
class JPAResourceManager {
public:
/* 80273E10 */ JPAResourceManager(void const*, EGG::Heap*);
/* 80273E68 */ JPAResource* getResource(u16) const;
/* 80273EA8 */ bool checkUserIndexDuplication(u16) const;
/* 80273EEC */ const EGG::ResTIMG* swapTexture(EGG::ResTIMG const*, char const*);
/* 80273F8C */ void registRes(JPAResource*);
/* 80273FAC */ void registTex(JPATexture*);
/* 80273FCC */ u32 getResUserWork(u16) const;
JPAResourceManager(void const*, EGG::Heap*);
JPAResource* getResource(u16) const;
bool checkUserIndexDuplication(u16) const;
const EGG::ResTIMG* swapTexture(EGG::ResTIMG const*, char const*);
void registRes(JPAResource*);
void registTex(JPATexture*);
u32 getResUserWork(u16) const;
void load(u16 idx, GXTexMapID texMapID) { mpTexArr[idx]->load(texMapID); }
+6 -6
View File
@@ -44,12 +44,12 @@
#endif
namespace JUTAssertion {
/* 802E495C */ void create();
/* 802E4960 */ u32 flush_subroutine();
/* 802E499C */ void flushMessage();
/* 802E4A54 */ void flushMessage_dbPrint();
/* 802E4C34 */ void setVisible(bool);
/* 802E4C3C */ void setMessageCount(int);
void create();
u32 flush_subroutine();
void flushMessage();
void flushMessage_dbPrint();
void setVisible(bool);
void setMessageCount(int);
u32 getSDevice();
void showAssert(u32 device, const char * file, int line, const char * assertion);
+1 -1
View File
@@ -48,7 +48,7 @@ struct Vector3f : public nw4r::math::VEC3 {
return Vector3f(-x, -y, -z);
}
Vector3f operator-(const Vector3f &v) {
Vector3f operator-(const Vector3f &v) const {
return Vector3f(x - v.x, y - v.y, z - v.z);
}