Files
Jcw87 5e7b59f2fe Improve compiler compatibility (#743)
* fix returns

* use standard C headers

* struct/class mismatch

* explicit this in template

* switch variable scope

* C standard compliance

* & l-value
2025-04-29 12:49:09 -04:00

163 lines
4.3 KiB
C++

#ifndef JPAFIELD_H
#define JPAFIELD_H
#include "JSystem/JSupport/JSUList.h"
#include "JSystem/JGeometry.h"
class JPADataBlockLinkInfo;
struct JPAEmitterInfo;
class JPAFieldData;
class JPABaseParticle;
class JPABaseField;
class JPAFieldBlock;
class JPAFieldContainer;
class JPAFieldManager {
public:
void initField(JPADataBlockLinkInfo*, JPAEmitterInfo*);
void init(JPABaseParticle*);
void preCalc();
void calc(JPABaseParticle*);
void deleteField(JPAFieldData*);
void deleteAllField();
static JPAFieldContainer fc;
public:
/* 0x00 */ JSUList<JPAFieldData> mList;
/* 0x0C */ JSUList<JPAFieldData>* mVacList;
};
class JPAFieldData {
public:
JPAFieldData() : mLink(this) {}
virtual ~JPAFieldData() {}
JSULink<JPAFieldData>* getLinkBufferPtr() { return &mLink; }
static JPAEmitterInfo * pEmtrInfo;
public:
/* 0x04 */ JPABaseField * mpBaseField;
/* 0x08 */ JSULink<JPAFieldData> mLink;
/* 0x18 */ JGeometry::TVec3<f32> mVel;
/* 0x24 */ JGeometry::TVec3<f32> mWork0;
/* 0x30 */ JGeometry::TVec3<f32> mWork1;
/* 0x3C */ JGeometry::TVec3<f32> mWork2;
/* 0x48 */ f32 mMaxDistSq;
/* 0x4C */ f32 mFadeOutRate;
/* 0x50 */ f32 mFadeInRate;
/* 0x54 */ JGeometry::TVec3<f32> mPos;
/* 0x60 */ JGeometry::TVec3<f32> mDir;
/* 0x6C */ f32 mMag;
/* 0x70 */ f32 mMagRndm;
/* 0x74 */ f32 mMaxDist;
/* 0x78 */ f32 mVal1;
/* 0x7C */ f32 mVal2;
/* 0x80 */ f32 mVal3;
/* 0x84 */ f32 mFadeIn;
/* 0x88 */ f32 mFadeOut;
/* 0x8C */ f32 mEnTime;
/* 0x90 */ f32 mDisTime;
/* 0x94 */ u16 mSttFlag;
/* 0x96 */ u8 mType;
/* 0x97 */ u8 mID;
/* 0x98 */ u8 mVelType;
/* 0x99 */ u8 mCycle;
};
class JPABaseField {
public:
virtual ~JPABaseField() {}
virtual void init(JPAFieldData*, JPABaseParticle*) {}
virtual void preCalc(JPAFieldData*);
virtual void calc(JPAFieldData*, JPABaseParticle*) {}
virtual bool isItinRange(JPAFieldData*, f32);
void loadFieldData(JPAFieldData*, JPAFieldBlock*);
f32 calcFadeAffect(JPAFieldData*, f32);
void calcVel(JPAFieldData*, JPABaseParticle*);
};
class JPAGravityField : public JPABaseField {
public:
virtual ~JPAGravityField() {}
virtual void preCalc(JPAFieldData*);
virtual void calc(JPAFieldData*, JPABaseParticle*);
};
class JPAAirField : public JPABaseField {
public:
virtual ~JPAAirField() {}
virtual void preCalc(JPAFieldData*);
virtual void calc(JPAFieldData*, JPABaseParticle*);
};
class JPAMagnetField : public JPABaseField {
public:
virtual ~JPAMagnetField() {}
virtual void preCalc(JPAFieldData*);
virtual void calc(JPAFieldData*, JPABaseParticle*);
};
class JPANewtonField : public JPABaseField {
public:
virtual ~JPANewtonField() {}
virtual void preCalc(JPAFieldData*);
virtual void calc(JPAFieldData*, JPABaseParticle*);
};
class JPAVortexField : public JPABaseField {
public:
virtual ~JPAVortexField() {}
virtual void preCalc(JPAFieldData*);
virtual void calc(JPAFieldData*, JPABaseParticle*);
virtual bool isItinRange(JPAFieldData*, f32) { return true; }
};
class JPAConvectionField : public JPABaseField {
public:
virtual ~JPAConvectionField() {}
virtual void preCalc(JPAFieldData*);
virtual void calc(JPAFieldData*, JPABaseParticle*);
virtual bool isItinRange(JPAFieldData*, f32) { return true; }
};
class JPARandomField : public JPABaseField {
public:
virtual ~JPARandomField() {}
virtual void calc(JPAFieldData*, JPABaseParticle*);
};
class JPADragField : public JPABaseField {
public:
virtual ~JPADragField() {}
virtual void init(JPAFieldData*, JPABaseParticle*);
virtual void calc(JPAFieldData*, JPABaseParticle*);
};
class JPASpinField : public JPABaseField {
public:
virtual ~JPASpinField() {}
virtual void preCalc(JPAFieldData*);
virtual void calc(JPAFieldData*, JPABaseParticle*);
virtual bool isItinRange(JPAFieldData*, f32) { return true; }
};
class JPAFieldContainer {
public:
~JPAFieldContainer() {}
public:
/* 0x00 */ JPAGravityField mGravity;
/* 0x04 */ JPAAirField mAir;
/* 0x08 */ JPAMagnetField mMagnet;
/* 0x0C */ JPANewtonField mNewton;
/* 0x10 */ JPAVortexField mVortex;
/* 0x14 */ JPARandomField mRandom;
/* 0x18 */ JPADragField mDrag;
/* 0x1C */ JPAConvectionField mConvection;
/* 0x20 */ JPASpinField mSpin;
};
#endif /* JPAFIELD_H */