Files
tp/include/JSystem/JParticle/JPAParticle.h
T

94 lines
3.2 KiB
C++
Raw Normal View History

2021-03-28 22:49:05 +02:00
#ifndef JPAPARTICLE_H
#define JPAPARTICLE_H
#include <dolphin/gx.h>
2021-12-06 06:51:53 -05:00
#include "JSystem/JGeometry.h"
2021-12-06 06:51:53 -05:00
class JKRHeap;
class JPABaseEmitter;
class JPABaseParticle;
class JPAEmitterCallBack;
class JPAEmitterManager;
class JPAParticleCallBack;
class JPAResourceManager;
2023-08-11 05:04:50 +03:00
struct JPAEmitterWorkData;
2024-04-12 00:10:30 -06:00
/**
* @ingroup jsystem-jparticle
*
*/
2021-12-06 06:51:53 -05:00
class JPABaseParticle {
public:
~JPABaseParticle() {}
2021-12-06 06:51:53 -05:00
/* 8027EFEC */ void init_p(JPAEmitterWorkData*);
/* 8027F8C8 */ void init_c(JPAEmitterWorkData*, JPABaseParticle*);
2024-11-03 13:39:41 -05:00
/* 8027FFD0 */ bool calc_p(JPAEmitterWorkData*);
/* 80280260 */ bool calc_c(JPAEmitterWorkData*);
/* 802804C8 */ bool canCreateChild(JPAEmitterWorkData*);
2021-12-06 06:51:53 -05:00
/* 80280548 */ f32 getWidth(JPABaseEmitter const*) const;
/* 80280568 */ f32 getHeight(JPABaseEmitter const*) const;
int getAge() { return mAge; }
void setOffsetPosition(const JGeometry::TVec3<f32>& pos) { mOffsetPosition.set(pos); }
2023-08-11 05:04:50 +03:00
void setOffsetPosition(f32 x, f32 y, f32 z) { mOffsetPosition.set(x, y, z); }
void getOffsetPosition(JGeometry::TVec3<f32>& pos) { pos.set(mOffsetPosition); }
2023-08-11 05:04:50 +03:00
u16 getRotateAngle() const { return mRotateAngle; }
2023-08-14 19:04:01 +03:00
void getGlobalPosition(JGeometry::TVec3<f32>& pos) const { pos.set(mPosition); }
2023-08-11 05:04:50 +03:00
f32 getParticleScaleX() const { return mParticleScaleX; }
f32 getParticleScaleY() const { return mParticleScaleY; }
void setStatus(u32 flag) { mStatus |= flag; }
2023-08-14 19:04:01 +03:00
u32 checkStatus(u32 flag) { return mStatus & flag; }
2024-11-03 13:39:41 -05:00
void initStatus(u32 status) { mStatus = status; }
2023-08-11 05:04:50 +03:00
void setInvisibleParticleFlag() { setStatus(8); }
void setDeleteParticleFlag() { setStatus(2); }
2023-08-14 19:04:01 +03:00
void getVelVec(JGeometry::TVec3<f32>& vec) const { vec.set(mVelocity); }
void getLocalPosition(JGeometry::TVec3<f32>& vec) const { vec.set(mLocalPosition); }
2024-08-17 08:19:53 +03:00
void getBaseAxis(JGeometry::TVec3<f32>& vec) const { vec.set(mBaseAxis); }
2021-12-06 06:51:53 -05:00
public:
2023-08-11 05:04:50 +03:00
/* 0x00 */ JGeometry::TVec3<f32> mPosition;
2023-08-14 19:04:01 +03:00
/* 0x0C */ JGeometry::TVec3<f32> mLocalPosition;
/* 0x18 */ JGeometry::TVec3<f32> mOffsetPosition;
2023-08-14 19:04:01 +03:00
/* 0x24 */ JGeometry::TVec3<f32> mVelocity;
2024-11-03 13:39:41 -05:00
/* 0x30 */ JGeometry::TVec3<f32> mVelType1;
/* 0x3C */ JGeometry::TVec3<f32> mVelType0;
/* 0x48 */ JGeometry::TVec3<f32> mVelType2;
2023-08-14 19:04:01 +03:00
/* 0x54 */ JGeometry::TVec3<f32> mBaseAxis;
2021-12-06 06:51:53 -05:00
/* 0x60 */ f32 mParticleScaleX;
/* 0x64 */ f32 mParticleScaleY;
/* 0x68 */ f32 mScaleOut;
/* 0x6C */ f32 mAlphaWaveRandom;
/* 0x70 */ f32 mMoment;
/* 0x74 */ f32 mDrag;
/* 0x78 */ u32 field_0x78;
/* 0x7C */ u32 mStatus;
2021-12-23 20:56:02 -08:00
/* 0x80 */ s16 mAge;
2024-11-03 13:39:41 -05:00
/* 0x82 */ s16 mLifeTime;
2021-12-06 06:51:53 -05:00
/* 0x84 */ f32 mTime;
/* 0x88 */ u16 mRotateAngle;
2024-11-03 13:39:41 -05:00
/* 0x8A */ s16 mRotateSpeed;
2021-12-06 06:51:53 -05:00
/* 0x8C */ GXColor mPrmClr;
/* 0x90 */ GXColor mEnvClr;
/* 0x94 */ u8 mTexAnmIdx;
/* 0x95 */ u8 mAnmRandom;
/* 0x96 */ u8 mPrmColorAlphaAnm;
};
2024-04-12 00:10:30 -06:00
/**
* @ingroup jsystem-jparticle
*
*/
2023-08-11 05:04:50 +03:00
class JPAParticleCallBack {
2021-12-06 06:51:53 -05:00
public:
2023-08-11 05:04:50 +03:00
JPAParticleCallBack() {}
2024-10-31 20:36:11 -04:00
virtual ~JPAParticleCallBack() = 0;
virtual void execute(JPABaseEmitter*, JPABaseParticle*) {}
virtual void draw(JPABaseEmitter*, JPABaseParticle*) {}
2021-12-06 06:51:53 -05:00
};
2022-06-30 23:24:35 +02:00
// not sure where this belongs
static inline u32 COLOR_MULTI(u32 a, u32 b) {
return ((a * (b + 1)) * 0x10000) >> 24;
}
2021-03-28 22:49:05 +02:00
#endif /* JPAPARTICLE_H */