reorganitzada la status bar del editor

This commit is contained in:
2026-04-02 14:13:05 +02:00
parent 5f25562d52
commit acaf434e5c
3 changed files with 84 additions and 69 deletions

View File

@@ -546,49 +546,57 @@ void MapEditor::updateStatusBarInfo() {
statusbar_->setMouseTile(mouse_tile_x_, mouse_tile_y_);
std::string sel_info;
std::string sel_detail;
std::string line2;
std::string line3;
std::string line5;
// Info de drag activo (prioridad)
// Helper para conexiones compactas
auto conn = [](const std::string& r) -> std::string {
if (r == "0" || r.empty()) { return "-"; }
return r.substr(0, r.find('.'));
};
// Info de drag activo (línea 5, junto a tile coords)
if (drag_.target != DragTarget::NONE && drag_.moved) {
switch (drag_.target) {
case DragTarget::PLAYER: sel_info = "player"; break;
case DragTarget::ENEMY_INITIAL: sel_info = "enemy " + std::to_string(drag_.index); break;
case DragTarget::ENEMY_BOUND1: sel_info = "e" + std::to_string(drag_.index) + " bound1"; break;
case DragTarget::ENEMY_BOUND2: sel_info = "e" + std::to_string(drag_.index) + " bound2"; break;
case DragTarget::ITEM: sel_info = "item " + std::to_string(drag_.index); break;
case DragTarget::PLAYER: line5 = "dragging: player"; break;
case DragTarget::ENEMY_INITIAL: line5 = "dragging: enemy " + std::to_string(drag_.index); break;
case DragTarget::ENEMY_BOUND1: line5 = "dragging: e" + std::to_string(drag_.index) + " bound1"; break;
case DragTarget::ENEMY_BOUND2: line5 = "dragging: e" + std::to_string(drag_.index) + " bound2"; break;
case DragTarget::ITEM: line5 = "dragging: item " + std::to_string(drag_.index); break;
case DragTarget::NONE: break;
}
}
// Info de enemigo seleccionado (persistente)
else if (selected_enemy_ >= 0 && selected_enemy_ < static_cast<int>(room_data_.enemies.size())) {
// Líneas 2-3 según selección
if (selected_enemy_ >= 0 && selected_enemy_ < static_cast<int>(room_data_.enemies.size())) {
// Enemigo seleccionado
const auto& e = room_data_.enemies[selected_enemy_];
// Extraer nombre corto de la animación (sin .yaml)
std::string anim = e.animation_path;
auto dot = anim.rfind('.');
if (dot != std::string::npos) { anim = anim.substr(0, dot); }
sel_info = "enemy " + std::to_string(selected_enemy_) + ": " + anim;
sel_detail = e.color + " vx:" + std::to_string(static_cast<int>(e.vx)) +
" vy:" + std::to_string(static_cast<int>(e.vy));
if (e.flip) { sel_detail += " flip"; }
if (e.mirror) { sel_detail += " mirror"; }
}
// Info de la habitación (cuando no hay nada seleccionado)
else {
// Conexiones compactas
auto conn = [](const std::string& r) -> std::string {
if (r == "0" || r.empty()) { return "-"; }
return r.substr(0, r.find('.'));
};
sel_info = "bg:" + room_data_.bg_color + " brd:" + room_data_.border_color;
sel_detail = "u:" + conn(room_data_.upper_room) + " d:" + conn(room_data_.lower_room) +
" l:" + conn(room_data_.left_room) + " r:" + conn(room_data_.right_room) +
" itm:" + room_data_.item_color1 + "/" + room_data_.item_color2;
line2 = "enemy " + std::to_string(selected_enemy_) + ": " + anim + " " + e.color;
line3 = "vx:" + std::to_string(static_cast<int>(e.vx)) +
" vy:" + std::to_string(static_cast<int>(e.vy));
if (e.flip) { line3 += " flip"; }
if (e.mirror) { line3 += " mirror"; }
} else {
// Propiedades de la habitación
std::string conv = "none";
if (room_data_.conveyor_belt_direction < 0) { conv = "left"; }
else if (room_data_.conveyor_belt_direction > 0) { conv = "right"; }
line2 = "bg:" + room_data_.bg_color + " brd:" + room_data_.border_color + " conv:" + conv;
line3 = "u:" + conn(room_data_.upper_room) + " d:" + conn(room_data_.lower_room) +
" l:" + conn(room_data_.left_room) + " r:" + conn(room_data_.right_room) +
" itm:" + room_data_.item_color1 + "/" + room_data_.item_color2;
}
statusbar_->setSelectionInfo(sel_info);
statusbar_->setSelectionDetail(sel_detail);
statusbar_->setLine2(line2);
statusbar_->setLine3(line3);
statusbar_->setLine4(""); // Disponible para uso futuro
statusbar_->setLine5(line5);
// Actualizar el prompt de la consola según la selección
if (selected_enemy_ >= 0) {