| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | /*************************************************************************/ | 
					
						
							|  |  |  | /*  tile_set_editor_plugin.cpp                                           */ | 
					
						
							|  |  |  | /*************************************************************************/ | 
					
						
							|  |  |  | /*                       This file is part of:                           */ | 
					
						
							|  |  |  | /*                           GODOT ENGINE                                */ | 
					
						
							|  |  |  | /*                    http://www.godotengine.org                         */ | 
					
						
							|  |  |  | /*************************************************************************/ | 
					
						
							| 
									
										
										
										
											2016-01-01 11:50:53 -02:00
										 |  |  | /* Copyright (c) 2007-2016 Juan Linietsky, Ariel Manzur.                 */ | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | /*                                                                       */ | 
					
						
							|  |  |  | /* Permission is hereby granted, free of charge, to any person obtaining */ | 
					
						
							|  |  |  | /* a copy of this software and associated documentation files (the       */ | 
					
						
							|  |  |  | /* "Software"), to deal in the Software without restriction, including   */ | 
					
						
							|  |  |  | /* without limitation the rights to use, copy, modify, merge, publish,   */ | 
					
						
							|  |  |  | /* distribute, sublicense, and/or sell copies of the Software, and to    */ | 
					
						
							|  |  |  | /* permit persons to whom the Software is furnished to do so, subject to */ | 
					
						
							|  |  |  | /* the following conditions:                                             */ | 
					
						
							|  |  |  | /*                                                                       */ | 
					
						
							|  |  |  | /* The above copyright notice and this permission notice shall be        */ | 
					
						
							|  |  |  | /* included in all copies or substantial portions of the Software.       */ | 
					
						
							|  |  |  | /*                                                                       */ | 
					
						
							|  |  |  | /* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,       */ | 
					
						
							|  |  |  | /* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF    */ | 
					
						
							|  |  |  | /* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ | 
					
						
							|  |  |  | /* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY  */ | 
					
						
							|  |  |  | /* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,  */ | 
					
						
							|  |  |  | /* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE     */ | 
					
						
							|  |  |  | /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.                */ | 
					
						
							|  |  |  | /*************************************************************************/ | 
					
						
							|  |  |  | #include "tile_set_editor_plugin.h"
 | 
					
						
							|  |  |  | #include "scene/2d/sprite.h"
 | 
					
						
							|  |  |  | #include "scene/2d/physics_body_2d.h"
 | 
					
						
							|  |  |  | void TileSetEditor::edit(const Ref<TileSet>& p_tileset) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	tileset=p_tileset; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void TileSetEditor::_import_scene(Node *scene, Ref<TileSet> p_library, bool p_merge) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (!p_merge) | 
					
						
							| 
									
										
										
										
											2015-03-09 02:34:56 -03:00
										 |  |  | 		p_library->clear(); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	for(int i=0;i<scene->get_child_count();i++) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-09 02:34:56 -03:00
										 |  |  | 		Node *child = scene->get_child(i); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-10-03 00:10:51 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-09 02:34:56 -03:00
										 |  |  | 		if (!child->cast_to<Sprite>()) { | 
					
						
							|  |  |  | 			if (child->get_child_count()>0) { | 
					
						
							|  |  |  | 				child=child->get_child(0); | 
					
						
							|  |  |  | 				if (!child->cast_to<Sprite>()) { | 
					
						
							|  |  |  | 					continue; | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-09 02:34:56 -03:00
										 |  |  | 			} else | 
					
						
							|  |  |  | 				continue; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-09 02:34:56 -03:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-09 02:34:56 -03:00
										 |  |  | 		Sprite *mi = child->cast_to<Sprite>(); | 
					
						
							|  |  |  | 		Ref<Texture> texture=mi->get_texture(); | 
					
						
							|  |  |  | 		Ref<CanvasItemMaterial> material=mi->get_material(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if (texture.is_null()) | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 			continue; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-09 02:34:56 -03:00
										 |  |  | 		int id = p_library->find_tile_by_name(mi->get_name()); | 
					
						
							|  |  |  | 		if (id<0) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			id=p_library->get_last_unused_tile_id(); | 
					
						
							|  |  |  | 			p_library->create_tile(id); | 
					
						
							|  |  |  | 			p_library->tile_set_name(id,mi->get_name()); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		p_library->tile_set_texture(id,texture); | 
					
						
							|  |  |  | 		p_library->tile_set_material(id,material); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		Vector2 phys_offset; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if (mi->is_centered()) { | 
					
						
							|  |  |  | 			Size2 s; | 
					
						
							|  |  |  | 			if (mi->is_region()) { | 
					
						
							|  |  |  | 				s=mi->get_region_rect().size; | 
					
						
							|  |  |  | 			} else { | 
					
						
							|  |  |  | 				s=texture->get_size(); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			phys_offset+=-s/2; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		if (mi->is_region()) { | 
					
						
							|  |  |  | 			p_library->tile_set_region(id,mi->get_region_rect()); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		Vector<Ref<Shape2D> >collisions; | 
					
						
							|  |  |  | 		Ref<NavigationPolygon> nav_poly; | 
					
						
							|  |  |  | 		Ref<OccluderPolygon2D> occluder; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		for(int j=0;j<mi->get_child_count();j++) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			Node *child2 = mi->get_child(j); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			if (child2->cast_to<NavigationPolygonInstance>()) | 
					
						
							|  |  |  | 				nav_poly=child2->cast_to<NavigationPolygonInstance>()->get_navigation_polygon(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			if (child2->cast_to<LightOccluder2D>()) | 
					
						
							|  |  |  | 				occluder=child2->cast_to<LightOccluder2D>()->get_occluder_polygon(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			if (!child2->cast_to<StaticBody2D>()) | 
					
						
							|  |  |  | 				continue; | 
					
						
							|  |  |  | 			StaticBody2D *sb = child2->cast_to<StaticBody2D>(); | 
					
						
							| 
									
										
										
										
											2015-10-25 23:13:46 +01:00
										 |  |  | 			int shape_count = sb->get_shape_count(); | 
					
						
							|  |  |  | 			if (shape_count==0) | 
					
						
							| 
									
										
										
										
											2015-03-09 02:34:56 -03:00
										 |  |  | 				continue; | 
					
						
							| 
									
										
										
										
											2015-10-25 23:13:46 +01:00
										 |  |  | 			for (int shape_index=0; shape_index<shape_count; ++shape_index) | 
					
						
							|  |  |  | 			{ | 
					
						
							|  |  |  | 				Ref<Shape2D> collision=sb->get_shape(shape_index); | 
					
						
							|  |  |  | 				if (collision.is_valid()) { | 
					
						
							|  |  |  | 					collisions.push_back(collision); | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2014-04-19 16:46:52 -03:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2015-03-09 02:34:56 -03:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-09 02:34:56 -03:00
										 |  |  | 		if (collisions.size()) { | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-09 02:34:56 -03:00
										 |  |  | 			p_library->tile_set_shapes(id,collisions); | 
					
						
							|  |  |  | 			p_library->tile_set_shape_offset(id,-phys_offset); | 
					
						
							|  |  |  | 		} else { | 
					
						
							|  |  |  | 			p_library->tile_set_shape_offset(id,Vector2()); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		p_library->tile_set_texture_offset(id,mi->get_offset()); | 
					
						
							|  |  |  | 		p_library->tile_set_navigation_polygon(id,nav_poly); | 
					
						
							|  |  |  | 		p_library->tile_set_light_occluder(id,occluder); | 
					
						
							|  |  |  | 		p_library->tile_set_occluder_offset(id,-phys_offset); | 
					
						
							|  |  |  | 		p_library->tile_set_navigation_polygon_offset(id,-phys_offset); | 
					
						
							| 
									
										
										
										
											2014-04-19 16:46:52 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void TileSetEditor::_menu_confirm() { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	switch(option) { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-09 02:34:56 -03:00
										 |  |  | 		case MENU_OPTION_MERGE_FROM_SCENE: | 
					
						
							|  |  |  | 		case MENU_OPTION_CREATE_FROM_SCENE: { | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-09 02:34:56 -03:00
										 |  |  | 			EditorNode *en = editor; | 
					
						
							|  |  |  | 			Node * scene = en->get_edited_scene(); | 
					
						
							|  |  |  | 			if (!scene) | 
					
						
							|  |  |  | 				break; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-09 02:34:56 -03:00
										 |  |  | 			_import_scene(scene,tileset,option==MENU_OPTION_MERGE_FROM_SCENE); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-09 02:34:56 -03:00
										 |  |  | 		} break; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-15 23:35:35 +01:00
										 |  |  | void TileSetEditor::_name_dialog_confirm(const String& name) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	switch (option) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		case MENU_OPTION_REMOVE_ITEM: { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			int id=tileset->find_tile_by_name(name); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			if (id<0 && name.is_valid_integer()) | 
					
						
							|  |  |  | 				id=name.to_int(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			if (tileset->has_tile(id)) { | 
					
						
							|  |  |  | 				tileset->remove_tile(id); | 
					
						
							|  |  |  | 			} else { | 
					
						
							| 
									
										
										
										
											2016-05-19 00:08:12 +02:00
										 |  |  | 				err_dialog->set_text(TTR("Could not find tile:")+" " + name); | 
					
						
							| 
									
										
										
										
											2015-12-15 23:35:35 +01:00
										 |  |  | 				err_dialog->popup_centered(Size2(300, 60)); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} break; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | void TileSetEditor::_menu_cbk(int p_option) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	option=p_option; | 
					
						
							|  |  |  | 	switch(p_option) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		case MENU_OPTION_ADD_ITEM: { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			tileset->create_tile(tileset->get_last_unused_tile_id()); | 
					
						
							|  |  |  | 		} break; | 
					
						
							|  |  |  | 		case MENU_OPTION_REMOVE_ITEM: { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-03 22:25:37 -03:00
										 |  |  | 			nd->set_title(TTR("Remove Item")); | 
					
						
							|  |  |  | 			nd->set_text(TTR("Item name or ID:")); | 
					
						
							| 
									
										
										
										
											2015-12-15 23:35:35 +01:00
										 |  |  | 			nd->popup_centered(Size2(300, 95)); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 		} break; | 
					
						
							|  |  |  | 		case MENU_OPTION_CREATE_FROM_SCENE: { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-03 22:25:37 -03:00
										 |  |  | 			cd->set_text(TTR("Create from scene?")); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 			cd->popup_centered(Size2(300,60)); | 
					
						
							|  |  |  | 		} break; | 
					
						
							| 
									
										
										
										
											2015-03-09 02:34:56 -03:00
										 |  |  | 		case MENU_OPTION_MERGE_FROM_SCENE: { | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-03 22:25:37 -03:00
										 |  |  | 			cd->set_text(TTR("Merge from scene?")); | 
					
						
							| 
									
										
										
										
											2015-03-09 02:34:56 -03:00
										 |  |  | 			cd->popup_centered(Size2(300,60)); | 
					
						
							|  |  |  | 		} break; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Error TileSetEditor::update_library_file(Node *p_base_scene, Ref<TileSet> ml,bool p_merge) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	_import_scene(p_base_scene,ml,p_merge); | 
					
						
							|  |  |  | 	return OK; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void TileSetEditor::_bind_methods() { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	ObjectTypeDB::bind_method("_menu_cbk",&TileSetEditor::_menu_cbk); | 
					
						
							|  |  |  | 	ObjectTypeDB::bind_method("_menu_confirm",&TileSetEditor::_menu_confirm); | 
					
						
							| 
									
										
										
										
											2015-12-15 23:35:35 +01:00
										 |  |  | 	ObjectTypeDB::bind_method("_name_dialog_confirm",&TileSetEditor::_name_dialog_confirm); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TileSetEditor::TileSetEditor(EditorNode *p_editor) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	Panel *panel = memnew( Panel ); | 
					
						
							|  |  |  | 	panel->set_area_as_parent_rect(); | 
					
						
							|  |  |  | 	add_child(panel); | 
					
						
							|  |  |  | 	MenuButton * options = memnew( MenuButton ); | 
					
						
							|  |  |  | 	panel->add_child(options); | 
					
						
							|  |  |  | 	options->set_pos(Point2(1,1)); | 
					
						
							|  |  |  | 	options->set_text("Theme"); | 
					
						
							| 
									
										
										
										
											2016-05-03 22:25:37 -03:00
										 |  |  | 	options->get_popup()->add_item(TTR("Add Item"),MENU_OPTION_ADD_ITEM); | 
					
						
							|  |  |  | 	options->get_popup()->add_item(TTR("Remove Item"),MENU_OPTION_REMOVE_ITEM); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	options->get_popup()->add_separator(); | 
					
						
							| 
									
										
										
										
											2016-05-03 22:25:37 -03:00
										 |  |  | 	options->get_popup()->add_item(TTR("Create from Scene"),MENU_OPTION_CREATE_FROM_SCENE); | 
					
						
							|  |  |  | 	options->get_popup()->add_item(TTR("Merge from Scene"),MENU_OPTION_MERGE_FROM_SCENE); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	options->get_popup()->connect("item_pressed", this,"_menu_cbk"); | 
					
						
							|  |  |  | 	editor=p_editor; | 
					
						
							|  |  |  | 	cd = memnew(ConfirmationDialog); | 
					
						
							|  |  |  | 	add_child(cd); | 
					
						
							|  |  |  | 	cd->get_ok()->connect("pressed", this,"_menu_confirm"); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-15 23:35:35 +01:00
										 |  |  | 	nd = memnew(EditorNameDialog); | 
					
						
							|  |  |  | 	add_child(nd); | 
					
						
							|  |  |  | 	nd->set_hide_on_ok(true); | 
					
						
							|  |  |  | 	nd->get_line_edit()->set_margin(MARGIN_TOP,28); | 
					
						
							|  |  |  | 	nd->connect("name_confirmed", this,"_name_dialog_confirm"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	err_dialog = memnew(AcceptDialog); | 
					
						
							|  |  |  | 	add_child(err_dialog); | 
					
						
							| 
									
										
										
										
											2016-05-03 22:25:37 -03:00
										 |  |  | 	err_dialog->set_title(TTR("Error")); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void TileSetEditorPlugin::edit(Object *p_node) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (p_node && p_node->cast_to<TileSet>()) { | 
					
						
							|  |  |  | 		tileset_editor->edit( p_node->cast_to<TileSet>() ); | 
					
						
							|  |  |  | 		tileset_editor->show(); | 
					
						
							|  |  |  | 	} else | 
					
						
							|  |  |  | 		tileset_editor->hide(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | bool TileSetEditorPlugin::handles(Object *p_node) const{ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return p_node->is_type("TileSet"); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void TileSetEditorPlugin::make_visible(bool p_visible){ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (p_visible) | 
					
						
							|  |  |  | 		tileset_editor->show(); | 
					
						
							|  |  |  | 	else | 
					
						
							|  |  |  | 		tileset_editor->hide(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TileSetEditorPlugin::TileSetEditorPlugin(EditorNode *p_node) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	tileset_editor = memnew( TileSetEditor(p_node) ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	p_node->get_viewport()->add_child(tileset_editor); | 
					
						
							|  |  |  | 	tileset_editor->set_area_as_parent_rect(); | 
					
						
							|  |  |  | 	tileset_editor->set_anchor( MARGIN_RIGHT, Control::ANCHOR_END ); | 
					
						
							|  |  |  | 	tileset_editor->set_anchor( MARGIN_BOTTOM, Control::ANCHOR_BEGIN ); | 
					
						
							|  |  |  | 	tileset_editor->set_end( Point2(0,22) ); | 
					
						
							|  |  |  | 	tileset_editor->hide(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } |