diff options
| -rw-r--r-- | editor/plugins/tiles/tile_map_editor.cpp | 24 | ||||
| -rw-r--r-- | editor/plugins/tiles/tile_map_editor.h | 1 | 
2 files changed, 25 insertions, 0 deletions
diff --git a/editor/plugins/tiles/tile_map_editor.cpp b/editor/plugins/tiles/tile_map_editor.cpp index 28b45343c7..c2e86f8b43 100644 --- a/editor/plugins/tiles/tile_map_editor.cpp +++ b/editor/plugins/tiles/tile_map_editor.cpp @@ -465,6 +465,7 @@ bool TileMapEditorTilesPlugin::forward_canvas_gui_input(const Ref<InputEvent> &p  					}  					tile_map->set_cell(tile_map_layer, coords, E.value.source_id, E.value.get_atlas_coords(), E.value.alternative_tile);  				} +				_fix_invalid_tiles_in_tile_map_selection();  			} break;  			case DRAG_TYPE_BUCKET: {  				Vector<Vector2i> line = TileMapEditor::get_line(tile_map, tile_map->world_to_map(drag_last_mouse_pos), tile_map->world_to_map(mpos)); @@ -483,6 +484,7 @@ bool TileMapEditorTilesPlugin::forward_canvas_gui_input(const Ref<InputEvent> &p  						}  					}  				} +				_fix_invalid_tiles_in_tile_map_selection();  			} break;  			default:  				break; @@ -508,6 +510,7 @@ bool TileMapEditorTilesPlugin::forward_canvas_gui_input(const Ref<InputEvent> &p  					drag_start_mouse_pos = mpos;  					if (tile_map_selection.has(tile_map->world_to_map(drag_start_mouse_pos)) && !mb->is_shift_pressed()) {  						// Move the selection +						_update_selection_pattern_from_tilemap_selection(); // Make sure the pattern is up to date before moving.  						drag_type = DRAG_TYPE_MOVE;  						drag_modified.clear();  						for (Set<Vector2i>::Element *E = tile_map_selection.front(); E; E = E->next()) { @@ -541,6 +544,7 @@ bool TileMapEditorTilesPlugin::forward_canvas_gui_input(const Ref<InputEvent> &p  								}  								tile_map->set_cell(tile_map_layer, coords, E.value.source_id, E.value.get_atlas_coords(), E.value.alternative_tile);  							} +							_fix_invalid_tiles_in_tile_map_selection();  						} else if (tool_buttons_group->get_pressed_button() == line_tool_button) {  							drag_type = DRAG_TYPE_LINE;  							drag_start_mouse_pos = mpos; @@ -569,6 +573,7 @@ bool TileMapEditorTilesPlugin::forward_canvas_gui_input(const Ref<InputEvent> &p  									}  								}  							} +							_fix_invalid_tiles_in_tile_map_selection();  						}  					}  				} @@ -1323,6 +1328,25 @@ void TileMapEditorTilesPlugin::_update_fix_selected_and_hovered() {  	}  } +void TileMapEditorTilesPlugin::_fix_invalid_tiles_in_tile_map_selection() { +	TileMap *tile_map = Object::cast_to<TileMap>(ObjectDB::get_instance(tile_map_id)); +	if (!tile_map) { +		return; +	} + +	Set<Vector2i> to_remove; +	for (Vector2i selected : tile_map_selection) { +		TileMapCell cell = tile_map->get_cell(tile_map_layer, selected); +		if (cell.source_id == TileSet::INVALID_SOURCE && cell.get_atlas_coords() == TileSetSource::INVALID_ATLAS_COORDS && cell.alternative_tile == TileSetAtlasSource::INVALID_TILE_ALTERNATIVE) { +			to_remove.insert(selected); +		} +	} + +	for (Vector2i cell : to_remove) { +		tile_map_selection.erase(cell); +	} +} +  void TileMapEditorTilesPlugin::_update_selection_pattern_from_tilemap_selection() {  	TileMap *tile_map = Object::cast_to<TileMap>(ObjectDB::get_instance(tile_map_id));  	if (!tile_map) { diff --git a/editor/plugins/tiles/tile_map_editor.h b/editor/plugins/tiles/tile_map_editor.h index 6126db59e9..a1ab3db318 100644 --- a/editor/plugins/tiles/tile_map_editor.h +++ b/editor/plugins/tiles/tile_map_editor.h @@ -124,6 +124,7 @@ private:  	void _update_selection_pattern_from_tileset_selection();  	void _update_tileset_selection_from_selection_pattern();  	void _update_fix_selected_and_hovered(); +	void _fix_invalid_tiles_in_tile_map_selection();  	///// Bottom panel. ////.  	Label *missing_source_label;  |