#pragma once #include // Para SDL_ControllerButtonEvent #include // Para SDL_GamepadButton #include // Para size_t #include // Para shared_ptr, unique_ptr #include // Para string #include // Para vector class Input; // lines 8-8 class Text; // lines 9-9 enum class InputAction : int; // lines 10-10 struct DefineButtonsButton { std::string label; // Texto en pantalla para el botón InputAction input; // Input asociado SDL_GamepadButton button; // Botón del mando correspondiente // Constructor DefineButtonsButton(const std::string &lbl, InputAction inp, SDL_GamepadButton btn) : label(lbl), input(inp), button(btn) {} }; // Clase Bullet class DefineButtons { private: // Objetos Input *input_; // Objeto pata gestionar la entrada std::shared_ptr text_; // Objeto para escribir texto // Variables bool enabled_ = false; // Indica si el objeto está habilitado int x_; // Posición donde dibujar el texto int y_; // Posición donde dibujar el texto std::vector buttons_; // Vector con las nuevas definiciones de botones/acciones size_t index_controller_ = 0; // Indice del controlador a reasignar size_t index_button_ = 0; // Indice para saber qué botón se está definiendo std::vector controller_names_; // Nombres de los mandos // Incrementa el indice de los botones void incIndexButton(); // Comprueba el botón que se ha pulsado void doControllerButtonDown(const SDL_GamepadButtonEvent &event); // Asigna los botones definidos al input void bindButtons(); // Guarda los cambios en las opciones void saveBindingsToOptions(); // Comprueba que un botón no esté ya asignado bool checkButtonNotInUse(SDL_GamepadButton button); // Limpia la asignación de botones void clearButtons(); public: // Constructor DefineButtons(); // Destructor ~DefineButtons() = default; // Dibuja el objeto en pantalla void render(); // Comprueba los eventos void checkEvents(const SDL_Event &event); // Habilita el objeto bool enable(int index); // Comprueba si está habilitado bool isEnabled(); };