editar propietats del enemic
This commit is contained in:
@@ -30,7 +30,11 @@ class MapEditor {
|
||||
void update(float delta_time);
|
||||
void render();
|
||||
void handleEvent(const SDL_Event& event);
|
||||
auto revert() -> std::string; // Revierte todos los cambios al estado original
|
||||
auto revert() -> std::string;
|
||||
|
||||
// Comandos SET para modificar el enemigo seleccionado (llamados desde console_commands)
|
||||
auto setEnemyProperty(const std::string& property, const std::string& value) -> std::string;
|
||||
[[nodiscard]] auto hasSelectedEnemy() const -> bool;
|
||||
|
||||
private:
|
||||
static MapEditor* instance_; // [SINGLETON] Objeto privado
|
||||
@@ -38,49 +42,47 @@ class MapEditor {
|
||||
MapEditor(); // Constructor
|
||||
~MapEditor(); // Destructor
|
||||
|
||||
// Tipos para drag & drop
|
||||
enum class DragTarget { NONE,
|
||||
PLAYER,
|
||||
ENEMY_INITIAL,
|
||||
ENEMY_BOUND1,
|
||||
ENEMY_BOUND2,
|
||||
ITEM };
|
||||
// Tipos para drag & drop y selección
|
||||
enum class DragTarget { NONE, PLAYER, ENEMY_INITIAL, ENEMY_BOUND1, ENEMY_BOUND2, ITEM };
|
||||
|
||||
struct DragState {
|
||||
DragTarget target{DragTarget::NONE};
|
||||
int index{-1}; // Índice del enemigo o item en room_data_
|
||||
float offset_x{0.0F}; // Offset entre el cursor y el origen de la entidad al inicio del drag
|
||||
int index{-1};
|
||||
float offset_x{0.0F};
|
||||
float offset_y{0.0F};
|
||||
float snap_x{0.0F}; // Posición snapped actual (para preview)
|
||||
float snap_x{0.0F};
|
||||
float snap_y{0.0F};
|
||||
bool moved{false}; // true si el ratón se movió durante el drag
|
||||
};
|
||||
|
||||
// Métodos internos
|
||||
void updateMousePosition(); // Convierte coordenadas de ventana a coordenadas de juego y tile
|
||||
void renderEnemyBoundaries(); // Dibuja marcadores de boundaries y líneas de ruta
|
||||
void renderBoundaryMarker(float x, float y, Uint8 color); // Dibuja un marcador de boundary en una posición
|
||||
void renderSelectionHighlight(); // Dibuja highlight del elemento seleccionado/arrastrado
|
||||
void handleMouseDown(float game_x, float game_y); // Procesa click del ratón (hit test + inicio de drag)
|
||||
void handleMouseUp(); // Procesa soltar el ratón (commit del drag + autosave)
|
||||
void updateDrag(); // Actualiza la posición snapped durante el drag
|
||||
void autosave(); // Guarda los cambios puntuales al YAML
|
||||
static auto snapToGrid(float value) -> float; // Alinea un valor a la cuadrícula de 8x8
|
||||
static auto pointInRect(float px, float py, const SDL_FRect& rect) -> bool; // Hit test punto en rectángulo
|
||||
void updateMousePosition();
|
||||
void renderEnemyBoundaries();
|
||||
void renderBoundaryMarker(float x, float y, Uint8 color);
|
||||
void renderSelectionHighlight();
|
||||
void handleMouseDown(float game_x, float game_y);
|
||||
void handleMouseUp();
|
||||
void updateDrag();
|
||||
void autosave();
|
||||
void updateStatusBarInfo();
|
||||
static auto snapToGrid(float value) -> float;
|
||||
static auto pointInRect(float px, float py, const SDL_FRect& rect) -> bool;
|
||||
|
||||
// Estado del editor
|
||||
bool active_{false};
|
||||
DragState drag_;
|
||||
int selected_enemy_{-1}; // Índice del enemigo seleccionado (-1 = ninguno)
|
||||
|
||||
// Datos de la habitación
|
||||
Room::Data room_data_; // Copia mutable (para boundaries y edición)
|
||||
std::string room_path_; // Nombre del fichero (ej: "06.yaml")
|
||||
std::string file_path_; // Ruta completa del fichero en disco
|
||||
Room::Data room_data_;
|
||||
std::string room_path_;
|
||||
std::string file_path_;
|
||||
|
||||
// YAML: nodo vivo (se edita parcialmente) y backup para revert
|
||||
fkyaml::node yaml_; // Nodo YAML actual (editado parcialmente)
|
||||
fkyaml::node yaml_backup_; // Backup del YAML original al entrar
|
||||
// YAML: nodo original (para campos que no se editan: name_ca, etc.)
|
||||
fkyaml::node yaml_;
|
||||
fkyaml::node yaml_backup_;
|
||||
|
||||
// Referencias a objetos vivos (para rendering)
|
||||
// Referencias a objetos vivos
|
||||
std::shared_ptr<Room> room_;
|
||||
std::shared_ptr<Player> player_;
|
||||
std::shared_ptr<Scoreboard::Data> scoreboard_data_;
|
||||
@@ -88,13 +90,13 @@ class MapEditor {
|
||||
// Barra de estado del editor
|
||||
std::unique_ptr<EditorStatusBar> statusbar_;
|
||||
|
||||
// Estado del ratón en coordenadas de juego
|
||||
// Estado del ratón
|
||||
float mouse_game_x_{0.0F};
|
||||
float mouse_game_y_{0.0F};
|
||||
int mouse_tile_x_{0};
|
||||
int mouse_tile_y_{0};
|
||||
|
||||
// Estado previo de invencibilidad (para restaurar al salir)
|
||||
// Estado previo de invencibilidad
|
||||
Options::Cheat::State invincible_before_editor_{Options::Cheat::State::DISABLED};
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user