#ifndef D_MAGMA_H #define D_MAGMA_H #include "SSystem/SComponent/c_xyz.h" #include "dolphin/mtx/mtx.h" #include "JSystem/J3DGraphBase/J3DPacket.h" class dMagma_ball_c { public: dMagma_ball_c() {} virtual ~dMagma_ball_c() {} virtual void calc(f32, u8, int) = 0; virtual void update() = 0; virtual void setup(f32, u8, int) = 0; void draw(); BOOL rangeCheck(cXyz&, f32*); protected: /* 0x04 */ cXyz mPos; /* 0x10 */ f32 mScale; /* 0x14 */ f32 mBaseY; /* 0x18 */ s16 mWave; /* 0x1A */ u8 mTimer; /* 0x1C */ Mtx mPosMtx; /* 0x4C */ Mtx mTexProjMtx; }; class dMagma_ballPath_c : public dMagma_ball_c { public: dMagma_ballPath_c() {} virtual ~dMagma_ballPath_c() {} virtual void calc(f32, u8, int); virtual void update(); virtual void setup(f32, u8, int); private: /* 0x7C */ u8 mWaveTimer; }; class dMagma_ballBoss_c : public dMagma_ball_c { public: dMagma_ballBoss_c() {} virtual ~dMagma_ballBoss_c() {} virtual void calc(f32, u8, int); virtual void update(); virtual void setup(f32, u8, int); private: /* 0x7C */ s16 field_0x7C; }; class dMagma_floor_c { public: ~dMagma_floor_c(); dMagma_floor_c(); void draw(); void calc(int); void update(); dMagma_ball_c** create(cXyz&, cXyz&, s16, u8, int); void remove(); dMagma_floor_c* getNext() { return mpNext; } void setNext(dMagma_floor_c* v) { mpNext = v; } dMagma_ball_c** getBall() { return mpBalls; } int getBallNum() { return mBallNum; } cXyz* getPos() { return &mPos; } f32 getScaleX() { return mScaleX; } f32 getScaleZ() { return mScaleZ; } void setYpos(f32 y) { mPos.y = y; } private: /* 0x00 */ dMagma_ball_c** mpBalls; /* 0x04 */ u8 mBallNum; /* 0x05 */ u8 mPathNo; /* 0x06 */ u8 field_0x06[0x08 - 0x06]; /* 0x08 */ cXyz mPos; /* 0x14 */ f32 mScaleX; /* 0x18 */ f32 mScaleZ; /* 0x1C */ Mtx mPosMtx; /* 0x4C */ Mtx mTexMtx0; /* 0x7C */ Mtx mPostMtx0; /* 0xAC */ dMagma_floor_c* mpNext; }; class dMagma_room_c { public: void newFloor(dMagma_floor_c*); dMagma_floor_c* getFloor() { return mpFirst; } void deleteFloor(); dMagma_room_c(); private: /* 0x0 */ dMagma_floor_c* mpFirst; }; class dMagma_packet_c : public J3DPacket { public: dMagma_packet_c(); void calc(); void update(); f32 checkYpos(cXyz&); dMagma_floor_c* newFloor(cXyz&, cXyz&, int, s16); void deleteRoom(int roomNo) { mRoom[roomNo].deleteFloor(); } virtual void draw(); virtual ~dMagma_packet_c(); static GXTexObj* getKuroTexObj() { return &mKuroTexObj; } static GXTexObj* getColTexObj() { return &mColTexObj; } static MtxP getKuroMtx() { return mKuroMtx; } static GXTexObj mKuroTexObj; static Mtx mKuroMtx; static GXTexObj mColTexObj; static Mtx mBallMtx; static Mtx mFloorMtx; private: /* 0x010 */ dMagma_floor_c mFloor[8]; /* 0x590 */ dMagma_room_c mRoom[64]; /* 0x690 */ GXColor mColor1; /* 0x694 */ f32 mTimer; }; #endif /* D_MAGMA_H */