editor: posibilitat de pintar en els dos tilemaps a l'hora
This commit is contained in:
@@ -111,6 +111,10 @@ scopes:
|
||||
key: "8"
|
||||
code: "8"
|
||||
desc: "draw/collision mode"
|
||||
- id: auto_collision
|
||||
key: "C"
|
||||
code: "C"
|
||||
desc: "cycle auto-collision"
|
||||
- id: tile_picker
|
||||
key: "T"
|
||||
code: "T"
|
||||
|
||||
@@ -131,6 +131,7 @@ 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
|
||||
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);
|
||||
|
||||
@@ -231,6 +231,7 @@ class MapEditor {
|
||||
EyedropperState eyedropper_; // Estado del eyedropper (clic derecho)
|
||||
bool painting_{false}; // true mientras se está pintando con click izquierdo mantenido
|
||||
bool editing_collision_{false}; // true = editando collision tilemap, false = editando draw tilemap
|
||||
int auto_collision_{-1}; // -1 = desactivado, 1 = WALL, 2 = PASSABLE (se aplica al pintar draw tiles)
|
||||
|
||||
// Datos de la habitación
|
||||
Room::Data room_data_;
|
||||
|
||||
Reference in New Issue
Block a user