Files
vibe2_modules/source/modules/input.cppm
Sergio Valor d2648d2328 Experimento parcial de migración a C++20 modules
- Creados módulos core, themes, physics, rendering, input
- Integrados core y themes exitosamente en main.cpp
- Physics, rendering, input comentados por conflictos SDL
- Aplicación funcional con módulos parciales
- Experimento archivado para futuras referencias

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-17 21:55:54 +02:00

124 lines
5.3 KiB
C++

export module vibe2.input;
import vibe2.core;
import vibe2.external.sdl_wrapper;
export namespace vibe2::input {
// Acciones del juego
enum class GameAction {
EXIT,
PUSH_BALLS,
TOGGLE_GRAVITY,
TOGGLE_VSYNC,
TOGGLE_DEBUG,
CYCLE_THEME,
SET_THEME_SUNSET,
SET_THEME_OCEAN,
SET_THEME_NEON,
SET_THEME_FOREST,
SET_SCENARIO_1,
SET_SCENARIO_2,
SET_SCENARIO_3,
SET_SCENARIO_4,
SET_SCENARIO_5,
SET_SCENARIO_6,
SET_SCENARIO_7,
SET_SCENARIO_8,
NONE
};
// Mapeador básico de teclas
class KeyMapper {
public:
static GameAction getActionForKey(int key) {
switch (key) {
case vibe2::sdl::KEY_ESCAPE: return GameAction::EXIT;
case vibe2::sdl::KEY_SPACE: return GameAction::PUSH_BALLS;
case vibe2::sdl::KEY_G: return GameAction::TOGGLE_GRAVITY;
case vibe2::sdl::KEY_V: return GameAction::TOGGLE_VSYNC;
case vibe2::sdl::KEY_H: return GameAction::TOGGLE_DEBUG;
case vibe2::sdl::KEY_T: return GameAction::CYCLE_THEME;
case vibe2::sdl::KEY_F1: return GameAction::SET_THEME_SUNSET;
case vibe2::sdl::KEY_F2: return GameAction::SET_THEME_OCEAN;
case vibe2::sdl::KEY_F3: return GameAction::SET_THEME_NEON;
case vibe2::sdl::KEY_F4: return GameAction::SET_THEME_FOREST;
case vibe2::sdl::KEY_1: return GameAction::SET_SCENARIO_1;
case vibe2::sdl::KEY_2: return GameAction::SET_SCENARIO_2;
case vibe2::sdl::KEY_3: return GameAction::SET_SCENARIO_3;
case vibe2::sdl::KEY_4: return GameAction::SET_SCENARIO_4;
case vibe2::sdl::KEY_5: return GameAction::SET_SCENARIO_5;
case vibe2::sdl::KEY_6: return GameAction::SET_SCENARIO_6;
case vibe2::sdl::KEY_7: return GameAction::SET_SCENARIO_7;
case vibe2::sdl::KEY_8: return GameAction::SET_SCENARIO_8;
default: return GameAction::NONE;
}
}
static const char* getActionDescription(GameAction action) {
switch (action) {
case GameAction::EXIT: return "Salir";
case GameAction::PUSH_BALLS: return "Impulsar pelotas";
case GameAction::TOGGLE_GRAVITY: return "Alternar gravedad";
case GameAction::TOGGLE_VSYNC: return "Alternar V-Sync";
case GameAction::TOGGLE_DEBUG: return "Alternar debug";
case GameAction::CYCLE_THEME: return "Cambiar tema";
case GameAction::SET_THEME_SUNSET: return "Tema Atardecer";
case GameAction::SET_THEME_OCEAN: return "Tema Océano";
case GameAction::SET_THEME_NEON: return "Tema Neón";
case GameAction::SET_THEME_FOREST: return "Tema Bosque";
case GameAction::SET_SCENARIO_1: return "1 pelota";
case GameAction::SET_SCENARIO_2: return "10 pelotas";
case GameAction::SET_SCENARIO_3: return "100 pelotas";
case GameAction::SET_SCENARIO_4: return "500 pelotas";
case GameAction::SET_SCENARIO_5: return "1K pelotas";
case GameAction::SET_SCENARIO_6: return "10K pelotas";
case GameAction::SET_SCENARIO_7: return "50K pelotas";
case GameAction::SET_SCENARIO_8: return "100K pelotas";
default: return "Desconocido";
}
}
};
// Utilidades para conversión de escenarios
namespace utils {
constexpr int SCENARIO_COUNTS[8] = {1, 10, 100, 500, 1000, 10000, 50000, 100000};
inline int getScenarioIndex(GameAction action) {
switch (action) {
case GameAction::SET_SCENARIO_1: return 0;
case GameAction::SET_SCENARIO_2: return 1;
case GameAction::SET_SCENARIO_3: return 2;
case GameAction::SET_SCENARIO_4: return 3;
case GameAction::SET_SCENARIO_5: return 4;
case GameAction::SET_SCENARIO_6: return 5;
case GameAction::SET_SCENARIO_7: return 6;
case GameAction::SET_SCENARIO_8: return 7;
default: return -1;
}
}
inline int getScenarioCount(GameAction action) {
int index = getScenarioIndex(action);
return (index >= 0) ? SCENARIO_COUNTS[index] : 0;
}
inline ColorTheme getThemeFromAction(GameAction action) {
switch (action) {
case GameAction::SET_THEME_SUNSET: return ColorTheme::SUNSET;
case GameAction::SET_THEME_OCEAN: return ColorTheme::OCEAN;
case GameAction::SET_THEME_NEON: return ColorTheme::NEON;
case GameAction::SET_THEME_FOREST: return ColorTheme::FOREST;
default: return ColorTheme::SUNSET;
}
}
inline bool isScenarioAction(GameAction action) {
return action >= GameAction::SET_SCENARIO_1 && action <= GameAction::SET_SCENARIO_8;
}
inline bool isThemeAction(GameAction action) {
return action >= GameAction::SET_THEME_SUNSET && action <= GameAction::SET_THEME_FOREST;
}
}
}