Skip to content

Commit

Permalink
make JPArticle equivalent by using TPs implementation
Browse files Browse the repository at this point in the history
  • Loading branch information
SwareJonge committed Jan 11, 2025
1 parent 2c5fcdc commit 64fa1ce
Show file tree
Hide file tree
Showing 16 changed files with 1,331 additions and 1,250 deletions.
2 changes: 1 addition & 1 deletion configure.py
Original file line number Diff line number Diff line change
Expand Up @@ -953,7 +953,7 @@ def MatchingFor(*versions):
Object(Matching, "JSystem/JParticle/JPAKeyBlock.cpp"),
Object(Matching, "JSystem/JParticle/JPAMath.cpp"),
Object(Matching, "JSystem/JParticle/JPAParticle.cpp"),
Object(NonMatching, "JSystem/JParticle/JPAResource.cpp"),
Object(Matching, "JSystem/JParticle/JPAResource.cpp"),
Object(Matching, "JSystem/JParticle/JPAResourceLoader.cpp"),
Object(Matching, "JSystem/JParticle/JPAResourceManager.cpp"),
Object(Matching, "JSystem/JParticle/JPATexture.cpp")
Expand Down
7 changes: 6 additions & 1 deletion include/JSystem/JParticle/JPABlock.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,11 @@
#include "JSystem/JGeometry.h"
#include "types.h"

#include "JSystem/JParticle/JPAField.h"

struct JKRHeap;
struct JPAEmitterWorkData;
struct JPAFieldBase;
struct JPABaseParticle;

typedef void JPAVolumeFunc(JPAEmitterWorkData *);

Expand Down Expand Up @@ -188,6 +190,9 @@ struct JPAFieldBlock
mSpeed = getMagOrig();
}

void prepare(JPAEmitterWorkData *work) { pFld->prepare(work, this); }
void calc(JPAEmitterWorkData *work, JPABaseParticle *ptcl) { pFld->calc(work, this, ptcl); }

const Data *mData; // _00
JPAFieldBase *pFld; // _04
f32 mFadeInRate; // _08
Expand Down
2 changes: 1 addition & 1 deletion include/JSystem/JParticle/JPAEmitter.h
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ struct JPABaseEmitter
void initFlag(u32 flag) { mFlags = flag; }
void setFlag(u32 flag) { mFlags |= flag; }
bool checkStatus(u32 flag) const { return mFlags & flag; }
void resetFlag(u32 flag) { mFlags &= ~flag; }
void clearStatus(u32 flag) { mFlags &= ~flag; }

inline void setScale(f32 scale)
{
Expand Down
5 changes: 3 additions & 2 deletions include/JSystem/JParticle/JPAField.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,10 @@

#include <dolphin/mtx.h>
#include "JSystem/JGeometry.h"
#include "JSystem/JParticle/JPABlock.h"
#include "JSystem/JParticle/JPAResource.h"

struct JPAFieldBlock;

struct JPAFieldBase
{
virtual ~JPAFieldBase() {} // _08 (weak)
Expand Down Expand Up @@ -129,4 +130,4 @@ struct JPAFieldVortex : public JPAFieldBase
f32 _20; // _20
};

#endif
#endif
21 changes: 21 additions & 0 deletions include/JSystem/JParticle/JPAList.h
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,27 @@ struct JPAList

return ret;
}

JPANode<T>* erase(JPANode<T>* node) {
if (node->mNext != NULL && node->mPrev != NULL) {
node->mPrev->mNext = node->mNext;
node->mNext->mPrev = node->mPrev;
mNum--;
} else if (node->mNext != NULL) {
node->mNext->mPrev = NULL;
mFirst = node->mNext;
mNum--;
} else if (node->mPrev != NULL) {
node->mPrev->mNext = NULL;
mLast = node->mPrev;
mNum--;
} else {
mLast = NULL;
mFirst = NULL;
mNum--;
}
return node;
}
};

#endif
56 changes: 28 additions & 28 deletions include/JSystem/JParticle/JPAResource.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
#include "JSystem/JKernel/JKRHeap.h"
#include "JSystem/JParticle/JPATexture.h"

typedef void JPAFunctionA(struct JPAEmitterWorkData *);
typedef void JPAFunctionB(struct JPAEmitterWorkData *, struct JPABaseParticle *);
typedef void (*JPAEmitterFunc)(struct JPAEmitterWorkData *);
typedef void (*JPAParticleFunc)(struct JPAEmitterWorkData *, struct JPABaseParticle *);

struct JPABaseShape;
struct JPAExtraShape;
Expand Down Expand Up @@ -46,32 +46,32 @@ struct JPAResource
u16 getTexIdx(u8 idx) { return texIdxTbl[idx]; }
u16 getUsrIdx() const { return mUsrIdx; }

JPAFunctionA **mCalcEmitterFuncList; // _00
JPAFunctionA **mDrawEmitterFuncList; // _04
JPAFunctionA **mDrawEmitterChildFuncList; // _08
JPAFunctionB **mCalcParticleFuncList; // _0C
JPAFunctionB **mDrawParticleFuncList; // _10
JPAFunctionB **mCalcParticleChildFuncList; // _14
JPAFunctionB **mDrawParticleChildFuncList; // _18
JPABaseShape *pBsp; // _1C
JPAExtraShape *pEsp; // _20
JPAChildShape *pCsp; // _24
JPAExTexShape *pEts; // _28
JPADynamicsBlock *pDyn; // _2C
JPAFieldBlock **ppFld; // _30
JPAKeyBlock **ppKey; // _34
u16 *texIdxTbl ; // _38
u16 mUsrIdx; // _3C
u8 fldNum; // _3E
u8 keyNum; // _3F
u8 texNum; // _40
u8 mCalcEmitterFuncListNum; // _41
u8 mDrawEmitterFuncListNum; // _42
u8 mDrawEmitterChildFuncListNum; // _43
u8 mCalcParticleFuncListNum; // _44
u8 mDrawParticleFuncListNum; // _45
u8 mCalcParticleChildFuncListNum; // _46
u8 mDrawParticleChildFuncListNum; // _47
JPAEmitterFunc *mCalcEmitterFuncList; // _00
JPAEmitterFunc *mDrawEmitterFuncList; // _04
JPAEmitterFunc *mDrawEmitterChildFuncList; // _08
JPAParticleFunc *mCalcParticleFuncList; // _0C
JPAParticleFunc *mDrawParticleFuncList; // _10
JPAParticleFunc *mCalcParticleChildFuncList; // _14
JPAParticleFunc *mDrawParticleChildFuncList; // _18
JPABaseShape *pBsp; // _1C
JPAExtraShape *pEsp; // _20
JPAChildShape *pCsp; // _24
JPAExTexShape *pEts; // _28
JPADynamicsBlock *pDyn; // _2C
JPAFieldBlock **ppFld; // _30
JPAKeyBlock **ppKey; // _34
u16 *texIdxTbl ; // _38
u16 mUsrIdx; // _3C
u8 fldNum; // _3E
u8 keyNum; // _3F
u8 texNum; // _40
u8 mCalcEmitterFuncListNum; // _41
u8 mDrawEmitterFuncListNum; // _42
u8 mDrawEmitterChildFuncListNum; // _43
u8 mCalcParticleFuncListNum; // _44
u8 mDrawParticleFuncListNum; // _45
u8 mCalcParticleChildFuncListNum; // _46
u8 mDrawParticleChildFuncListNum; // _47
};

/**
Expand Down
81 changes: 49 additions & 32 deletions include/JSystem/JParticle/JPAShape.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
#define _JSYSTEM_JPA_JPASHAPE_H

#include <dolphin/gx.h>
#include <dolphin/mtx.h>

#include "JSystem/JKernel/JKRHeap.h"
#include "types.h"
Expand Down Expand Up @@ -82,26 +83,27 @@ struct JPABaseShape
u32 getProjType() const { return ((pBsd->mFlags >> 24) & 0x01); }
u32 getTilingS() const { return (pBsd->mFlags >> 25) & 0x01; }
u32 getTilingT() const { return (pBsd->mFlags >> 26) & 0x01; }
bool isGlblClrAnm() const { return !!(pBsd->mFlags & 0x00001000); }
bool isGlblTexAnm() const { return !!(pBsd->mFlags & 0x00004000); }
bool isPrjTex() const { return !!(pBsd->mFlags & 0x00100000); }
bool isDrawFwdAhead() const { return !!(pBsd->mFlags & 0x00200000); }
bool isDrawPrntAhead() const { return !!(pBsd->mFlags & 0x00400000); }
bool isClipOn() const { return !!(pBsd->mFlags & 0x00800000); }
bool isTexCrdAnm() const { return !!(pBsd->mFlags & 0x01000000); }
bool isNoDrawParent() const { return !!(pBsd->mFlags & 0x08000000); }
bool isNoDrawChild() const { return !!(pBsd->mFlags & 0x10000000); }

bool isPrmAnm() const { return !!(pBsd->mClrFlg & 0x02); }
bool isEnvAnm() const { return !!(pBsd->mClrFlg & 0x08); }
BOOL isNoDrawParent() const { return ((pBsd->mFlags >> 27) & 1); }
BOOL isNoDrawChild() const { return ((pBsd->mFlags >> 28) & 1); }

BOOL isPrjTex() const { return (pBsd->mFlags & 0x00100000); }
BOOL isTexCrdAnm() const { return (pBsd->mFlags & 0x01000000); }
BOOL isGlblClrAnm() const { return (pBsd->mFlags & 0x00001000); }
u32 isGlblTexAnm() const { return (pBsd->mFlags & 0x00004000) ; } // fakematch most likely
BOOL isDrawFwdAhead() const { return (pBsd->mFlags & 0x00200000); }
BOOL isDrawPrntAhead() const { return (pBsd->mFlags & 0x00400000); }
BOOL isClipOn() const { return (pBsd->mFlags & 0x00800000); }

BOOL isTexAnm() const { return (pBsd->mTexFlg & 0x01); }
BOOL isPrmAnm() const { return (pBsd->mClrFlg & 0x02); }
BOOL isEnvAnm() const { return (pBsd->mClrFlg & 0x08); }
u8 getClrAnmType() const { return (pBsd->mClrFlg >> 4) & 0x07; }
s32 getClrAnmMaxFrm() const { return pBsd->mClrAnmFrmMax; }
void getPrmClr(GXColor *dst) { *dst = pBsd->mClrPrm; }
void getPrmClr(s16 idx, GXColor *dst) const { *dst = mPrmClrAnmTbl[idx]; }
void getEnvClr(GXColor *dst) { *dst = pBsd->mClrEnv; }
void getEnvClr(s16 idx, GXColor *dst) const { *dst = mEnvClrAnmTbl[idx]; }

bool isTexAnm() const { return !!(pBsd->mTexFlg & 0x01); }
u8 getTexAnmType() const { return (pBsd->mTexFlg >> 2) & 0x07; }
s64 getTexIdx() const { return (u8)pBsd->mTexIdx; }
u8 getTexIdx(u8 idx) const { return mTexIdxAnimTbl[idx]; }
Expand Down Expand Up @@ -195,11 +197,17 @@ struct JPAChildShape
f32 getAlphaInhRate() const { return mData->mInheritAlpha; }
f32 getGravity() const { return mData->mGravity; }

bool isFieldAffected() const { return mData->mFlags & 0x200000; }
bool isScaleInherited() const { return mData->mFlags & 0x10000; }
bool isColorInherited() const { return mData->mFlags & 0x40000; }
bool isAlphaInherited() const { return mData->mFlags & 0x20000; }
bool isRotateOn() const { return mData->mFlags & 0x1000000; }
u32 getType() const { return (mData->mFlags >> 0) & 0x0F; }
u32 getBasePlaneType() const { return (mData->mFlags >> 10) & 0x01; }

BOOL isScaleInherited() const { return mData->mFlags & 0x10000; }
BOOL isAlphaInherited() const { return mData->mFlags & 0x20000; }
BOOL isColorInherited() const { return mData->mFlags & 0x40000; }
BOOL isClipOn() const { return mData->mFlags & 0x100000; }
BOOL isFieldAffected() const { return mData->mFlags & 0x200000; }
BOOL isScaleOutOn() const { return mData->mFlags & 0x400000; }
BOOL isAlphaOutOn() const { return mData->mFlags & 0x800000; }
BOOL isRotateOn() const { return mData->mFlags & 0x1000000; }

const JPAChildShapeData *mData; // _00
};
Expand All @@ -210,7 +218,7 @@ struct JPAExTexShapeData
u32 mSize; // _04

u32 mFlags; // _08
f32 mIndTexMtx[2][3]; // _0C
Mtx23 mIndTexMtx; // _0C
s8 mExpScale; // _24
s8 mIndTexIdx; // _25
s8 mSecTexIdx; // _26
Expand All @@ -226,12 +234,12 @@ struct JPAExTexShape
// Unused/inlined:
void init_jpa(const u8 *, JKRHeap *);

const f32 *getIndTexMtx() const { return &mData->mIndTexMtx[0][0]; }
s32 getExpScale() const { return mData->mExpScale; }
const Mtx23 &getIndTexMtx() const { return mData->mIndTexMtx; }
const s8 getExpScale() const { return mData->mExpScale; }
u8 getIndTexIdx() const { return mData->mIndTexIdx; }
u8 getSecTexIdx() const { return mData->mSecTexIdx; }
bool isUseIndirect() const { return !!(mData->mFlags & 0x01); }
bool isUseSecTex() const { return !!(mData->mFlags & 0x0100); }
BOOL isUseIndirect() const { return (mData->mFlags & 0x01); }
BOOL isUseSecTex() const { return (mData->mFlags & 0x0100); }

const JPAExTexShapeData *mData; // _00
};
Expand Down Expand Up @@ -307,17 +315,26 @@ struct JPAExtraShape
f32 getAlphaIncRate() const { return mAlphaIncRate; }
f32 getAlphaDecRate() const { return mAlphaDecRate; }

bool isEnableScaleAnm() const { return mData->mFlags & 0x1; }
bool isEnableAlphaFlick() const { return mData->mFlags & 0x20000; }
bool isEnableRotateAnm() const { return mData->mFlags & 0x1000000; }
u32 getScaleAnmTypeX() const { return (mData->mFlags >> 8) & 3; }
u32 getScaleAnmTypeY() const { return (mData->mFlags >> 10) & 3; }
u32 getScaleCenterX() const { return (mData->mFlags >> 12) & 3; }
u32 getScaleCenterY() const { return (mData->mFlags >> 14) & 3; }

BOOL isEnableAlphaAnm() const { return mData->mFlags & 0x10000; }
BOOL isEnableAlphaFlick() const { return mData->mFlags & 0x20000; }
BOOL isEnableRotateAnm() const { return mData->mFlags & 0x1000000; }

BOOL isEnableScaleAnm() const { return mData->mFlags & 1; }
BOOL isScaleXYDiff() const { return mData->mFlags & 2; }


const JPAExtraShapeData *mData; // _00
f32 mAlphaIncRate; // _04
f32 mAlphaDecRate; // _08
f32 mScaleIncRateX; // _0C
f32 mScaleIncRateY; // _10
f32 mScaleDecRateX; // _14
f32 mScaleDecRateY; // _18
f32 mAlphaIncRate; // _04
f32 mAlphaDecRate; // _08
f32 mScaleIncRateX; // _0C
f32 mScaleIncRateY; // _10
f32 mScaleDecRateX; // _14
f32 mScaleDecRateY; // _18
};

// In JPABaseShape.cpp:
Expand Down
4 changes: 2 additions & 2 deletions libs/JSystem/JParticle/JPADynamicsBlock.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -228,8 +228,8 @@ void JPADynamicsBlock::create(JPAEmitterWorkData* work)
work->mEmitter->mRateStepTimer -= (work->mEmitter->mRateStep + 1);
work->mEmitter->setFlag(JPAEMIT_RateStepEmit);
} else {
work->mEmitter->resetFlag(JPAEMIT_RateStepEmit);
work->mEmitter->clearStatus(JPAEMIT_RateStepEmit);
}

work->mEmitter->resetFlag(JPAEMIT_FirstEmit);
work->mEmitter->clearStatus(JPAEMIT_FirstEmit);
}
10 changes: 5 additions & 5 deletions libs/JSystem/JParticle/JPAEmitter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

JPAEmitterCallBack::~JPAEmitterCallBack() { }

void JPABaseEmitter::init(JPAEmitterManager* manager, JPAResource* resource)
void JPABaseEmitter::init(JPAEmitterManager *manager, JPAResource *resource)
{
mManager = manager;
mResource = resource;
Expand Down Expand Up @@ -54,7 +54,7 @@ void JPABaseEmitter::init(JPAEmitterManager* manager, JPAResource* resource)
mRateStepTimer = 0;
}

JPABaseParticle* JPABaseEmitter::createParticle()
JPABaseParticle *JPABaseEmitter::createParticle()
{
if (mPtclPool->mNum != 0) {
JPANode<JPABaseParticle>* node = mPtclPool->pop_front();
Expand All @@ -72,7 +72,7 @@ JPABaseParticle* JPABaseEmitter::createParticle()
return nullptr;
}

JPABaseParticle* JPABaseEmitter::createChild(JPABaseParticle* parent)
JPABaseParticle *JPABaseEmitter::createChild(JPABaseParticle *parent)
{
if (mPtclPool->mNum != 0) {
JPANode<JPABaseParticle>* node = mPtclPool->pop_front();
Expand Down Expand Up @@ -136,15 +136,15 @@ bool JPABaseEmitter::processTermination()
return false;
}

void JPABaseEmitter::calcEmitterGlobalPosition(JGeometry::TVec3f* p1) const
void JPABaseEmitter::calcEmitterGlobalPosition(JGeometry::TVec3f *pos) const
{
Mtx mtx;
PSMTXScale(mtx, mGlobalScl.x, mGlobalScl.y, mGlobalScl.z);
PSMTXConcat(mGlobalRot, mtx, mtx);
mtx[0][3] = mGlobalTrs.x;
mtx[1][3] = mGlobalTrs.y;
mtx[2][3] = mGlobalTrs.z;
PSMTXMultVec(mtx, (Vec*)&mLocalTrs, (Vec*)p1);
PSMTXMultVec(mtx, &mLocalTrs, pos);
}

void JPABaseEmitter::getEmitterAxisX(JGeometry::TVec3<f32>*) const
Expand Down
8 changes: 4 additions & 4 deletions libs/JSystem/JParticle/JPAEmitterManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@

JPAEmitterManager::JPAEmitterManager(u32 ptclNum_, u32 emtrNum_, JKRHeap *heap, u8 groups, u8 resnum) {
emtrNum = emtrNum_;
ptclNum = ptclNum_;
gidMax = groups;
ridMax = resnum;
ptclNum = ptclNum_;
gidMax = groups;
ridMax = resnum;
#line 40
JUT_ASSERT(emtrNum && ptclNum && gidMax && ridMax);

Expand Down Expand Up @@ -40,7 +40,7 @@ JPAEmitterManager::JPAEmitterManager(u32 ptclNum_, u32 emtrNum_, JKRHeap *heap,
JUT_ASSERT(pWd);
}

JPABaseEmitter *JPAEmitterManager::createSimpleEmitterID(const JGeometry::TVec3f& pos, u16 resID, u8 group_id, u8 res_mgr_id,
JPABaseEmitter *JPAEmitterManager::createSimpleEmitterID(const JGeometry::TVec3f &pos, u16 resID, u8 group_id, u8 res_mgr_id,
JPAEmitterCallBack *ecback, JPAParticleCallBack *pcback) {
#line 88
JUT_ASSERT(group_id < gidMax);
Expand Down
Loading

0 comments on commit 64fa1ce

Please sign in to comment.