#pragma once #include // para SDL_ControllerButtonEvent #include // para SDL_GameControllerButton #include // para shared_ptr, unique_ptr #include // para string #include // para vector class Input; class Text; enum class InputType : int; struct DefineButtonsButton { std::string label; // Texto en pantalla para el botón InputType input; // Input asociado SDL_GameControllerButton button; // Botón del mando correspondiente // Constructor DefineButtonsButton(const std::string &lbl, InputType inp, SDL_GameControllerButton 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(SDL_ControllerButtonEvent &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_GameControllerButton button); public: // Constructor explicit DefineButtons(std::unique_ptr text); // Destructor ~DefineButtons() = default; // Dibuja el objeto en pantalla void render(); // Comprueba las entradas void checkInput(); // Habilita el objeto bool enable(int index); // Comprueba si está habilitado bool isEnabled(); // Intercambia los jugadores asignados a los dos primeros mandos void swapControllers(); };