editor: posibilitat de pintar en els dos tilemaps a l'hora
This commit is contained in:
@@ -111,6 +111,10 @@ scopes:
|
|||||||
key: "8"
|
key: "8"
|
||||||
code: "8"
|
code: "8"
|
||||||
desc: "draw/collision mode"
|
desc: "draw/collision mode"
|
||||||
|
- id: auto_collision
|
||||||
|
key: "C"
|
||||||
|
code: "C"
|
||||||
|
desc: "cycle auto-collision"
|
||||||
- id: tile_picker
|
- id: tile_picker
|
||||||
key: "T"
|
key: "T"
|
||||||
code: "T"
|
code: "T"
|
||||||
|
|||||||
@@ -131,6 +131,7 @@ auto MapEditor::showGrid(bool show) -> std::string {
|
|||||||
auto MapEditor::setEditingCollision(bool collision) -> std::string {
|
auto MapEditor::setEditingCollision(bool collision) -> std::string {
|
||||||
editing_collision_ = collision;
|
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";
|
return editing_collision_ ? "Editing: collision" : "Editing: draw";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -492,6 +493,18 @@ void MapEditor::handleEvent(const SDL_Event& event) { // NOLINT(readability-fun
|
|||||||
return;
|
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
|
// Cursores: navegar a habitación adyacente
|
||||||
if (event.type == SDL_EVENT_KEY_DOWN && static_cast<int>(event.key.repeat) == 0) {
|
if (event.type == SDL_EVENT_KEY_DOWN && static_cast<int>(event.key.repeat) == 0) {
|
||||||
std::string direction;
|
std::string direction;
|
||||||
@@ -970,6 +983,14 @@ void MapEditor::stampBrushAt(int tile_x, int tile_y) {
|
|||||||
room_data_.tile_map[idx] = value;
|
room_data_.tile_map[idx] = value;
|
||||||
room_->setTile(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;
|
std::string line4;
|
||||||
if (!brush_.isEmpty()) {
|
if (!brush_.isEmpty()) {
|
||||||
if (brush_.width == 1 && brush_.height == 1) {
|
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);
|
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_->setLine2(line2);
|
||||||
statusbar_->setLine3(line3);
|
statusbar_->setLine3(line3);
|
||||||
|
|||||||
@@ -231,6 +231,7 @@ class MapEditor {
|
|||||||
EyedropperState eyedropper_; // Estado del eyedropper (clic derecho)
|
EyedropperState eyedropper_; // Estado del eyedropper (clic derecho)
|
||||||
bool painting_{false}; // true mientras se está pintando con click izquierdo mantenido
|
bool painting_{false}; // true mientras se está pintando con click izquierdo mantenido
|
||||||
bool editing_collision_{false}; // true = editando collision tilemap, false = editando draw tilemap
|
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
|
// Datos de la habitación
|
||||||
Room::Data room_data_;
|
Room::Data room_data_;
|
||||||
|
|||||||
Reference in New Issue
Block a user