editor: posibilitat de pintar en els dos tilemaps a l'hora

This commit is contained in:
2026-04-12 16:05:25 +02:00
parent 6644eedfcd
commit a5148f5ed5
3 changed files with 32 additions and 2 deletions

View File

@@ -130,7 +130,8 @@ auto MapEditor::showGrid(bool show) -> std::string {
auto MapEditor::setEditingCollision(bool collision) -> std::string {
editing_collision_ = collision;
brush_.clear(); // Resetear brush al cambiar de modo
brush_.clear(); // Resetear brush al cambiar de modo
if (editing_collision_) { auto_collision_ = -1; } // Desactivar auto-collision en modo colisión puro
return editing_collision_ ? "Editing: collision" : "Editing: draw";
}
@@ -492,6 +493,18 @@ void MapEditor::handleEvent(const SDL_Event& event) { // NOLINT(readability-fun
return;
}
// C: ciclar auto-collision (solo en modo draw)
if (event.type == SDL_EVENT_KEY_DOWN && event.key.key == kc->key("EDITOR", "auto_collision") && static_cast<int>(event.key.repeat) == 0 && !editing_collision_) {
if (auto_collision_ == -1) {
auto_collision_ = 1; // WALL
} else if (auto_collision_ == 1) {
auto_collision_ = 2; // PASSABLE
} else {
auto_collision_ = -1; // desactivado
}
return;
}
// Cursores: navegar a habitación adyacente
if (event.type == SDL_EVENT_KEY_DOWN && static_cast<int>(event.key.repeat) == 0) {
std::string direction;
@@ -970,6 +983,14 @@ void MapEditor::stampBrushAt(int tile_x, int tile_y) {
room_data_.tile_map[idx] = value;
room_->setTile(idx, value);
}
// Auto-collision: pintar también en collision tilemap
if (auto_collision_ >= 0) {
int col_value = (value == BrushPattern::ERASE) ? 0 : auto_collision_;
if (idx < static_cast<int>(room_data_.collision_tile_map.size()) && room_data_.collision_tile_map[idx] != col_value) {
room_data_.collision_tile_map[idx] = col_value;
room_->setCollisionTile(idx, col_value);
}
}
}
}
}
@@ -1461,7 +1482,7 @@ void MapEditor::updateStatusBarInfo() { // NOLINT(readability-function-cognitiv
}
}
// Línea 4: brush activo
// Línea 4: brush activo + auto-collision
std::string line4;
if (!brush_.isEmpty()) {
if (brush_.width == 1 && brush_.height == 1) {
@@ -1471,6 +1492,10 @@ void MapEditor::updateStatusBarInfo() { // NOLINT(readability-function-cognitiv
line4 = "brush: " + std::to_string(brush_.width) + "x" + std::to_string(brush_.height);
}
}
if (!editing_collision_ && auto_collision_ >= 0) {
const char* col_name = (auto_collision_ == 1) ? "wall" : "pass";
line4 += (line4.empty() ? "" : " ") + std::string("[col: ") + col_name + "]";
}
statusbar_->setLine2(line2);
statusbar_->setLine3(line3);