#pragma once #include #include #include #include #include #include #include "input.h" #include "ui/window_message.h" namespace Options { struct Gamepad; } // --- Clase DefineButtons: configuración de botones de gamepad --- class DefineButtons { public: // --- Estructuras --- struct Button { std::string label; Input::Action action; SDL_GamepadButton button; Button(std::string label, Input::Action action, SDL_GamepadButton button) : label(std::move(label)), action(action), button(button) {} }; // --- Constructor y destructor --- DefineButtons(); ~DefineButtons() = default; // --- Métodos principales --- void render(); void update(); void handleEvents(const SDL_Event &event); auto enable(Options::Gamepad *options_gamepad) -> bool; void disable(); // --- Getters --- [[nodiscard]] auto isReadyToClose() const -> bool; [[nodiscard]] auto isEnabled() const -> bool { return enabled_; } [[nodiscard]] auto isFinished() const -> bool { return finished_; } private: // --- Constantes --- static constexpr size_t MESSAGE_DISPLAY_FRAMES = 120; // Cuánto tiempo mostrar el mensaje (en frames) ~2 segundos a 60fps // --- Objetos y punteros --- Input *input_ = nullptr; // Entrada del usuario Options::Gamepad *options_gamepad_ = nullptr; // Opciones del gamepad std::unique_ptr window_message_; // Mensaje de ventana // --- Variables de estado --- std::vector