- 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>
124 lines
5.3 KiB
C++
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;
|
|
}
|
|
}
|
|
} |