Browse Source

Merge branch 'master' of https://github.com/okamstudio/godot

Conflicts:
	main/main.cpp
Juan Linietsky 9 years ago
parent
commit
082e3fbb29
78 changed files with 609 additions and 224 deletions
  1. 1 0
      .gitignore
  2. 11 1
      core/globals.cpp
  3. 0 1
      core/io/resource_format_xml.cpp
  4. 2 2
      core/variant_call.cpp
  5. 3 3
      core/variant_op.cpp
  6. BIN
      demos/2d/area_input/icon.png
  7. BIN
      demos/2d/dynamic_collision_shapes/icon.png
  8. 0 1
      demos/2d/fog_of_war/icon.png.flags
  9. BIN
      demos/2d/hdr/icon.png
  10. BIN
      demos/2d/isometric_light/icon.png
  11. BIN
      demos/2d/light_mask/icon.png
  12. BIN
      demos/2d/lights_shadows/icon.png
  13. 1 0
      demos/2d/lookat/engine.cfg
  14. BIN
      demos/2d/lookat/icon.png
  15. 1 0
      demos/2d/motion/engine.cfg
  16. BIN
      demos/2d/motion/icon.png
  17. BIN
      demos/2d/navpoly/icon.png
  18. BIN
      demos/2d/normalmaps/icon.png
  19. 5 0
      demos/2d/polygon_path_finder/engine.cfg
  20. BIN
      demos/2d/polygon_path_finder/icon.png
  21. BIN
      demos/2d/polygon_path_finder/poly_with_holes.scn
  22. 0 0
      demos/2d/polygon_path_finder/polygonpathfinder.gd
  23. 0 5
      demos/2d/polygon_path_finder_demo/engine.cfg
  24. BIN
      demos/2d/polygon_path_finder_demo/icon.png
  25. 0 1
      demos/2d/polygon_path_finder_demo/icon.png.flags
  26. BIN
      demos/2d/polygon_path_finder_demo/new_scene_poly_with_holes.scn
  27. BIN
      demos/2d/screen_space_shaders/icon.png
  28. BIN
      demos/2d/sdf_font/icon.png
  29. BIN
      demos/2d/splash/icon.png
  30. BIN
      demos/2d/sprite_shaders/icon.png
  31. 1 0
      demos/2d/texscreen/engine.cfg
  32. BIN
      demos/2d/texscreen/icon.png
  33. BIN
      demos/3d/navmesh/icon.png
  34. BIN
      demos/3d/sat_test/icon.png
  35. 1 0
      demos/3d/truck_town/engine.cfg
  36. BIN
      demos/3d/truck_town/icon.png
  37. 1 0
      demos/gui/drag_and_drop/engine.cfg
  38. BIN
      demos/gui/drag_and_drop/icon.png
  39. 1 0
      demos/gui/input_mapping/engine.cfg
  40. BIN
      demos/gui/input_mapping/icon.png
  41. BIN
      demos/gui/rich_text_bbcode/icon.png
  42. 1 0
      demos/gui/translation/engine.cfg
  43. BIN
      demos/gui/translation/icon.png
  44. BIN
      demos/misc/instancing/icon.png
  45. 1 0
      demos/misc/regex/engine.cfg
  46. BIN
      demos/misc/regex/icon.png
  47. BIN
      demos/misc/tween/icon.png
  48. BIN
      demos/misc/window_management/icon.png
  49. 0 1
      demos/misc/window_management/icon.png.flags
  50. 1 0
      demos/viewport/3d_in_2d/engine.cfg
  51. BIN
      demos/viewport/3d_in_2d/icon.png
  52. 1 0
      demos/viewport/gui_in_3d/engine.cfg
  53. BIN
      demos/viewport/gui_in_3d/icon.png
  54. 1 0
      demos/viewport/screen_capture/engine.cfg
  55. BIN
      demos/viewport/screen_capture/icon.png
  56. 218 106
      doc/base/classes.xml
  57. 2 2
      doc/core_classes.xml
  58. 1 1
      doc/engine_classes.xml
  59. 3 0
      drivers/gles2/rasterizer_gles2.cpp
  60. 8 2
      drivers/gles2/shader_compiler_gles2.cpp
  61. 8 0
      drivers/gles2/shaders/material.glsl
  62. 4 3
      main/main.cpp
  63. 21 2
      platform/android/java/src/com/android/godot/GodotView.java
  64. 3 1
      scene/gui/dialogs.cpp
  65. 8 1
      scene/gui/popup_menu.cpp
  66. 1 0
      scene/resources/shader_graph.cpp
  67. 1 1
      servers/audio_server.cpp
  68. 2 1
      servers/visual/shader_language.cpp
  69. 75 10
      tools/editor/editor_node.cpp
  70. 9 0
      tools/editor/editor_node.h
  71. 0 5
      tools/editor/project_manager.cpp
  72. 96 60
      tools/editor/project_settings.cpp
  73. 9 0
      tools/editor/project_settings.h
  74. 49 8
      tools/editor/property_editor.cpp
  75. 9 1
      tools/editor/property_editor.h
  76. 4 1
      tools/editor/scene_tree_dock.cpp
  77. 41 4
      tools/editor/settings_config_dialog.cpp
  78. 4 0
      tools/editor/settings_config_dialog.h

+ 1 - 0
.gitignore

@@ -296,3 +296,4 @@ cscope.po.out
 godot.creator.*
 
 projects/
+platform/windows/godot_res.res

+ 11 - 1
core/globals.cpp

@@ -332,6 +332,7 @@ Error Globals::setup(const String& p_path,const String & p_main_pack) {
 
 		String candidate = d->get_current_dir();
 		String current_dir = d->get_current_dir();
+		String exec_name = OS::get_singleton()->get_executable_path().get_file().basename();
 		bool found = false;
 		bool first_time=true;
 
@@ -339,7 +340,16 @@ Error Globals::setup(const String& p_path,const String & p_main_pack) {
 			//try to load settings in ascending through dirs shape!
 
 			//tries to open pack, but only first time
-			if (first_time && (_load_resource_pack(current_dir+"/data.pck") || _load_resource_pack(current_dir+"/data.pcz") )) {
+			if (first_time && (_load_resource_pack(current_dir+"/"+exec_name+".pck") || _load_resource_pack(current_dir+"/"+exec_name+".pcz") )) {
+				if (_load_settings("res://engine.cfg")==OK || _load_settings_binary("res://engine.cfb")==OK) {
+
+					_load_settings("res://override.cfg");
+					found=true;
+
+
+				}
+				break;
+			} else if (first_time && (_load_resource_pack(current_dir+"/data.pck") || _load_resource_pack(current_dir+"/data.pcz") )) {
 				if (_load_settings("res://engine.cfg")==OK || _load_settings_binary("res://engine.cfb")==OK) {
 
 					_load_settings("res://override.cfg");

+ 0 - 1
core/io/resource_format_xml.cpp

@@ -1955,7 +1955,6 @@ void ResourceFormatLoaderXML::get_recognized_extensions_for_type(const String& p
 		if (ext=="res")
 			continue;
 		p_extensions->push_back("x"+ext);
-		p_extensions->push_back(ext);
 	}
 
 	p_extensions->push_back("xml");

+ 2 - 2
core/variant_call.cpp

@@ -1291,8 +1291,8 @@ _VariantCall::addfunc(Variant::m_vtype,Variant::m_ret,_SCS(#m_method),VCALL(m_cl
 	ADDFUNC1(STRING,STRING,String,pad_decimals,INT,"digits",varray());
 	ADDFUNC1(STRING,STRING,String,pad_zeros,INT,"digits",varray());
 
-	ADDFUNC0(STRING,STRING,String,to_ascii,varray());
-	ADDFUNC0(STRING,STRING,String,to_utf8,varray());
+	ADDFUNC0(STRING,RAW_ARRAY,String,to_ascii,varray());
+	ADDFUNC0(STRING,RAW_ARRAY,String,to_utf8,varray());
 
 
 	ADDFUNC0(VECTOR2,VECTOR2,Vector2,normalized,varray());

+ 3 - 3
core/variant_op.cpp

@@ -2818,9 +2818,9 @@ void Variant::get_property_list(List<PropertyInfo> *p_list) const {
 		} break;
 		case MATRIX32: {
 
-			p_list->push_back( PropertyInfo(Variant::REAL,"x"));
-			p_list->push_back( PropertyInfo(Variant::REAL,"y"));
-			p_list->push_back( PropertyInfo(Variant::REAL,"o"));
+			p_list->push_back( PropertyInfo(Variant::VECTOR2,"x"));
+			p_list->push_back( PropertyInfo(Variant::VECTOR2,"y"));
+			p_list->push_back( PropertyInfo(Variant::VECTOR2,"o"));
 
 		} break;
 		case PLANE: {

BIN
demos/2d/area_input/icon.png


BIN
demos/2d/dynamic_collision_shapes/icon.png


+ 0 - 1
demos/2d/fog_of_war/icon.png.flags

@@ -1 +0,0 @@
-gen_mipmaps=true

BIN
demos/2d/hdr/icon.png


BIN
demos/2d/isometric_light/icon.png


BIN
demos/2d/light_mask/icon.png


BIN
demos/2d/lights_shadows/icon.png


+ 1 - 0
demos/2d/lookat/engine.cfg

@@ -2,3 +2,4 @@
 
 name="Look At Pointer"
 main_scene="res://lookat.scn"
+icon="res://icon.png"

BIN
demos/2d/lookat/icon.png


+ 1 - 0
demos/2d/motion/engine.cfg

@@ -2,6 +2,7 @@
 
 name="Motion Test"
 main_scene="res://motion.scn"
+icon="res://icon.png"
 
 [display]
 

BIN
demos/2d/motion/icon.png


BIN
demos/2d/navpoly/icon.png


BIN
demos/2d/normalmaps/icon.png


+ 5 - 0
demos/2d/polygon_path_finder/engine.cfg

@@ -0,0 +1,5 @@
+[application]
+
+name="Polygon Pathfinder"
+main_scene="res://poly_with_holes.scn"
+icon="res://icon.png"

BIN
demos/2d/polygon_path_finder/icon.png


BIN
demos/2d/polygon_path_finder/poly_with_holes.scn


+ 0 - 0
demos/2d/polygon_path_finder_demo/polygonpathfinder.gd → demos/2d/polygon_path_finder/polygonpathfinder.gd


+ 0 - 5
demos/2d/polygon_path_finder_demo/engine.cfg

@@ -1,5 +0,0 @@
-[application]
-
-name="polygon_path_finder_demo"
-main_scene="res://new_scene_poly_with_holes.scn"
-icon="res://icon.png"

BIN
demos/2d/polygon_path_finder_demo/icon.png


+ 0 - 1
demos/2d/polygon_path_finder_demo/icon.png.flags

@@ -1 +0,0 @@
-gen_mipmaps=true

BIN
demos/2d/polygon_path_finder_demo/new_scene_poly_with_holes.scn


BIN
demos/2d/screen_space_shaders/icon.png


BIN
demos/2d/sdf_font/icon.png


BIN
demos/2d/splash/icon.png


BIN
demos/2d/sprite_shaders/icon.png


+ 1 - 0
demos/2d/texscreen/engine.cfg

@@ -2,6 +2,7 @@
 
 name="Glass Bubbles (Texscreen)"
 main_scene="res://bubbles.scn"
+icon="res://icon.png"
 
 [display]
 

BIN
demos/2d/texscreen/icon.png


BIN
demos/3d/navmesh/icon.png


BIN
demos/3d/sat_test/icon.png


+ 1 - 0
demos/3d/truck_town/engine.cfg

@@ -2,6 +2,7 @@
 
 name="Truck Town"
 main_scene="res://car_select.scn"
+icon="res://icon.png"
 
 [display]
 

BIN
demos/3d/truck_town/icon.png


+ 1 - 0
demos/gui/drag_and_drop/engine.cfg

@@ -2,3 +2,4 @@
 
 name="Drag &amp; Drop (GUI)"
 main_scene="res://drag_and_drop.scn"
+icon="res://icon.png"

BIN
demos/gui/drag_and_drop/icon.png


+ 1 - 0
demos/gui/input_mapping/engine.cfg

@@ -2,6 +2,7 @@
 
 name="Input Mapping GUI"
 main_scene="res://controls.scn"
+icon="res://icon.png"
 
 [display]
 

BIN
demos/gui/input_mapping/icon.png


BIN
demos/gui/rich_text_bbcode/icon.png


+ 1 - 0
demos/gui/translation/engine.cfg

@@ -2,6 +2,7 @@
 
 name="Translation Demo"
 main_scene="res://main.scn"
+icon="res://icon.png"
 
 [locale]
 

BIN
demos/gui/translation/icon.png


BIN
demos/misc/instancing/icon.png


+ 1 - 0
demos/misc/regex/engine.cfg

@@ -2,3 +2,4 @@
 
 name="RegEx"
 main_scene="res://regex.scn"
+icon="res://icon.png"

BIN
demos/misc/regex/icon.png


BIN
demos/misc/tween/icon.png


BIN
demos/misc/window_management/icon.png


+ 0 - 1
demos/misc/window_management/icon.png.flags

@@ -1 +0,0 @@
-gen_mipmaps=false

+ 1 - 0
demos/viewport/3d_in_2d/engine.cfg

@@ -2,3 +2,4 @@
 
 name="3D in 2D"
 main_scene="res://main.scn"
+icon="res://icon.png"

BIN
demos/viewport/3d_in_2d/icon.png


+ 1 - 0
demos/viewport/gui_in_3d/engine.cfg

@@ -2,3 +2,4 @@
 
 name="GUI in 3D"
 main_scene="res://gui_3d.scn"
+icon="res://icon.png"

BIN
demos/viewport/gui_in_3d/icon.png


+ 1 - 0
demos/viewport/screen_capture/engine.cfg

@@ -2,6 +2,7 @@
 
 name="Screen Capturing"
 main_scene="res://screen_capture.scn"
+icon="res://icon.png"
 
 [display]
 

BIN
demos/viewport/screen_capture/icon.png


File diff suppressed because it is too large
+ 218 - 106
doc/base/classes.xml


+ 2 - 2
doc/core_classes.xml

@@ -575,8 +575,8 @@
 	3x3 Matrix.
 	</brief_description>
 	<description>
-	</description>
 	Matrix represent a 3x3 (3 rows by 3 columns) transformation matrix. it is used mainly to represent and accumulate transformations such as rotation or scale when used as an OCS (oriented coordinate system).
+	</description>
 	<methods>
 	<method name="invert">
 		<description>
@@ -937,8 +937,8 @@
 	Vector used for 2D Math.
 	</brief_description>
 	<description>
-	</description>
 	Vector class, which performs basic 2D vector math operations.
+	</description>
 	<methods>
 	<method name="operator+">
 		<argument index="0" name="b" type="Vector2">

+ 1 - 1
doc/engine_classes.xml

@@ -1502,7 +1502,7 @@
 			<description>
 			</description>
 		</method>
-		<method name="free">
+		<method name="free_rid">
 			<argument index="0" name="rid" type="RID">
 			</argument>
 			<description>

+ 3 - 0
drivers/gles2/rasterizer_gles2.cpp

@@ -4641,6 +4641,9 @@ void RasterizerGLES2::_update_shader( Shader* p_shader) const {
 		if (light_flags.uses_light) {
 			enablers.push_back("#define USE_LIGHT_SHADER_CODE\n");
 		}
+		if (light_flags.uses_shadow_color) {
+			enablers.push_back("#define USE_LIGHT_SHADOW_COLOR\n");
+		}
 		if (light_flags.uses_time || fragment_flags.uses_time || vertex_flags.uses_time) {
 			enablers.push_back("#define USE_TIME\n");
 			uses_time=true;

+ 8 - 2
drivers/gles2/shader_compiler_gles2.cpp

@@ -221,6 +221,10 @@ String ShaderCompilerGLES2::dump_node_code(SL::Node *p_node,int p_level,bool p_a
 					uses_light=true;
 				}
 
+				if (vnode->name==vname_shadow) {
+					uses_shadow_color=true;
+				}
+
 			}
 			if (type==ShaderLanguage::SHADER_CANVAS_ITEM_VERTEX) {
 
@@ -783,13 +787,14 @@ ShaderCompilerGLES2::ShaderCompilerGLES2() {
 	replace_table["texscreen"]= "texscreen";
 	replace_table["texpos"]= "texpos";
 
-	mode_replace_table[ShaderLanguage::SHADER_MATERIAL_VERTEX]["POSITION"] = "gl_Position";
+
 
 	mode_replace_table[ShaderLanguage::SHADER_MATERIAL_VERTEX]["SRC_VERTEX"] = "vertex_in.xyz";
 	mode_replace_table[ShaderLanguage::SHADER_MATERIAL_VERTEX]["SRC_NORMAL"] = "normal_in";
 	mode_replace_table[ShaderLanguage::SHADER_MATERIAL_VERTEX]["SRC_TANGENT"]="tangent_in";
 	mode_replace_table[ShaderLanguage::SHADER_MATERIAL_VERTEX]["SRC_BINORMALF"]="binormalf";
-
+	
+	mode_replace_table[ShaderLanguage::SHADER_MATERIAL_VERTEX]["POSITION"] = "gl_Position";
 	mode_replace_table[ShaderLanguage::SHADER_MATERIAL_VERTEX]["VERTEX"]="vertex_interp";
 	mode_replace_table[ShaderLanguage::SHADER_MATERIAL_VERTEX]["NORMAL"]="normal_interp";
 	mode_replace_table[ShaderLanguage::SHADER_MATERIAL_VERTEX]["TANGENT"]="tangent_interp";
@@ -858,6 +863,7 @@ ShaderCompilerGLES2::ShaderCompilerGLES2() {
 	mode_replace_table[ShaderLanguage::SHADER_MATERIAL_LIGHT]["LIGHT"]="light";
 	mode_replace_table[ShaderLanguage::SHADER_MATERIAL_LIGHT]["POINT_COORD"]="gl_PointCoord";
 	mode_replace_table[ShaderLanguage::SHADER_MATERIAL_LIGHT]["TIME"]="time";
+	mode_replace_table[ShaderLanguage::SHADER_MATERIAL_LIGHT]["SHADOW"]="shadow_color";
 
 	mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_VERTEX]["SRC_VERTEX"]="src_vtx";
 	mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_VERTEX]["VERTEX"]="outvec.xy";

+ 8 - 0
drivers/gles2/shaders/material.glsl

@@ -1175,6 +1175,10 @@ FRAGMENT_SHADER_CODE
 		vec3 mdiffuse = diffuse.rgb;
 		vec3 light;
 
+#if defined(USE_LIGHT_SHADOW_COLOR)
+		vec3 shadow_color=vec3(0.0,0.0,0.0);
+#endif
+
 #if defined(USE_LIGHT_SHADER_CODE)
 //light is written by the light shader
 {
@@ -1195,6 +1199,10 @@ LIGHT_SHADER_CODE
 #endif
 		diffuse.rgb = const_light_mult * ambient_light *diffuse.rgb + light * attenuation * shadow_attenuation;
 
+#if defined(USE_LIGHT_SHADOW_COLOR)
+		diffuse.rgb += light * shadow_color * attenuation * (1.0 - shadow_attenuation);
+#endif
+
 #ifdef USE_FOG
 
 		diffuse.rgb = mix(diffuse.rgb,fog_interp.rgb,fog_interp.a);

+ 4 - 3
main/main.cpp

@@ -432,7 +432,6 @@ Error Main::setup(const char *execpath,int argc, char *argv[],bool p_second_phas
 		} else if (I->get()=="-e" || I->get()=="-editor") { // fonud editor
 
 			editor=true;
-			init_maximized=true;
 		} else if (I->get()=="-nowindow") { // fullscreen
 
 			OS::get_singleton()->set_no_window_mode(true);
@@ -649,6 +648,7 @@ Error Main::setup(const char *execpath,int argc, char *argv[],bool p_second_phas
 
 	if (editor) {
 		main_args.push_back("-editor");
+		init_maximized=true;
 		use_custom_res=false;
 	}
 
@@ -876,6 +876,7 @@ Error Main::setup2() {
 		boot_logo_path = boot_logo_path.strip_edges();
 
 		if (boot_logo_path!=String() /*&& FileAccess::exists(boot_logo_path)*/) {
+			print_line("Boot splash path: "+boot_logo_path);
 			Error err = boot_logo.load(boot_logo_path);
 		}
 
@@ -893,7 +894,7 @@ Error Main::setup2() {
 		} else {
 #ifndef NO_DEFAULT_BOOT_LOGO
 
-			MAIN_PRINT("Main: Create botsplash");
+			MAIN_PRINT("Main: Create bootsplash");
 			Image splash(boot_splash_png);
 
 			MAIN_PRINT("Main: ClearColor");
@@ -1085,7 +1086,7 @@ bool Main::start() {
 
 #endif
 
-	if(script=="" && game_path=="" && !editor && String(GLOBAL_DEF("application/main_scene",""))!="") {
+	if(script=="" && game_path=="" && String(GLOBAL_DEF("application/main_scene",""))!="") {
 		game_path=GLOBAL_DEF("application/main_scene","");
 	}
 

+ 21 - 2
platform/android/java/src/com/android/godot/GodotView.java

@@ -371,8 +371,8 @@ public class GodotView extends GLSurfaceView {
 
 		if (use_32) {
 			setEGLConfigChooser( translucent ?
-						new ConfigChooser(8, 8, 8, 8, 24, stencil) :
-						new ConfigChooser(8, 8, 8, 8, 24, stencil) );
+						new FallbackConfigChooser(8, 8, 8, 8, 24, stencil, new ConfigChooser(8, 8, 8, 8, 16, stencil)) :
+						new FallbackConfigChooser(8, 8, 8, 8, 24, stencil, new ConfigChooser(5, 6, 5, 0, 16, stencil)) );
 
 		} else {
 			setEGLConfigChooser( translucent ?
@@ -410,6 +410,25 @@ public class GodotView extends GLSurfaceView {
 	    Log.e(TAG, String.format("%s: EGL error: 0x%x", prompt, error));
 	}
     }
+    	/* Fallback if 32bit View is not supported*/
+	private static class FallbackConfigChooser extends ConfigChooser {
+		private ConfigChooser fallback;
+		
+		public FallbackConfigChooser(int r, int g, int b, int a, int depth, int stencil, ConfigChooser fallback) {
+			super(r, g, b, a, depth, stencil);
+			this.fallback = fallback;
+		}
+      
+      		@Override
+		public EGLConfig chooseConfig(EGL10 egl, EGLDisplay display, EGLConfig[] configs) {
+			EGLConfig ec = super.chooseConfig(egl, display, configs);
+			if (ec == null) {
+	  			Log.w(TAG, "Trying ConfigChooser fallback");
+	  			ec = fallback.chooseConfig(egl, display, configs);
+			}
+			return ec;
+      		}
+    	}
 
 	private static class ConfigChooser implements GLSurfaceView.EGLConfigChooser {
 

+ 3 - 1
scene/gui/dialogs.cpp

@@ -308,7 +308,9 @@ void AcceptDialog::_bind_methods() {
 	ADD_SIGNAL( MethodInfo("confirmed") );
 	ADD_SIGNAL( MethodInfo("custom_action",PropertyInfo(Variant::STRING,"action")) );
 
-	
+	ADD_PROPERTYNZ( PropertyInfo(Variant::STRING,"dialog/text",PROPERTY_HINT_MULTILINE_TEXT,"",PROPERTY_USAGE_DEFAULT_INTL),_SCS("set_text"),_SCS("get_text"));
+	ADD_PROPERTY( PropertyInfo(Variant::BOOL, "dialog/hide_on_ok"),_SCS("set_hide_on_ok"),_SCS("get_hide_on_ok") );
+
 }
 
 

+ 8 - 1
scene/gui/popup_menu.cpp

@@ -170,7 +170,14 @@ void PopupMenu::_activate_submenu(int over) {
 	Point2 p = get_global_pos();
 	Rect2 pr(p,get_size());
 	Ref<StyleBox> style = get_stylebox("panel");
-	pm->set_pos(p+Point2(get_size().width,items[over]._ofs_cache-style->get_offset().y));
+
+	Point2 pos = p+Point2(get_size().width,items[over]._ofs_cache-style->get_offset().y);
+	Size2 size = pm->get_size();
+	// fix pos
+	if (pos.x+size.width > get_viewport_rect().size.width)
+		pos.x=p.x-size.width;
+
+	pm->set_pos(pos);
 	pm->popup();
 
 	PopupMenu *pum = pm->cast_to<PopupMenu>();

+ 1 - 0
scene/resources/shader_graph.cpp

@@ -1435,6 +1435,7 @@ const ShaderGraph::InOutParamInfo ShaderGraph::inout_param_info[]={
 	{MODE_MATERIAL,SHADER_TYPE_LIGHT,"ShadeParam","SHADE_PARAM","",SLOT_TYPE_SCALAR,SLOT_IN},
 	//light out
 	{MODE_MATERIAL,SHADER_TYPE_LIGHT,"Light","LIGHT","",SLOT_TYPE_VEC,SLOT_OUT},
+	{MODE_MATERIAL,SHADER_TYPE_LIGHT,"Shadow", "SHADOW", "",SLOT_TYPE_VEC, SLOT_OUT },
 	//canvas item vertex in
 	{MODE_CANVAS_ITEM,SHADER_TYPE_VERTEX,"Vertex","vec3(SRC_VERTEX,0)","",SLOT_TYPE_VEC,SLOT_IN},
 	{MODE_CANVAS_ITEM,SHADER_TYPE_VERTEX,"UV","SRC_UV","",SLOT_TYPE_VEC,SLOT_IN},

+ 1 - 1
servers/audio_server.cpp

@@ -132,7 +132,7 @@ void AudioServer::_bind_methods() {
 
 	ObjectTypeDB::bind_method(_MD("voice_stop","voice"), &AudioServer::voice_stop );
 
-	ObjectTypeDB::bind_method(_MD("free","rid"), &AudioServer::free );
+	ObjectTypeDB::bind_method(_MD("free_rid","rid"), &AudioServer::free );
 
 	ObjectTypeDB::bind_method(_MD("set_stream_global_volume_scale","scale"), &AudioServer::set_stream_global_volume_scale );
 	ObjectTypeDB::bind_method(_MD("get_stream_global_volume_scale"), &AudioServer::get_stream_global_volume_scale );

+ 2 - 1
servers/visual/shader_language.cpp

@@ -1113,7 +1113,8 @@ const ShaderLanguage::BuiltinsDef ShaderLanguage::light_builtins_defs[]={
 	{ "SPECULAR_EXP", TYPE_FLOAT},
 	{ "SHADE_PARAM", TYPE_FLOAT},
 	{ "LIGHT", TYPE_VEC3},
-	{ "POINT_COORD", TYPE_VEC2},
+	{ "SHADOW", TYPE_VEC3 },
+	{ "POINT_COORD", TYPE_VEC2 },
 //	{ "SCREEN_POS", TYPE_VEC2},
 //	{ "SCREEN_TEXEL_SIZE", TYPE_VEC2},
 	{ "TIME", TYPE_FLOAT},

+ 75 - 10
tools/editor/editor_node.cpp

@@ -2011,6 +2011,11 @@ void EditorNode::_menu_option_confirm(int p_option,bool p_confirmed) {
 
 
 
+		} break;
+		case SCENE_TAB_CLOSE: {
+			_remove_scene(tab_closing);
+			_update_scene_tabs();
+			current_option = -1;
 		} break;
 		case FILE_SAVE_SCENE: {
 
@@ -2023,7 +2028,7 @@ void EditorNode::_menu_option_confirm(int p_option,bool p_confirmed) {
 				return;
 			};
 			// fallthrough to save_as
-		};
+		} break;
 		case FILE_SAVE_AS_SCENE: {
 			
 			Node *scene = editor_data.get_edited_scene_root();
@@ -2957,23 +2962,23 @@ void EditorNode::_remove_edited_scene() {
 	_update_title();
 	_update_scene_tabs();
 
-	if (editor_data.get_edited_scene_count()==1) {
-		//make new scene appear saved
-		set_current_version(editor_data.get_undo_redo().get_version());
-		unsaved_cache=false;
-	}
+//	if (editor_data.get_edited_scene_count()==1) {
+//		//make new scene appear saved
+//		set_current_version(editor_data.get_undo_redo().get_version());
+//		unsaved_cache=false;
+//	}
 }
 
 void EditorNode::_remove_scene(int index) {
 //	printf("Attempting to remove scene %d (current is %d)\n", index, editor_data.get_edited_scene());
+
 	if (editor_data.get_edited_scene() == index) {
 		//Scene to remove is current scene
 		_remove_edited_scene();
 	}
 	else {
-		// Scene to remove is not active scene.");
+		// Scene to remove is not active scene
 		editor_data.remove_scene(index);
-		editor_data.get_undo_redo().clear_history();
 	}
 }
 
@@ -4019,6 +4024,8 @@ void EditorNode::_bind_methods() {
 	ObjectTypeDB::bind_method("_prepare_history",&EditorNode::_prepare_history);
 	ObjectTypeDB::bind_method("_select_history",&EditorNode::_select_history);
 
+	ObjectTypeDB::bind_method("_toggle_search_bar",&EditorNode::_toggle_search_bar);
+	ObjectTypeDB::bind_method("_clear_search_box",&EditorNode::_clear_search_box);
 
 	ObjectTypeDB::bind_method(_MD("add_editor_import_plugin", "plugin"), &EditorNode::add_editor_import_plugin);
 	ObjectTypeDB::bind_method(_MD("remove_editor_import_plugin", "plugin"), &EditorNode::remove_editor_import_plugin);
@@ -4467,8 +4474,19 @@ void EditorNode::_scene_tab_script_edited(int p_tab) {
 }
 
 void EditorNode::_scene_tab_closed(int p_tab) {
- 	_remove_scene(p_tab);
-	_update_scene_tabs();
+	current_option = SCENE_TAB_CLOSE;
+	tab_closing = p_tab;
+	if (unsaved_cache) {
+		confirmation->get_ok()->set_text("Yes");
+		//confirmation->get_cancel()->show();
+		confirmation->set_text("Close scene? (Unsaved changes will be lost)");
+		confirmation->popup_centered_minsize();
+	}
+	else {
+		_remove_scene(p_tab);
+		//_update_scene_tabs();
+	}
+
 }
 
 
@@ -4501,6 +4519,30 @@ void EditorNode::_scene_tab_changed(int p_tab) {
 
 }
 
+void EditorNode::_toggle_search_bar(bool p_pressed) {
+
+	property_editor->set_use_filter(p_pressed);
+
+	if (p_pressed) {
+
+		search_bar->show();
+		search_box->grab_focus();
+		search_box->select_all();
+	} else {
+
+		search_bar->hide();
+	}
+}
+
+void EditorNode::_clear_search_box() {
+
+	if (search_box->get_text()=="")
+		return;
+
+	search_box->clear();
+	property_editor->update_tree();
+}
+
 EditorNode::EditorNode() {
 
 	EditorHelp::generate_doc(); //before any editor classes are crated
@@ -5306,6 +5348,12 @@ EditorNode::EditorNode() {
 	editor_path->set_h_size_flags(Control::SIZE_EXPAND_FILL);
 	prop_editor_hb->add_child(editor_path);
 
+	search_button = memnew( ToolButton );
+	search_button->set_toggle_mode(true);
+	search_button->set_pressed(false);
+	search_button->set_icon(gui_base->get_icon("Zoom","EditorIcons"));
+	prop_editor_hb->add_child(search_button);
+	search_button->connect("toggled",this,"_toggle_search_bar");
 
 	object_menu = memnew( MenuButton );
 	object_menu->set_icon(gui_base->get_icon("Tools","EditorIcons"));
@@ -5317,6 +5365,22 @@ EditorNode::EditorNode() {
 	create_dialog->set_base_type("Resource");
 	create_dialog->connect("create",this,"_resource_created");
 
+	search_bar = memnew( HBoxContainer );
+	search_bar->set_h_size_flags(Control::SIZE_EXPAND_FILL);
+	prop_editor_base->add_child(search_bar);
+	search_bar->hide();
+
+	l = memnew( Label("Search: ") );
+	search_bar->add_child(l);
+
+	search_box = memnew( LineEdit );
+	search_box->set_h_size_flags(Control::SIZE_EXPAND_FILL);
+	search_bar->add_child(search_box);
+
+	ToolButton *clear_button = memnew( ToolButton );
+	clear_button->set_icon(gui_base->get_icon("Close","EditorIcons"));
+	search_bar->add_child(clear_button);
+	clear_button->connect("pressed",this,"_clear_search_box");
 
 	property_editor = memnew( PropertyEditor );
 	property_editor->set_autoclear(true);
@@ -5325,6 +5389,7 @@ EditorNode::EditorNode() {
 	property_editor->set_use_doc_hints(true);
 
 	property_editor->hide_top_label();
+	property_editor->register_text_enter(search_box);
 
 	prop_editor_base->add_child( property_editor );
 	property_editor->set_undo_redo(&editor_data.get_undo_redo());

+ 9 - 0
tools/editor/editor_node.h

@@ -173,6 +173,7 @@ class EditorNode : public Node {
 		SOURCES_REIMPORT,
 		DEPENDENCY_LOAD_CHANGED_IMAGES,
 		DEPENDENCY_UPDATE_IMPORTED,
+		SCENE_TAB_CLOSE,
 
 		IMPORT_PLUGIN_BASE=100,
 
@@ -217,6 +218,7 @@ class EditorNode : public Node {
 	//main tabs
 
 	Tabs *scene_tabs;
+	int tab_closing;
 
 
 	int old_split_ofs;
@@ -248,6 +250,7 @@ class EditorNode : public Node {
 	ToolButton *play_scene_button;
 	ToolButton *play_custom_scene_button;
 	MenuButton *debug_button;
+	ToolButton *search_button;
 	TextureProgress *audio_vu;
 	//MenuButton *fileserver_menu;
 
@@ -266,6 +269,9 @@ class EditorNode : public Node {
 	ScenesDock *scenes_dock;
 	EditorRunNative *run_native;
 
+	HBoxContainer *search_bar;
+	LineEdit *search_box;
+
 	CreateDialog *create_dialog;
 
 	CallDialog *call_dialog;
@@ -515,6 +521,9 @@ class EditorNode : public Node {
 	void _save_docks();
 	void _load_docks();
 
+	void _toggle_search_bar(bool p_pressed);
+	void _clear_search_box();
+
 protected:
 	void _notification(int p_what);
 	static void _bind_methods();		

+ 0 - 5
tools/editor/project_manager.cpp

@@ -624,11 +624,6 @@ void ProjectManager::_open_project_confirm() {
 
 		args.push_back("-editor");
 
-		const String &selected_main = E->get();
-		if (selected_main!="") {
-			args.push_back(selected_main);
-		}
-
 		String exec = OS::get_singleton()->get_executable_path();
 
 		OS::ProcessID pid=0;

+ 96 - 60
tools/editor/project_settings.cpp

@@ -59,6 +59,9 @@ void ProjectSettings::_notification(int p_what) {
 
 	if (p_what==NOTIFICATION_ENTER_TREE) {
 
+		search_button->set_icon(get_icon("Zoom","EditorIcons"));
+		clear_button->set_icon(get_icon("Close","EditorIcons"));
+
 		translation_list->connect("button_pressed",this,"_translation_delete");
 		_update_actions();
 		popup_add->add_icon_item(get_icon("Keyboard","EditorIcons"),"Key",InputEvent::KEY);
@@ -1171,6 +1174,31 @@ void ProjectSettings::_update_autoload() {
 
 }
 
+void ProjectSettings::_toggle_search_bar(bool p_pressed) {
+
+	globals_editor->set_use_filter(p_pressed);
+
+	if (p_pressed) {
+
+		search_bar->show();
+		add_prop_bar->hide();
+		search_box->grab_focus();
+		search_box->select_all();
+	} else {
+
+		search_bar->hide();
+		add_prop_bar->show();
+	}
+}
+
+void ProjectSettings::_clear_search_box() {
+
+	if (search_box->get_text()=="")
+		return;
+
+	search_box->clear();
+	globals_editor->update_tree();
+}
 
 void ProjectSettings::_bind_methods() {
 
@@ -1212,6 +1240,9 @@ void ProjectSettings::_bind_methods() {
 	ObjectTypeDB::bind_method(_MD("_update_autoload"),&ProjectSettings::_update_autoload);
 	ObjectTypeDB::bind_method(_MD("_autoload_delete"),&ProjectSettings::_autoload_delete);
 
+	ObjectTypeDB::bind_method(_MD("_clear_search_box"),&ProjectSettings::_clear_search_box);
+	ObjectTypeDB::bind_method(_MD("_toggle_search_bar"),&ProjectSettings::_toggle_search_bar);
+
 }
 
 ProjectSettings::ProjectSettings(EditorData *p_data) {
@@ -1232,87 +1263,93 @@ ProjectSettings::ProjectSettings(EditorData *p_data) {
 	//tab_container->set_anchor_and_margin(MARGIN_TOP,ANCHOR_BEGIN, 15 );
 	//tab_container->set_anchor_and_margin(MARGIN_BOTTOM,ANCHOR_END, 35 );
 
-	Control *props_base = memnew( Control );
+	VBoxContainer *props_base = memnew( VBoxContainer );
+	props_base->set_alignment(BoxContainer::ALIGN_BEGIN);
+	props_base->set_v_size_flags(Control::SIZE_EXPAND_FILL);
 	tab_container->add_child(props_base);
 	props_base->set_name("General");
-	globals_editor = memnew( PropertyEditor );
-	props_base->add_child(globals_editor);
-	globals_editor->set_area_as_parent_rect();
-	globals_editor->hide_top_label();
-	globals_editor->set_anchor_and_margin(MARGIN_TOP,ANCHOR_BEGIN, 55 );
-	globals_editor->set_anchor_and_margin(MARGIN_BOTTOM,ANCHOR_END, 35 );
-	globals_editor->set_anchor_and_margin(MARGIN_LEFT,ANCHOR_BEGIN, 5 );
-	globals_editor->set_anchor_and_margin(MARGIN_RIGHT,ANCHOR_END, 5 );
-	globals_editor->set_capitalize_paths(false);
-	globals_editor->get_scene_tree()->connect("cell_selected",this,"_item_selected");
-	globals_editor->connect("property_toggled",this,"_item_checked");
-	globals_editor->connect("property_edited",this,"_settings_prop_edited");
 
+	HBoxContainer *hbc = memnew( HBoxContainer );
+	hbc->set_h_size_flags(Control::SIZE_EXPAND_FILL);
+	props_base->add_child(hbc);
 
-	Label *l = memnew( Label );
-	props_base->add_child(l);
-	l->set_pos(Point2(6,5));
-	l->set_text("Category:");
+	search_button = memnew( ToolButton );
+	search_button->set_toggle_mode(true);
+	search_button->set_pressed(false);
+	search_button->set_text("Search");
+	hbc->add_child(search_button);
+	search_button->connect("toggled",this,"_toggle_search_bar");
 
+	hbc->add_child( memnew( VSeparator ) );
 
-	l = memnew( Label );
-	l->set_anchor(MARGIN_LEFT,ANCHOR_RATIO);
-	props_base->add_child(l);
-	l->set_begin(Point2(0.21,5));
-	l->set_text("Property:");
+	add_prop_bar = memnew( HBoxContainer );
+	add_prop_bar->set_h_size_flags(Control::SIZE_EXPAND_FILL);
+	hbc->add_child(add_prop_bar);
 
-	l = memnew( Label );
-	l->set_anchor(MARGIN_LEFT,ANCHOR_RATIO);
-	props_base->add_child(l);
-	l->set_begin(Point2(0.51,5));
-	l->set_text("Type:");
+	Label *l = memnew( Label );
+	add_prop_bar->add_child(l);
+	l->set_text("Category:");
 
 	category = memnew( LineEdit );
-	props_base->add_child(category);
-	category->set_anchor(MARGIN_RIGHT,ANCHOR_RATIO);
-	category->set_begin( Point2(5,25) );
-	category->set_end( Point2(0.20,26) );
+	category->set_h_size_flags(Control::SIZE_EXPAND_FILL);
+	add_prop_bar->add_child(category);
 	category->connect("text_entered",this,"_item_adds");
 
+	l = memnew( Label );
+	add_prop_bar->add_child(l);
+	l->set_text("Property:");
+
 	property = memnew( LineEdit );
-	props_base->add_child(property);
-	property->set_anchor(MARGIN_LEFT,ANCHOR_RATIO);
-	property->set_anchor(MARGIN_RIGHT,ANCHOR_RATIO);
-	property->set_begin( Point2(0.21,25) );
-	property->set_end( Point2(0.50,26) );
+	property->set_h_size_flags(Control::SIZE_EXPAND_FILL);
+	add_prop_bar->add_child(property);
 	property->connect("text_entered",this,"_item_adds");
 
+	l = memnew( Label );
+	add_prop_bar->add_child(l);
+	l->set_text("Type:");
 
 	type = memnew( OptionButton );
-	props_base->add_child(type);
-	type->set_anchor(MARGIN_LEFT,ANCHOR_RATIO);
-	type->set_anchor(MARGIN_RIGHT,ANCHOR_RATIO);
-	type->set_begin( Point2(0.51,25) );
-	type->set_end( Point2(0.70,26) );
+	type->set_h_size_flags(Control::SIZE_EXPAND_FILL);
+	add_prop_bar->add_child(type);
 	type->add_item("bool");
 	type->add_item("int");
 	type->add_item("float");
 	type->add_item("string");
 
 	Button *add = memnew( Button );
-	props_base->add_child(add);
-	add->set_anchor(MARGIN_LEFT,ANCHOR_RATIO);
-	add->set_anchor(MARGIN_RIGHT,ANCHOR_RATIO);
-	add->set_begin( Point2(0.71,25) );
-	add->set_end( Point2(0.85,26) );
+	add_prop_bar->add_child(add);
 	add->set_text("Add");
 	add->connect("pressed",this,"_item_add");
 
 	Button *del = memnew( Button );
-	props_base->add_child(del);
-	del->set_anchor(MARGIN_LEFT,ANCHOR_RATIO);
-	del->set_anchor(MARGIN_RIGHT,ANCHOR_END);
-	del->set_begin( Point2(0.86,25) );
-	del->set_end( Point2(5,26) );
+	add_prop_bar->add_child(del);
 	del->set_text("Del");
 	del->connect("pressed",this,"_item_del");
 
-	/*
+	search_bar = memnew( HBoxContainer );
+	search_bar->set_h_size_flags(Control::SIZE_EXPAND_FILL);
+	hbc->add_child(search_bar);
+	search_bar->hide();
+
+	search_box = memnew( LineEdit );
+	search_box->set_h_size_flags(Control::SIZE_EXPAND_FILL);
+	search_bar->add_child(search_box);
+
+	clear_button = memnew( ToolButton );
+	search_bar->add_child(clear_button);
+	clear_button->connect("pressed",this,"_clear_search_box");
+
+	globals_editor = memnew( PropertyEditor );
+	props_base->add_child(globals_editor);
+	globals_editor->hide_top_label();
+	globals_editor->set_v_size_flags(Control::SIZE_EXPAND_FILL);
+	globals_editor->register_text_enter(search_box);
+	globals_editor->set_capitalize_paths(false);
+	globals_editor->get_scene_tree()->connect("cell_selected",this,"_item_selected");
+	globals_editor->connect("property_toggled",this,"_item_checked");
+	globals_editor->connect("property_edited",this,"_settings_prop_edited");
+
+/*
 	Button *save = memnew( Button );
 	props_base->add_child(save);
 
@@ -1325,17 +1362,16 @@ ProjectSettings::ProjectSettings(EditorData *p_data) {
 	save->set_text("Save");
 	save->connect("pressed",this,"_save");
 */
+
+	hbc = memnew( HBoxContainer );
+	props_base->add_child(hbc);
+
 	popup_platform = memnew( MenuButton );
 	popup_platform->set_text("Copy To Platform..");
 	popup_platform->set_disabled(true);
-	props_base->add_child(popup_platform);
-
-	popup_platform->set_anchor(MARGIN_LEFT,ANCHOR_BEGIN);
-	popup_platform->set_anchor(MARGIN_RIGHT,ANCHOR_BEGIN);
-	popup_platform->set_anchor(MARGIN_TOP,ANCHOR_END);
-	popup_platform->set_anchor(MARGIN_BOTTOM,ANCHOR_END);
-	popup_platform->set_begin( Point2(10,28) );
-	popup_platform->set_end( Point2(150,20) );
+	hbc->add_child(popup_platform);
+
+	hbc->add_spacer();
 
 	List<StringName> ep;
 	EditorImportExport::get_singleton()->get_export_platforms(&ep);

+ 9 - 0
tools/editor/project_settings.h

@@ -47,6 +47,12 @@ class ProjectSettings : public AcceptDialog {
 	UndoRedo *undo_redo;
 	PropertyEditor *globals_editor;
 
+	HBoxContainer *search_bar;
+	ToolButton *search_button;
+	LineEdit *search_box;
+	ToolButton *clear_button;
+
+	HBoxContainer *add_prop_bar;
 	ConfirmationDialog *message;
 	LineEdit *category;
 	LineEdit *property;
@@ -130,6 +136,9 @@ class ProjectSettings : public AcceptDialog {
 	void _translation_res_option_changed();
 	void _translation_res_option_delete(Object *p_item,int p_column, int p_button);
 
+	void _toggle_search_bar(bool p_pressed);
+	void _clear_search_box();
+
 	ProjectSettings();
 
 

+ 49 - 8
tools/editor/property_editor.cpp

@@ -2363,6 +2363,8 @@ void PropertyEditor::update_tree() {
 
 	TreeItem * current_category=NULL;
 
+	String filter = search_box ? search_box->get_text() : "";
+
 	for (List<PropertyInfo>::Element *I=plist.front() ; I ; I=I->next()) {
 
 		PropertyInfo& p = I->get();
@@ -2426,7 +2428,24 @@ void PropertyEditor::update_tree() {
 		} else  if ( ! (p.usage&PROPERTY_USAGE_EDITOR ) )
 			continue;
 
+		String name = (p.name.find("/")!=-1)?p.name.right( p.name.find_last("/")+1 ):p.name;
+
+		if (capitalize_paths)
+			name = name.camelcase_to_underscore().capitalize();
+
 		String path=p.name.left( p.name.find_last("/") ) ;
+
+		if (use_filter && filter!="") {
+
+			String cat = path;
+
+			if (capitalize_paths)
+				cat = cat.capitalize();
+
+			if (cat.findn(filter)==-1 && name.findn(filter)==-1)
+				continue;
+		}
+
 		//printf("property %s\n",p.name.ascii().get_data());
 		TreeItem * parent = get_parent_node(path,item_path,current_category?current_category:root );
 		//if (parent->get_parent()==root)
@@ -2448,8 +2467,6 @@ void PropertyEditor::update_tree() {
 
 		TreeItem * item = tree->create_item( parent );
 
-		String name = (p.name.find("/")!=-1)?p.name.right( p.name.find_last("/")+1 ):p.name;
-
 		if (level>0) {
 			item->set_custom_bg_color(0,col);
 			//item->set_custom_bg_color(1,col);
@@ -2465,11 +2482,7 @@ void PropertyEditor::update_tree() {
 			item->set_checked(0,p.usage&PROPERTY_USAGE_CHECKED);
 		}
 
-		if (capitalize_paths)
-			item->set_text( 0, name.camelcase_to_underscore().capitalize() );
-		else
-			item->set_text( 0, name );
-
+		item->set_text(0, name);
 		item->set_tooltip(0, p.name);
 
 		if (use_doc_hints) {
@@ -3403,6 +3416,11 @@ void PropertyEditor::_draw_flags(Object *t,const Rect2& p_rect) {
 
 }
 
+void PropertyEditor::_filter_changed(const String& p_text) {
+
+	update_tree();
+}
+
 void PropertyEditor::_bind_methods() {
 
 	ObjectTypeDB::bind_method( "_item_edited",&PropertyEditor::_item_edited);
@@ -3415,6 +3433,7 @@ void PropertyEditor::_bind_methods() {
 	ObjectTypeDB::bind_method( "_changed_callback",&PropertyEditor::_changed_callbacks);
 	ObjectTypeDB::bind_method( "_draw_flags",&PropertyEditor::_draw_flags);
 	ObjectTypeDB::bind_method( "_set_range_def",&PropertyEditor::_set_range_def);
+	ObjectTypeDB::bind_method( "_filter_changed",&PropertyEditor::_filter_changed);
 
 	ADD_SIGNAL( MethodInfo("property_toggled",PropertyInfo( Variant::STRING, "property"),PropertyInfo( Variant::BOOL, "value")));
 	ADD_SIGNAL( MethodInfo("resource_selected", PropertyInfo( Variant::OBJECT, "res"),PropertyInfo( Variant::STRING, "prop") ) );
@@ -3469,12 +3488,32 @@ void PropertyEditor::set_show_categories(bool p_show) {
 	update_tree();
 }
 
+void PropertyEditor::set_use_filter(bool p_use) {
+
+	if (p_use==use_filter)
+		return;
+
+	use_filter=p_use;
+	update_tree();
+}
+
+void PropertyEditor::register_text_enter(Node* p_line_edit) {
+
+	ERR_FAIL_NULL(p_line_edit);
+	search_box=p_line_edit->cast_to<LineEdit>();
+
+	if (search_box)
+		search_box->connect("text_changed",this,"_filter_changed");
+
+}
+
 PropertyEditor::PropertyEditor() {
 
 	_prop_edited="property_edited";
 	_prop_edited_name.push_back(String());
 	undo_redo=NULL;
 	obj=NULL;
+	search_box=NULL;
 	changing=false;
 	update_tree_pending=false;
 
@@ -3527,7 +3566,9 @@ PropertyEditor::PropertyEditor() {
 	show_categories=false;
 	refresh_countdown=0;
 	use_doc_hints=false;
-	
+
+	use_filter=false;
+
 }
 
 

+ 9 - 1
tools/editor/property_editor.h

@@ -147,6 +147,7 @@ class PropertyEditor : public Control {
 	Tree *tree;
 	Label *top_label;
 	//Object *object;
+	LineEdit *search_box;
 
 	Object* obj;
 
@@ -163,6 +164,8 @@ class PropertyEditor : public Control {
 	float refresh_countdown;
 	bool use_doc_hints;
 
+	bool use_filter;
+
 	HashMap<String,String> pending;
 	String selected_property;
 
@@ -201,6 +204,8 @@ class PropertyEditor : public Control {
 	void _refresh_item(TreeItem *p_item);
 	void _set_range_def(Object *p_item, String prop, float p_frame);
 
+	void _filter_changed(const String& p_text);
+
 	UndoRedo *undo_redo;
 protected:
 
@@ -230,7 +235,10 @@ public:
 
 	void set_show_categories(bool p_show);
 	void set_use_doc_hints(bool p_enable) { use_doc_hints=p_enable; }
-	
+
+	void set_use_filter(bool p_use);
+	void register_text_enter(Node *p_line_edit);
+
 	PropertyEditor();	
 	~PropertyEditor();
 

+ 4 - 1
tools/editor/scene_tree_dock.cpp

@@ -1264,7 +1264,10 @@ void SceneTreeDock::import_subscene() {
 void SceneTreeDock::_import_subscene() {
 
 	Node* parent = scene_tree->get_selected();
-	ERR_FAIL_COND(!parent);
+	if (!parent) {
+		parent = editor_data->get_edited_scene_root();
+		ERR_FAIL_COND(!parent);
+	}
 
 	import_subscene_dialog->move(parent,edited_scene);
 	editor_data->get_undo_redo().clear_history(); //no undo for now..

+ 41 - 4
tools/editor/settings_config_dialog.cpp

@@ -72,6 +72,10 @@ void EditorSettingsDialog::popup_edit_settings() {
 
 	property_editor->edit(EditorSettings::get_singleton());
 	property_editor->update_tree();
+
+	search_box->select_all();
+	search_box->grab_focus();
+
 	popup_centered_ratio(0.7);
 }
 
@@ -244,11 +248,21 @@ void EditorSettingsDialog::_update_plugins() {
 
 }
 
+void EditorSettingsDialog::_clear_search_box() {
+
+	if (search_box->get_text()=="")
+		return;
+
+	search_box->clear();
+	property_editor->update_tree();
+}
+
 void EditorSettingsDialog::_notification(int p_what) {
 
 	if (p_what==NOTIFICATION_ENTER_TREE) {
 
 		rescan_plugins->set_icon(get_icon("Reload","EditorIcons"));
+		clear_button->set_icon(get_icon("Close","EditorIcons"));
 		_update_plugins();
 	}
 }
@@ -261,6 +275,7 @@ void EditorSettingsDialog::_bind_methods() {
 	ObjectTypeDB::bind_method(_MD("_plugin_settings"),&EditorSettingsDialog::_plugin_settings);
 	ObjectTypeDB::bind_method(_MD("_plugin_edited"),&EditorSettingsDialog::_plugin_edited);
 	ObjectTypeDB::bind_method(_MD("_plugin_install"),&EditorSettingsDialog::_plugin_install);
+	ObjectTypeDB::bind_method(_MD("_clear_search_box"),&EditorSettingsDialog::_clear_search_box);
 }
 
 EditorSettingsDialog::EditorSettingsDialog() {
@@ -271,16 +286,38 @@ EditorSettingsDialog::EditorSettingsDialog() {
 	add_child(tabs);
 	set_child_rect(tabs);
 
+	VBoxContainer *vbc = memnew( VBoxContainer );
+	tabs->add_child(vbc);
+	vbc->set_name("General");
+
+	HBoxContainer *hbc = memnew( HBoxContainer );
+	hbc->set_h_size_flags(Control::SIZE_EXPAND_FILL);
+	vbc->add_child(hbc);
+
+	Label *l = memnew( Label );
+	l->set_text("Search: ");
+	hbc->add_child(l);
+
+	search_box = memnew( LineEdit );
+	search_box->set_h_size_flags(Control::SIZE_EXPAND_FILL);
+	hbc->add_child(search_box);
+
+	clear_button = memnew( ToolButton );
+	hbc->add_child(clear_button);
+	clear_button->connect("pressed",this,"_clear_search_box");
+
 	property_editor = memnew( PropertyEditor );
 	property_editor->hide_top_label();
-	tabs->add_child(property_editor);
-	property_editor->set_name("General");
+	property_editor->set_use_filter(true);
+	property_editor->register_text_enter(search_box);
+	property_editor->set_v_size_flags(Control::SIZE_EXPAND_FILL);
+	vbc->add_child(property_editor);
 
-	VBoxContainer *vbc = memnew( VBoxContainer );
+	vbc = memnew( VBoxContainer );
 	tabs->add_child(vbc);
 	vbc->set_name("Plugins");
 
-	HBoxContainer *hbc = memnew( HBoxContainer );
+	hbc = memnew( HBoxContainer );
 	vbc->add_child(hbc);
 	hbc->add_child( memnew( Label("Plugin List: ")));
 	hbc->add_spacer();

+ 4 - 0
tools/editor/settings_config_dialog.h

@@ -51,6 +51,8 @@ class EditorSettingsDialog : public AcceptDialog {
 
 	Button *rescan_plugins;
 	Tree *plugins;
+	LineEdit *search_box;
+	ToolButton *clear_button;
 	PropertyEditor *property_editor;
 
 	Timer *timer;
@@ -71,6 +73,8 @@ class EditorSettingsDialog : public AcceptDialog {
 	void _rescan_plugins();
 	void _update_plugins();
 
+	void _clear_search_box();
+
 protected:
 
 	static void _bind_methods();

Some files were not shown because too many files changed in this diff