Files
ss/include/d/lyt/d_lyt_common_icon_material.h
T
2025-04-11 17:00:05 +02:00

201 lines
5.2 KiB
C++

#ifndef D_LYT_COMMON_ICON_MATERIAL_H
#define D_LYT_COMMON_ICON_MATERIAL_H
#include "common.h"
#include "d/d_cursor_hit_check.h"
#include "d/lyt/d2d.h"
#include "d/lyt/d_textbox.h"
#include "nw4r/lyt/lyt_bounding.h"
#include "s/s_State.hpp"
class dLytCommonIconMaterialPartBase_c {
public:
virtual ~dLytCommonIconMaterialPartBase_c() {}
virtual nw4r::lyt::Pane *getPane() = 0;
virtual d2d::LytBase_c *getLyt() = 0;
virtual const char *getName() const = 0;
};
/** Material - Bug */
class dLytCommonIconMaterialPart1_c : public dLytCommonIconMaterialPartBase_c {
public:
dLytCommonIconMaterialPart1_c() {}
virtual ~dLytCommonIconMaterialPart1_c() {}
virtual nw4r::lyt::Pane *getPane() override {
return mLyt.getLayout()->GetRootPane();
}
virtual d2d::LytBase_c *getLyt() override {
return &mLyt;
}
virtual const char *getName() const override {
return mLyt.getName();
}
bool build(d2d::ResAccIf_c *resAcc);
bool remove();
bool execute();
void reset();
void setItem(u8 item);
void setNumber(s32 number);
void setOn();
void setOff();
bool isCursorOver() const;
void setVisible(bool visible);
const nw4r::lyt::Bounding *getBounding() const {
return mpBounding;
}
void setBg(bool bg) {
mBg = bg;
}
void setHasNumber(bool hasNumber) {
mNumberV = hasNumber;
}
void setShadow(bool shadow) {
mShadow = shadow;
}
private:
void realizeBg();
void realizeNumberV();
void realizeShadow();
void realizeItem(u8 item);
/* 0x004 */ d2d::dLytSub mLyt;
/* 0x098 */ d2d::AnmGroup_c mAnm[6];
/* 0x218 */ dTextBox_c *mpTextBoxes[2];
/* 0x220 */ nw4r::lyt::Bounding *mpBounding;
/* 0x224 */ dCursorHitCheckLyt_c mCursor;
/* 0x24C */ u8 mItem;
/* 0x24D */ u8 _0x24D[0x254 - 0x24D];
/* 0x254 */ wchar_t mNumberBuf[16];
/* 0x274 */ bool mBg;
/* 0x275 */ bool mNumberV;
/* 0x276 */ bool mShadow;
};
/** Material - Treasure */
class dLytCommonIconMaterialPart2_c : public dLytCommonIconMaterialPartBase_c {
public:
dLytCommonIconMaterialPart2_c() {}
virtual ~dLytCommonIconMaterialPart2_c() {}
virtual nw4r::lyt::Pane *getPane() override {
return mLyt.getLayout()->GetRootPane();
}
virtual d2d::LytBase_c *getLyt() override {
return &mLyt;
}
virtual const char *getName() const override {
return mLyt.getName();
}
bool build(d2d::ResAccIf_c *resAcc);
bool remove();
bool execute();
void reset();
void setItem(u8 item);
void setNumber(s32 number);
void setOn();
void setOff();
bool isCursorOver() const;
void setVisible(bool visible);
const nw4r::lyt::Bounding *getBounding() const {
return mpBounding;
}
void setBg(bool bg) {
mBg = bg;
}
void setHasNumber(bool hasNumber) {
mNumberV = hasNumber;
}
void setShadow(bool shadow) {
mShadow = shadow;
}
private:
void realizeBg();
void realizeNumberV();
void realizeShadow();
void realizeItem(u8 item);
/* 0x004 */ d2d::dLytSub mLyt;
/* 0x098 */ d2d::AnmGroup_c mAnm[6];
/* 0x218 */ dTextBox_c *mpTextBoxes[2];
/* 0x220 */ nw4r::lyt::Bounding *mpBounding;
/* 0x224 */ dCursorHitCheckLyt_c mCursor;
/* 0x24C */ u8 mItem;
/* 0x24D */ u8 _0x24D[0x254 - 0x24D];
/* 0x254 */ wchar_t mNumberBuf[16];
/* 0x274 */ bool mBg;
/* 0x275 */ bool mNumberV;
/* 0x276 */ bool mShadow;
};
class dLytCommonIconMaterial_c : public d2d::dSubPane {
public:
dLytCommonIconMaterial_c() : mStateMgr(*this, sStateID::null), mPart(2) {}
~dLytCommonIconMaterial_c() {}
virtual bool build(d2d::ResAccIf_c *resAcc) override;
virtual bool remove() override;
virtual bool execute() override;
virtual nw4r::lyt::Pane *getPane() override {
switch (mPart) {
case 0: return mPart1.getPane();
case 1: return mPart2.getPane();
default: return nullptr;
}
}
virtual d2d::LytBase_c *getLyt() override {
switch (mPart) {
case 0: return mPart1.getLyt();
case 1: return mPart2.getLyt();
default: return nullptr;
}
}
virtual const char *getName() const override {
switch (mPart) {
case 0: return mPart1.getName();
case 1: return mPart2.getName();
default: return nullptr;
}
}
bool build(d2d::ResAccIf_c *resAcc, u8 variant);
void reset();
void setBg(bool bg);
void setHasNumber(bool hasNumber);
void setShadow(bool shadow);
void setItem(u8 item);
void setNumber(s32 number);
void setOn();
void setOff();
bool isCursorOver() const;
void setVisible(bool visible);
const nw4r::lyt::Bounding *getBounding() const;
private:
STATE_FUNC_DECLARE(dLytCommonIconMaterial_c, None);
STATE_FUNC_DECLARE(dLytCommonIconMaterial_c, In);
STATE_FUNC_DECLARE(dLytCommonIconMaterial_c, Wait);
STATE_FUNC_DECLARE(dLytCommonIconMaterial_c, Out);
/* 0x008 */ UI_STATE_MGR_DECLARE(dLytCommonIconMaterial_c);
/* 0x044 */ u8 mPart;
/* 0x048 */ dLytCommonIconMaterialPart1_c mPart1;
/* 0x0B0 */ dLytCommonIconMaterialPart2_c mPart2;
};
#endif