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,14 +4,14 @@
// Simple demo game to test the launcher
#include "demo_game.h"
#include "board_config.h"
#include "input_manager.h"
#include <stdio.h>
#include <string.h>
extern Font font_5x5_obj;
DemoGame::DemoGame(uint16_t width, uint16_t height, LowLevelRenderer* renderer, LowLevelGUI* gui)
: Game(width, height, renderer, gui), tap_count(0), exit_requested(false) {
DemoGame::DemoGame(uint16_t width, uint16_t height, LowLevelRenderer* renderer, LowLevelGUI* gui, InputManager* input_manager)
: Game(width, height, renderer, gui, input_manager), tap_count(0), exit_requested(false) {
}
void DemoGame::init() {
@@ -54,11 +54,11 @@ void DemoGame::draw() {
// Instructions
if (tap_count < 3) {
#ifdef BUTTON_KEY0_PIN
renderer->draw_string(width/2 - 80, y + 80, "Tap or press 3 times", true);
#else
renderer->draw_string(width/2 - 80, y + 80, "Tap 3 times to exit", true);
#endif
if (input_manager->has_buttons()) {
renderer->draw_string(width/2 - 80, y + 80, "Tap or press 3 times", true);
} else {
renderer->draw_string(width/2 - 80, y + 80, "Tap 3 times to exit", true);
}
} else {
renderer->draw_string(width/2 - 70, y + 80, "Exiting to menu...", true);
}

View File

@@ -16,11 +16,12 @@
*/
class DemoGame : public Game {
public:
DemoGame(uint16_t width, uint16_t height, LowLevelRenderer* renderer, LowLevelGUI* gui);
DemoGame(uint16_t width, uint16_t height, LowLevelRenderer* renderer, LowLevelGUI* gui, InputManager* input_manager);
void init() override;
bool update(const InputEvent& event) override;
void draw() override;
bool wants_to_exit() const override { return exit_requested; }
private:
int tap_count;

View File

@@ -4,15 +4,15 @@
// Game logic, input handling, and rendering for Tic-Tac-Toe
#include "tic_tac_toe.h"
#include "board_config.h"
#include "input_manager.h"
#include <stdio.h>
#include <string.h>
// Font reference from display system
extern Font font_5x5_obj;
TicTacToeGame::TicTacToeGame(uint16_t width, uint16_t height, LowLevelRenderer* renderer, LowLevelGUI* gui)
: Game(width, height, renderer, gui) {
TicTacToeGame::TicTacToeGame(uint16_t width, uint16_t height, LowLevelRenderer* renderer, LowLevelGUI* gui, InputManager* input_manager)
: Game(width, height, renderer, gui, input_manager) {
// Initialize statistics to zero
state.x_wins = 0;
state.o_wins = 0;
@@ -220,20 +220,20 @@ void TicTacToeGame::draw() {
} else {
renderer->draw_string(20, 40, "TIE GAME!", true);
}
#ifdef BUTTON_KEY0_PIN
renderer->draw_string(20, 55, "Touch or KEY0 to restart", true);
#else
renderer->draw_string(20, 55, "Touch to restart", true);
#endif
if (input_manager->has_buttons()) {
renderer->draw_string(20, 55, "Touch or KEY0 to restart", true);
} else {
renderer->draw_string(20, 55, "Touch to restart", true);
}
} else {
char turn_text[30];
snprintf(turn_text, sizeof(turn_text), "Turn: %s", state.current_player == 1 ? "X" : "O");
renderer->draw_string(20, 40, turn_text, true);
#ifdef BUTTON_KEY0_PIN
renderer->draw_string(20, 55, "Touch cell or use keys", true);
#else
renderer->draw_string(20, 55, "Touch cell to play", true);
#endif
if (input_manager->has_buttons()) {
renderer->draw_string(20, 55, "Touch cell or use keys", true);
} else {
renderer->draw_string(20, 55, "Touch cell to play", true);
}
}
// Draw game board (use same layout as touch detection!)

View File

@@ -26,8 +26,9 @@ public:
* @param height Display height in pixels
* @param renderer Pointer to low-level rendering interface
* @param gui Pointer to GUI drawing primitives
* @param input_manager Pointer to input manager for capability queries
*/
TicTacToeGame(uint16_t width, uint16_t height, LowLevelRenderer* renderer, LowLevelGUI* gui);
TicTacToeGame(uint16_t width, uint16_t height, LowLevelRenderer* renderer, LowLevelGUI* gui, InputManager* input_manager);
/**
* @brief Initialize game state (reset board, keep statistics)