#ifndef JPAEXTRASHAPE_H #define JPAEXTRASHAPE_H #include "JSystem/JParticle/JPAParticle.h" struct JPAExtraShapeData { /* 0x00 */ u32 mFlags; /* 0x04 */ u32 field_0x04; /* 0x08 */ f32 mAlphaInTiming; /* 0x0C */ f32 mAlphaOutTiming; /* 0x10 */ f32 mAlphaInValue; /* 0x14 */ f32 mAlphaBaseValue; /* 0x18 */ f32 mAlphaOutValue; /* 0x1C */ f32 mAlphaWaveParam1; /* 0x20 */ f32 mAlphaWaveParam2; /* 0x24 */ f32 mAlphaWaveParam3; /* 0x28 */ f32 mAlphaWaveRandom; /* 0x2C */ f32 mScaleInTiming; /* 0x30 */ f32 mScaleOutTiming; /* 0x34 */ f32 mScaleInValueX; /* 0x38 */ f32 mScaleOutValueX; /* 0x3C */ f32 mScaleInValueY; /* 0x40 */ f32 mScaleOutValueY; /* 0x44 */ f32 mRandomScale; /* 0x48 */ s16 mAnmCycleX; /* 0x4A */ s16 mAnmCycleY; /* 0x4C */ f32 mRotateAngle; /* 0x50 */ f32 mRotateSpeed; /* 0x54 */ f32 mRotateRandomAngle; /* 0x58 */ f32 mRotateRandomSpeed; /* 0x5C */ f32 mRotateDirection; }; // Size: 0x60 class JPAExtraShape { public: virtual ~JPAExtraShape() {} virtual BOOL isEnableScale() = 0; virtual BOOL isDiffXY() = 0; virtual BOOL isEnableScaleAnmX() = 0; virtual BOOL isEnableScaleAnmY() = 0; virtual BOOL isEnableScaleBySpeedX() = 0; virtual BOOL isEnableScaleBySpeedY() = 0; virtual f32 getScaleInTiming() = 0; virtual f32 getScaleOutTiming() = 0; virtual f32 getScaleInValueX() = 0; virtual f32 getScaleInValueY() = 0; virtual u8 getAnmTypeX() = 0; virtual u8 getAnmTypeY() = 0; virtual s16 getAnmCycleX() = 0; virtual s16 getAnmCycleY() = 0; virtual f32 getIncreaseRateX() = 0; virtual f32 getIncreaseRateY() = 0; virtual f32 getDecreaseRateX() = 0; virtual f32 getDecreaseRateY() = 0; virtual u8 getPivotX() = 0; virtual u8 getPivotY() = 0; virtual f32 getRandomScale() = 0; virtual BOOL isEnableAlpha() = 0; virtual BOOL isEnableSinWave() = 0; virtual f32 getAlphaInTiming() = 0; virtual f32 getAlphaOutTiming() = 0; virtual f32 getAlphaInValue() = 0; virtual f32 getAlphaBaseValue() = 0; virtual u8 getAlphaWaveType() = 0; virtual f32 getAlphaWaveParam1() = 0; virtual f32 getAlphaWaveParam2() = 0; virtual f32 getAlphaWaveParam3() = 0; virtual f32 getAlphaWaveRandom() = 0; virtual f32 getAlphaIncreaseRate() = 0; virtual f32 getAlphaDecreaseRate() = 0; virtual BOOL isEnableRotate() = 0; virtual f32 getRotateAngle() = 0; virtual f32 getRotateSpeed() = 0; virtual f32 getRotateRandomAngle() = 0; virtual f32 getRotateRandomSpeed() = 0; virtual f32 getRotateDirection() = 0; }; class JPAExtraShapeArc : public JPAExtraShape { public: JPAExtraShapeArc(const u8*); virtual ~JPAExtraShapeArc() {} virtual BOOL isEnableScale() { return (mpData->mFlags & 0x100); } virtual BOOL isDiffXY() { return (mpData->mFlags & 0x200); } virtual BOOL isEnableScaleAnmX() { return (mpData->mFlags & 0x800); } virtual BOOL isEnableScaleAnmY() { return (mpData->mFlags & 0x400); } virtual BOOL isEnableScaleBySpeedX() { return (mpData->mFlags & 0x2000); } virtual BOOL isEnableScaleBySpeedY() { return (mpData->mFlags & 0x1000); } virtual f32 getScaleInTiming() { return mpData->mScaleInTiming; } virtual f32 getScaleOutTiming() { return mpData->mScaleOutTiming; } virtual f32 getScaleInValueX() { return mpData->mScaleInValueX; } virtual f32 getScaleInValueY() { return mpData->mScaleInValueY; } virtual u8 getAnmTypeX() { return (mpData->mFlags >> 18) & 0x01; } virtual u8 getAnmTypeY() { return (mpData->mFlags >> 19) & 0x01; } virtual s16 getAnmCycleX() { return mpData->mAnmCycleX; } virtual s16 getAnmCycleY() { return mpData->mAnmCycleY; } virtual f32 getIncreaseRateX() { return mIncreaseRateX; } virtual f32 getIncreaseRateY() { return mIncreaseRateY; } virtual f32 getDecreaseRateX() { return mDecreaseRateX; } virtual f32 getDecreaseRateY() { return mDecreaseRateY; } virtual u8 getPivotX() { return (mpData->mFlags >> 14) & 0x03; } virtual u8 getPivotY() { return (mpData->mFlags >> 16) & 0x03; } virtual f32 getRandomScale() { return mpData->mRandomScale; } virtual BOOL isEnableAlpha() { return (mpData->mFlags & 0x01); } virtual BOOL isEnableSinWave() { return (mpData->mFlags & 0x02); } virtual f32 getAlphaInTiming() { return mpData->mAlphaInTiming; } virtual f32 getAlphaOutTiming() { return mpData->mAlphaOutTiming; } virtual f32 getAlphaInValue() { return mpData->mAlphaInValue; } virtual f32 getAlphaBaseValue() { return mpData->mAlphaBaseValue; } virtual u8 getAlphaWaveType() { return (mpData->mFlags >> 2) & 0x03; } virtual f32 getAlphaWaveParam1() { return mpData->mAlphaWaveParam1; } virtual f32 getAlphaWaveParam2() { return mpData->mAlphaWaveParam2; } virtual f32 getAlphaWaveParam3() { return mpData->mAlphaWaveParam3; } virtual f32 getAlphaWaveRandom() { return mpData->mAlphaWaveRandom; } virtual f32 getAlphaIncreaseRate() { return mAlphaIncreaseRate; } virtual f32 getAlphaDecreaseRate() { return mAlphaDecreaseRate; } virtual BOOL isEnableRotate() { return (mpData->mFlags & 0x01000000); } virtual f32 getRotateAngle() { return mpData->mRotateAngle; } virtual f32 getRotateSpeed() { return mpData->mRotateSpeed; } virtual f32 getRotateRandomAngle() { return mpData->mRotateRandomAngle; } virtual f32 getRotateRandomSpeed() { return mpData->mRotateRandomSpeed; } virtual f32 getRotateDirection() { return mpData->mRotateDirection; } public: /* 0x04 */ const JPAExtraShapeData * mpData; /* 0x08 */ f32 mAlphaIncreaseRate; /* 0x0C */ f32 mAlphaDecreaseRate; /* 0x10 */ f32 mIncreaseRateX; /* 0x14 */ f32 mDecreaseRateX; /* 0x18 */ f32 mIncreaseRateY; /* 0x1C */ f32 mDecreaseRateY; }; #endif /* JPAEXTRASHAPE_H */