25 #include "twine/twine.h" 26 #include "twine/text.h" 30 #define MAX_BUTTONS 10 31 #define PLASMA_WIDTH 320 32 #define PLASMA_HEIGHT 50 33 #define kQuitEngine 9998 40 enum MenuSettingsType {
42 MenuSettings_CurrentLoadedButton = 0,
44 MenuSettings_NumberOfButtons = 1,
45 MenuSettings_ButtonsBoxHeight = 2,
46 MenuSettings_HeaderEnd = 3,
47 MenuSettings_FirstButtonState = 4,
48 MenuSettings_FirstButton = 5
51 int16 _settings[4 + MAX_BUTTONS * 2] {0};
53 int8 _activeButtonIdx = 0;
56 TextId getButtonTextId(
int buttonIndex)
const {
57 return (TextId)_settings[MenuSettings_FirstButton + buttonIndex * 2];
61 for (int32 i = 0; i < MAX_BUTTONS; ++i) {
64 _settings[MenuSettings_NumberOfButtons] = 0;
65 setButtonsBoxHeight(0);
70 void setButtonsBoxHeight(int16 height) {
71 _settings[MenuSettings_ButtonsBoxHeight] = height;
74 void setActiveButton(int16 buttonIdx) {
75 _activeButtonIdx = buttonIdx;
76 _settings[MenuSettings_CurrentLoadedButton] = buttonIdx;
79 void setActiveButtonTextId(TextId textIndex) {
80 setButtonTextId(getActiveButton(), textIndex);
83 void setButtonTextId(int16 buttonIdx, TextId textIndex) {
84 _settings[MenuSettings_FirstButton + buttonIdx * 2] = (int16)textIndex;
85 _buttonTexts[buttonIdx].
clear();
88 TextId getActiveButtonTextId()
const {
89 return getButtonTextId(getActiveButton());
92 int16 getActiveButtonState()
const {
93 return getButtonState(getActiveButton());
96 int16 getButtonState(
int buttonIndex)
const {
97 return _settings[MenuSettings_FirstButtonState + buttonIndex * 2];
100 const char *getButtonText(
Text *text,
int buttonIndex);
102 int16 getActiveButton()
const {
103 return _activeButtonIdx;
106 int16 getButtonBoxHeight()
const {
107 return _settings[MenuSettings_ButtonsBoxHeight];
110 int16 getButtonCount()
const {
111 return _settings[MenuSettings_NumberOfButtons];
114 void setTextBankId(TextBankId textBankIndex) {
115 _settings[MenuSettings_HeaderEnd] = (int16)textBankIndex;
118 void addButton(TextId textId, int16 state = 0) {
119 const int16 i = _settings[MenuSettings_NumberOfButtons];
120 _settings[i * 2 + MenuSettings_FirstButtonState] = state;
121 _settings[i * 2 + MenuSettings_FirstButton] = (int16)textId;
122 ++_settings[MenuSettings_NumberOfButtons];
125 void addButton(
const char *text, int16 state = 0) {
126 const int16 i = _settings[MenuSettings_NumberOfButtons];
127 _settings[i * 2 + MenuSettings_FirstButtonState] = state;
129 _settings[i * 2 + MenuSettings_FirstButton] = i;
130 _buttonTexts[i] = text;
131 ++_settings[MenuSettings_NumberOfButtons];
139 BodyData *_behaviourEntity =
nullptr;
141 uint _behaviourAnimState[4];
145 int32 _inventorySelectedColor = COLOR_BLACK;
146 int32 _inventorySelectedItem = 0;
149 uint8 *_plasmaEffectPtr =
nullptr;
162 int16 _itemAngle[NUM_INVENTORY_ITEMS];
172 void drawButtonGfx(
const MenuSettings *menuSettings,
const Common::Rect &rect, int32 buttonId,
const char *dialText,
bool hover);
173 void plasmaEffectRenderFrame();
179 int16 drawButtons(
MenuSettings *menuSettings,
bool hover);
181 int32 advoptionsMenu();
184 int32 languageMenu();
186 int32 savemanageMenu();
187 void drawInfoMenu(int16 left, int16 top, int16 width);
188 Common::Rect calcBehaviourRect(int32 left, int32 top, HeroBehaviourType behaviour)
const;
189 bool isBehaviourHovered(int32 left, int32 top, HeroBehaviourType behaviour)
const;
190 void drawBehaviour(int32 left, int32 top, HeroBehaviourType behaviour, int32 angle,
bool cantDrawBox);
191 void drawInventoryItems(int32 left, int32 top);
192 void prepareAndDrawBehaviour(int32 left, int32 top, int32 angle, HeroBehaviourType behaviour);
193 void drawBehaviourMenu(int32 left, int32 top, int32 angle);
194 void drawItem(int32 left, int32 top, int32 item);
196 void drawSpriteAndString(int32 left, int32 top,
const SpriteData &spriteData,
const Common::String &str, int32 color = COLOR_GOLD);
206 void processPlasmaEffect(
const Common::Rect &rect, int32 color);
208 void drawHealthBar(int32 left, int32 right, int32 top, int32 barLeftPadding, int32 barHeight);
209 void drawCloverLeafs(int32 newBoxLeft, int32 boxRight, int32 top);
210 void drawMagicPointsBar(int32 left, int32 right, int32 top, int32 barLeftPadding, int32 barHeight);
211 void drawCoins(int32 left, int32 top);
212 void drawKeys(int32 left, int32 top);
221 void drawRectBorders(int32 left, int32 top, int32 right, int32 bottom, int32 colorLeftTop = COLOR_79, int32 colorRightBottom = COLOR_73);
222 void drawRectBorders(
const Common::Rect &rect, int32 colorLeftTop = COLOR_79, int32 colorRightBottom = COLOR_73);
238 void inGameOptionsMenu();
244 void processBehaviourMenu(
bool behaviourMenu);
246 int32 newGameClassicMenu();
249 void processInventoryMenu();
Definition: achievements_tables.h:27