67 lines
2.3 KiB
C++
67 lines
2.3 KiB
C++
#pragma once
|
|
|
|
#ifdef _DEBUG
|
|
|
|
#include <SDL3/SDL.h>
|
|
|
|
#include <functional> // Para function
|
|
#include <memory> // Para shared_ptr
|
|
#include <string> // Para string
|
|
|
|
class Surface;
|
|
|
|
/**
|
|
* @brief Selector visual de tiles de un tileset
|
|
*
|
|
* Muestra el tileset centrado en el play area.
|
|
* Hover ilumina el tile bajo el cursor.
|
|
* Click selecciona el tile y cierra el picker.
|
|
* Mouse wheel para scroll si el tileset es más alto que el play area.
|
|
* ESC o click derecho para cancelar.
|
|
*/
|
|
class TilePicker {
|
|
public:
|
|
TilePicker() = default;
|
|
~TilePicker() = default;
|
|
|
|
// Abre el picker con un tileset
|
|
// bg_color: color de fondo del panel (-1 = negro)
|
|
// source_color/target_color: sustitución de color (-1 = sin sustitución)
|
|
// tile_spacing_in: pixels de separación entre tiles en el fichero fuente
|
|
// tile_spacing_out: pixels de separación visual entre tiles al mostrar
|
|
void open(const std::string& tileset_name, int current_tile = -1,
|
|
int bg_color = -1, int source_color = -1, int target_color = -1,
|
|
int tile_spacing_in = 0, int tile_spacing_out = 1);
|
|
void close();
|
|
[[nodiscard]] auto isOpen() const -> bool { return open_; }
|
|
|
|
void render();
|
|
void handleEvent(const SDL_Event& event);
|
|
|
|
// Callback al seleccionar un tile (índice del tile)
|
|
std::function<void(int)> on_select;
|
|
|
|
private:
|
|
void updateMousePosition();
|
|
|
|
bool open_{false};
|
|
std::shared_ptr<Surface> tileset_; // Surface del tileset original
|
|
std::shared_ptr<Surface> frame_surface_; // Surface compuesta: borde + tileset
|
|
SDL_FRect frame_dst_{}; // Posición del frame en pantalla
|
|
int tileset_width_{0}; // Ancho del tileset en tiles
|
|
int tileset_height_{0}; // Alto del tileset en tiles
|
|
int current_tile_{-1}; // Tile actualmente seleccionado (highlight)
|
|
int hover_tile_{-1}; // Tile bajo el cursor
|
|
|
|
// Spacing
|
|
int spacing_in_{0}; // Spacing en el fichero fuente
|
|
int spacing_out_{1}; // Spacing visual al mostrar
|
|
|
|
// Scroll y posicionamiento
|
|
int scroll_y_{0}; // Scroll vertical en pixels
|
|
int offset_x_{0}; // Offset X para centrar en pantalla
|
|
int visible_height_{0}; // Altura visible en pixels
|
|
};
|
|
|
|
#endif // _DEBUG
|