// BoardModalGame.h #pragma once #include "../../lib/game.h" #include "../../display/low_level_render.h" #include "../../display/low_level_gui.h" #include "input_manager.h" #include "monopoly_board.h" #include "player.h" #include "MonopolyBoardRenderer.h" class BoardModalGame : public Game { bool dismissed; Player* players; int players_count; public: BoardModalGame(uint16_t width, uint16_t height, LowLevelRenderer* renderer, LowLevelGUI* gui, InputManager* input_manager, Player* p, int count) : Game(width, height, renderer, gui, input_manager), dismissed(false), players(p), players_count(count) {} void init() override { dismissed = false; } Type get_type() const override { return Type::MONOPOLY_BOARD; } bool update(const InputEvent& event) override { // Any button dismisses the board view if (event.type == INPUT_BUTTON_0 || event.type == INPUT_BUTTON_1) { dismissed = true; return true; } return false; } void draw() override { renderer->clear_buffer(); MonopolyBoardRenderer::draw_board_perimeter(renderer, width, height, players, players_count, players[0].position /* Just for example, or -1 */); // We'll pass -1 for the general board view to keep it clean MonopolyBoardRenderer::draw_board_perimeter(renderer, width, height, players, players_count, -1); // --- Inner UI --- int cw = width / 7; int ch = height / 7; int ix = cw + 5, iy = ch + 5; int iw = width - 2 * cw - 10, ih = height - 2 * ch - 10; // Title renderer->draw_string_scaled(ix + (iw - 144) / 2, iy + 10, "== BOARD ==", 2); // Legend for players int ly = iy + 40; for (int i = 0; i < players_count; ++i) { char buf[64]; snprintf(buf, sizeof(buf), "%c:%s($%d)", (players[i].token ? players[i].token[0] : 'P'), players[i].name, players[i].balance); renderer->draw_string_scaled(ix + 10, ly, buf, 1); ly += 12; } renderer->draw_string_scaled(ix + (iw - 120) / 2, iy + ih - 15, "PRESS B TO EXIT", 1); } public: bool is_dismissed() const { return dismissed; } };