#pragma once #include #include #include #include #include #include #include "input.hpp" #include "ui/window_message.hpp" namespace Options { struct Gamepad; } // --- Clase DefineButtons: configuración de botones de gamepad --- class DefineButtons { public: // --- Estructuras --- struct Button { std::string label; Input::Action action; int button; Button(std::string label, Input::Action action, int button) : label(std::move(label)), action(action), button(button) {} }; // --- Constructor y destructor --- DefineButtons(); ~DefineButtons() = default; // --- Métodos principales --- void render(); void update(float delta_time); 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 float MESSAGE_DISPLAY_DURATION_S = 2.0F; // Cuánto tiempo mostrar el mensaje en segundos // --- 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