60 lines
1.9 KiB
C++
60 lines
1.9 KiB
C++
// 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; }
|
|
|
|
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);
|
|
|
|
// --- 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; }
|
|
};
|