|  | @@ -57,6 +57,8 @@ void TextureRegionEditor::_region_draw() {
 | 
	
		
			
				|  |  |  		base_tex = obj_styleBox->get_texture();
 | 
	
		
			
				|  |  |  	else if (atlas_tex.is_valid())
 | 
	
		
			
				|  |  |  		base_tex = atlas_tex->get_atlas();
 | 
	
		
			
				|  |  | +	else if (tile_set.is_valid() && selected_tile != -1)
 | 
	
		
			
				|  |  | +		base_tex = tile_set->tile_get_texture(selected_tile);
 | 
	
		
			
				|  |  |  	if (base_tex.is_null())
 | 
	
		
			
				|  |  |  		return;
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -281,6 +283,8 @@ void TextureRegionEditor::_region_input(const Ref<InputEvent> &p_input) {
 | 
	
		
			
				|  |  |  									r = obj_styleBox->get_region_rect();
 | 
	
		
			
				|  |  |  								else if (atlas_tex.is_valid())
 | 
	
		
			
				|  |  |  									r = atlas_tex->get_region();
 | 
	
		
			
				|  |  | +								else if (tile_set.is_valid() && selected_tile != -1)
 | 
	
		
			
				|  |  | +									r = tile_set->tile_get_region(selected_tile);
 | 
	
		
			
				|  |  |  								rect.expand_to(r.position);
 | 
	
		
			
				|  |  |  								rect.expand_to(r.position + r.size);
 | 
	
		
			
				|  |  |  							}
 | 
	
	
		
			
				|  | @@ -297,6 +301,9 @@ void TextureRegionEditor::_region_input(const Ref<InputEvent> &p_input) {
 | 
	
		
			
				|  |  |  							} else if (atlas_tex.is_valid()) {
 | 
	
		
			
				|  |  |  								undo_redo->add_do_method(atlas_tex.ptr(), "set_region", rect);
 | 
	
		
			
				|  |  |  								undo_redo->add_undo_method(atlas_tex.ptr(), "set_region", atlas_tex->get_region());
 | 
	
		
			
				|  |  | +							} else if (tile_set.is_valid() && selected_tile != -1) {
 | 
	
		
			
				|  |  | +								undo_redo->add_do_method(tile_set.ptr(), "tile_set_region", selected_tile, rect);
 | 
	
		
			
				|  |  | +								undo_redo->add_undo_method(tile_set.ptr(), "tile_set_region", selected_tile, tile_set->tile_get_region(selected_tile));
 | 
	
		
			
				|  |  |  							}
 | 
	
		
			
				|  |  |  							undo_redo->add_do_method(edit_draw, "update");
 | 
	
		
			
				|  |  |  							undo_redo->add_undo_method(edit_draw, "update");
 | 
	
	
		
			
				|  | @@ -319,6 +326,8 @@ void TextureRegionEditor::_region_input(const Ref<InputEvent> &p_input) {
 | 
	
		
			
				|  |  |  						rect_prev = obj_styleBox->get_region_rect();
 | 
	
		
			
				|  |  |  					else if (atlas_tex.is_valid())
 | 
	
		
			
				|  |  |  						rect_prev = atlas_tex->get_region();
 | 
	
		
			
				|  |  | +					else if (tile_set.is_valid() && selected_tile != -1)
 | 
	
		
			
				|  |  | +						rect_prev = tile_set->tile_get_region(selected_tile);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  					for (int i = 0; i < 8; i++) {
 | 
	
		
			
				|  |  |  						Vector2 tuv = endpoints[i];
 | 
	
	
		
			
				|  | @@ -362,6 +371,9 @@ void TextureRegionEditor::_region_input(const Ref<InputEvent> &p_input) {
 | 
	
		
			
				|  |  |  					} else if (obj_styleBox.is_valid()) {
 | 
	
		
			
				|  |  |  						undo_redo->add_do_method(obj_styleBox.ptr(), "set_region_rect", obj_styleBox->get_region_rect());
 | 
	
		
			
				|  |  |  						undo_redo->add_undo_method(obj_styleBox.ptr(), "set_region_rect", rect_prev);
 | 
	
		
			
				|  |  | +					} else if (tile_set.is_valid()) {
 | 
	
		
			
				|  |  | +						undo_redo->add_do_method(tile_set.ptr(), "tile_set_region", selected_tile, tile_set->tile_get_region(selected_tile));
 | 
	
		
			
				|  |  | +						undo_redo->add_undo_method(tile_set.ptr(), "tile_set_region", selected_tile, rect_prev);
 | 
	
		
			
				|  |  |  					}
 | 
	
		
			
				|  |  |  					drag_index = -1;
 | 
	
		
			
				|  |  |  				}
 | 
	
	
		
			
				|  | @@ -582,6 +594,8 @@ void TextureRegionEditor::apply_rect(const Rect2 &rect) {
 | 
	
		
			
				|  |  |  		obj_styleBox->set_region_rect(rect);
 | 
	
		
			
				|  |  |  	else if (atlas_tex.is_valid())
 | 
	
		
			
				|  |  |  		atlas_tex->set_region(rect);
 | 
	
		
			
				|  |  | +	else if (tile_set.is_valid() && selected_tile != -1)
 | 
	
		
			
				|  |  | +		tile_set->tile_set_region(selected_tile, rect);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void TextureRegionEditor::_notification(int p_what) {
 | 
	
	
		
			
				|  | @@ -596,11 +610,12 @@ void TextureRegionEditor::_notification(int p_what) {
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void TextureRegionEditor::_node_removed(Object *p_obj) {
 | 
	
		
			
				|  |  | -	if (p_obj == node_sprite || p_obj == node_ninepatch || p_obj == obj_styleBox.ptr() || p_obj == atlas_tex.ptr()) {
 | 
	
		
			
				|  |  | +	if (p_obj == node_sprite || p_obj == node_ninepatch || p_obj == obj_styleBox.ptr() || p_obj == atlas_tex.ptr() || p_obj == tile_set.ptr()) {
 | 
	
		
			
				|  |  |  		node_ninepatch = NULL;
 | 
	
		
			
				|  |  |  		node_sprite = NULL;
 | 
	
		
			
				|  |  |  		obj_styleBox = Ref<StyleBox>(NULL);
 | 
	
		
			
				|  |  |  		atlas_tex = Ref<AtlasTexture>(NULL);
 | 
	
		
			
				|  |  | +		tile_set = Ref<TileSet>(NULL);
 | 
	
		
			
				|  |  |  		hide();
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  }
 | 
	
	
		
			
				|  | @@ -632,6 +647,8 @@ void TextureRegionEditor::edit(Object *p_obj) {
 | 
	
		
			
				|  |  |  		obj_styleBox->remove_change_receptor(this);
 | 
	
		
			
				|  |  |  	if (atlas_tex.is_valid())
 | 
	
		
			
				|  |  |  		atlas_tex->remove_change_receptor(this);
 | 
	
		
			
				|  |  | +	if (tile_set.is_valid())
 | 
	
		
			
				|  |  | +		tile_set->remove_change_receptor(this);
 | 
	
		
			
				|  |  |  	if (p_obj) {
 | 
	
		
			
				|  |  |  		node_sprite = Object::cast_to<Sprite>(p_obj);
 | 
	
		
			
				|  |  |  		node_ninepatch = Object::cast_to<NinePatchRect>(p_obj);
 | 
	
	
		
			
				|  | @@ -639,6 +656,8 @@ void TextureRegionEditor::edit(Object *p_obj) {
 | 
	
		
			
				|  |  |  			obj_styleBox = Ref<StyleBoxTexture>(Object::cast_to<StyleBoxTexture>(p_obj));
 | 
	
		
			
				|  |  |  		if (Object::cast_to<AtlasTexture>(p_obj))
 | 
	
		
			
				|  |  |  			atlas_tex = Ref<AtlasTexture>(Object::cast_to<AtlasTexture>(p_obj));
 | 
	
		
			
				|  |  | +		if (Object::cast_to<TileSet>(p_obj))
 | 
	
		
			
				|  |  | +			tile_set = Ref<TileSet>(Object::cast_to<TileSet>(p_obj));
 | 
	
		
			
				|  |  |  		p_obj->add_change_receptor(this);
 | 
	
		
			
				|  |  |  		_edit_region();
 | 
	
		
			
				|  |  |  	} else {
 | 
	
	
		
			
				|  | @@ -646,6 +665,7 @@ void TextureRegionEditor::edit(Object *p_obj) {
 | 
	
		
			
				|  |  |  		node_ninepatch = NULL;
 | 
	
		
			
				|  |  |  		obj_styleBox = Ref<StyleBoxTexture>(NULL);
 | 
	
		
			
				|  |  |  		atlas_tex = Ref<AtlasTexture>(NULL);
 | 
	
		
			
				|  |  | +		tile_set = Ref<TileSet>(NULL);
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  	edit_draw->update();
 | 
	
		
			
				|  |  |  }
 | 
	
	
		
			
				|  | @@ -668,6 +688,8 @@ void TextureRegionEditor::_edit_region() {
 | 
	
		
			
				|  |  |  		texture = obj_styleBox->get_texture();
 | 
	
		
			
				|  |  |  	else if (atlas_tex.is_valid())
 | 
	
		
			
				|  |  |  		texture = atlas_tex->get_atlas();
 | 
	
		
			
				|  |  | +	else if (tile_set.is_valid() && selected_tile != -1)
 | 
	
		
			
				|  |  | +		texture = tile_set->tile_get_texture(selected_tile);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	if (texture.is_null()) {
 | 
	
		
			
				|  |  |  		return;
 | 
	
	
		
			
				|  | @@ -735,6 +757,8 @@ void TextureRegionEditor::_edit_region() {
 | 
	
		
			
				|  |  |  		rect = obj_styleBox->get_region_rect();
 | 
	
		
			
				|  |  |  	else if (atlas_tex.is_valid())
 | 
	
		
			
				|  |  |  		rect = atlas_tex->get_region();
 | 
	
		
			
				|  |  | +	else if (tile_set.is_valid() && selected_tile != -1)
 | 
	
		
			
				|  |  | +		rect = tile_set->tile_get_region(selected_tile);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	edit_draw->update();
 | 
	
		
			
				|  |  |  }
 | 
	
	
		
			
				|  | @@ -753,6 +777,7 @@ TextureRegionEditor::TextureRegionEditor(EditorNode *p_editor) {
 | 
	
		
			
				|  |  |  	node_ninepatch = NULL;
 | 
	
		
			
				|  |  |  	obj_styleBox = Ref<StyleBoxTexture>(NULL);
 | 
	
		
			
				|  |  |  	atlas_tex = Ref<AtlasTexture>(NULL);
 | 
	
		
			
				|  |  | +	tile_set = Ref<TileSet>(NULL);
 | 
	
		
			
				|  |  |  	editor = p_editor;
 | 
	
		
			
				|  |  |  	undo_redo = editor->get_undo_redo();
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -903,11 +928,11 @@ bool TextureRegionEditorPlugin::handles(Object *p_object) const {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void TextureRegionEditorPlugin::make_visible(bool p_visible) {
 | 
	
		
			
				|  |  |  	if (p_visible) {
 | 
	
		
			
				|  |  | -		region_button->show();
 | 
	
		
			
				|  |  | -		if (region_button->is_pressed())
 | 
	
		
			
				|  |  | +		texture_region_button->show();
 | 
	
		
			
				|  |  | +		if (texture_region_button->is_pressed())
 | 
	
		
			
				|  |  |  			region_editor->show();
 | 
	
		
			
				|  |  |  	} else {
 | 
	
		
			
				|  |  | -		region_button->hide();
 | 
	
		
			
				|  |  | +		texture_region_button->hide();
 | 
	
		
			
				|  |  |  		region_editor->edit(NULL);
 | 
	
		
			
				|  |  |  		region_editor->hide();
 | 
	
		
			
				|  |  |  	}
 | 
	
	
		
			
				|  | @@ -961,10 +986,10 @@ TextureRegionEditorPlugin::TextureRegionEditorPlugin(EditorNode *p_node) {
 | 
	
		
			
				|  |  |  	editor = p_node;
 | 
	
		
			
				|  |  |  	region_editor = memnew(TextureRegionEditor(p_node));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	region_button = p_node->add_bottom_panel_item(TTR("Texture Region"), region_editor);
 | 
	
		
			
				|  |  | -	region_button->set_tooltip(TTR("Texture Region Editor"));
 | 
	
		
			
				|  |  | +	texture_region_button = p_node->add_bottom_panel_item(TTR("Texture Region"), region_editor);
 | 
	
		
			
				|  |  | +	texture_region_button->set_tooltip(TTR("Texture Region Editor"));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	region_editor->set_custom_minimum_size(Size2(0, 200));
 | 
	
		
			
				|  |  |  	region_editor->hide();
 | 
	
		
			
				|  |  | -	region_button->hide();
 | 
	
		
			
				|  |  | +	texture_region_button->hide();
 | 
	
		
			
				|  |  |  }
 |