#ifndef MSG_SCRN_D_MSG_SCRN_BASE_H
#define MSG_SCRN_D_MSG_SCRN_BASE_H

#include "JSystem/J2DGraph/J2DTextBox.h"
#include "d/d_drawlist.h"

class COutFont_c;
class CPaneMgr;
struct CharInfo_c;

class dMsgScrnBase_c : public dDlst_base_c {
public:
    dMsgScrnBase_c();
    void init();
    void drawOutFont(f32, f32, f32);
    void setString(char DUSK_CONST*, char DUSK_CONST*);
    void setRubyString(char DUSK_CONST*);
    bool isTalkNow();

    virtual void draw();
    virtual ~dMsgScrnBase_c();
    virtual void exec() {}
    virtual void multiDraw();
    virtual void drawSelf();
    virtual void setSelectString(char DUSK_CONST*, char DUSK_CONST*, char DUSK_CONST*) {}
    virtual void setSelectRubyString(char DUSK_CONST*, char DUSK_CONST*, char DUSK_CONST*) {}
    virtual void arwAnimeInit() {}
    virtual void arwAnimeMove() {}
    virtual void dotAnimeInit() {}
    virtual void dotAnimeMove() {}
    virtual bool isSelect() { return true; }
    virtual void selectAnimeInit(u8, u8, f32, u8) {}
    virtual bool selectAnimeMove(u8, u8, bool) { return true; }
    virtual bool selectAnimeEnd() { return true; }
    virtual void fukiScale(f32);
    virtual void fukiTrans(f32, f32);
    virtual void fukiAlpha(f32);
    virtual void fontAlpha(f32);
    virtual void fukiPosCalc(u8) {}

    f32 getSelTextBoxPosX(int idx) { return mSelTextBoxPosX[idx]; }
    f32 getSelTextBoxPosY(int idx) { return mSelTextBoxPosY[idx]; }
    f32 getTextBoxPosX() { return mTextBoxPosX; }
    f32 getTextBoxPosY() { return mTextBoxPosY; }
    f32 getTextBoxScaleX() { return mTextBoxScaleX; }
    f32 getTextBoxScaleY() { return mTextBoxScaleY; }
    f32 getTextBoxPosOffsetY() { return mTextBoxPosOffsetY; }
    f32 getFontSizeX() { return mFontSize.mSizeX; }
    f32 getFontSizeY() { return mFontSize.mSizeY; }
    f32 getRubySize() { return mRubySize; }
    f32 getTBoxWidth() { return mTBoxWidth; }
    f32 getTBoxHeight() { return mTBoxHeight; }
    f32 getLineSpace() { return mLineSpace; }
    f32 getCharSpace() { return mCharSpace; }
    f32 getRubyCharSpace() { return mRubyCharSpace; }
    f32 getSelFontSize() { return mSelFontSize; }
    f32 getSelRubySize() { return mSelRubySize; }
    f32 getSelTBoxWidth() { return mSelTBoxWidth; }
    f32 getSelCharSpace() { return mSelCharSpace; }
    f32 getSelRubyCharSpace() { return mSelRubyCharSpace; }
    CharInfo_c* getCharInfoPtr() { return mCharInfoPtr; }
    void setCharAlphaRate(f32 rate) { mCharAlphaRate = rate; }
    void setTextBoxPosOffsetY(f32 offset) { mTextBoxPosOffsetY = offset; }
    void setMsgID(u16 msgID) { mMsgID = msgID; }
    void setOutFont(COutFont_c* font) { mpOutFont = font; }

    /* 0x04 */ J2DScreen* mpScreen;
    /* 0x08 */ CPaneMgr* mpPmP_c;
    /* 0x0C */ CPaneMgr* mpTm_c[7];
    /* 0x28 */ CPaneMgr* mpTmr_c[7];
    /* 0x44 */ COutFont_c* mpOutFont;
    /* 0x48 */ dDlst_base_c* field_0x48;
    /* 0x4C */ u32 field_0x4c;
    /* 0x50 */ CharInfo_c* mCharInfoPtr;
    /* 0x54 */ JUTFont* field_0x54;
    /* 0x58 */ J2DTextBox::TFontSize mFontSize;
    /* 0x60 */ f32 mRubySize;
    /* 0x64 */ f32 mTextBoxPosX;
    /* 0x68 */ f32 mTextBoxPosY;
    /* 0x6C */ f32 mTextBoxScaleX;
    /* 0x70 */ f32 mTextBoxScaleY;
    /* 0x74 */ f32 mTBoxWidth;
    /* 0x78 */ f32 mTBoxHeight;
    /* 0x7C */ f32 mLineSpace;
    /* 0x80 */ f32 mCharSpace;
    /* 0x84 */ f32 mRubyCharSpace;
    /* 0x88 */ f32 mSelFontSize;
    /* 0x8C */ f32 mSelRubySize;
    /* 0x90 */ f32 mSelTextBoxPosX[3];
    /* 0x9C */ f32 mSelTextBoxPosY[3];
    /* 0xA8 */ f32 mSelTBoxWidth;
    /* 0xAC */ f32 mSelCharSpace;
    /* 0xB0 */ f32 mSelRubyCharSpace;
    /* 0xB4 */ f32 mTextBoxPosOffsetY;
    /* 0xB8 */ f32 field_0xb8;
    /* 0xBC */ f32 mCharAlphaRate;
    /* 0xC0 */ u16 mMsgID;
};

#endif /* MSG_SCRN_D_MSG_SCRN_BASE_H */
