input manager provides ground of truth on device input choise

This commit is contained in:
Adolfo Reyna
2026-01-30 22:07:31 -05:00
parent 436245a7a2
commit f860d4f5e6
10 changed files with 97 additions and 44 deletions

View File

@@ -4,19 +4,19 @@
// Menu system for selecting and launching games
#include "game_launcher.h"
#include "board_config.h"
#include "input_manager.h"
#include "display/low_level_render.h"
#include "display/low_level_gui.h"
#include <stdio.h>
GameLauncher::GameLauncher(uint16_t width, uint16_t height,
LowLevelRenderer* renderer, LowLevelGUI* gui)
: width(width), height(height), renderer(renderer), gui(gui),
LowLevelRenderer* renderer, LowLevelGUI* gui, InputManager* input_manager)
: width(width), height(height), renderer(renderer), gui(gui), input_manager(input_manager),
selected_index(0), selected_game(nullptr) {
}
void GameLauncher::register_game(const char* name, const char* description,
Game* (*factory)(uint16_t, uint16_t, LowLevelRenderer*, LowLevelGUI*)) {
Game* (*factory)(uint16_t, uint16_t, LowLevelRenderer*, LowLevelGUI*, InputManager*)) {
GameEntry entry;
entry.name = name;
entry.description = description;
@@ -51,11 +51,11 @@ void GameLauncher::draw() {
// Draw instructions at bottom
const char* instructions;
#ifdef BUTTON_KEY0_PIN
instructions = "Touch game or use KEY0/KEY1";
#else
instructions = "Touch game to play";
#endif
if (input_manager->has_buttons()) {
instructions = "Touch game or use KEY0/KEY1";
} else {
instructions = "Touch game to play";
}
renderer->set_font(&font_5x5_obj);
renderer->draw_string_scaled(30, height - 35, instructions, 2);
}
@@ -75,7 +75,7 @@ bool GameLauncher::update(const InputEvent& event) {
if (event.y >= y - 5 && event.y < y + MENU_ITEM_HEIGHT - 5) {
// Game selected - create instance
printf("Selected game: %s\n", games[i].name);
selected_game = games[i].factory(width, height, renderer, gui);
selected_game = games[i].factory(width, height, renderer, gui, input_manager);
if (selected_game) {
selected_game->init();
return true; // Signal game selected
@@ -100,7 +100,7 @@ bool GameLauncher::update(const InputEvent& event) {
// Select current game
if (selected_index >= 0 && selected_index < (int)games.size()) {
printf("Selected game: %s\n", games[selected_index].name);
selected_game = games[selected_index].factory(width, height, renderer, gui);
selected_game = games[selected_index].factory(width, height, renderer, gui, input_manager);
if (selected_game) {
selected_game->init();
return true; // Signal game selected