From f44241ce1bc412168b74a3f009f98f4e981671e3 Mon Sep 17 00:00:00 2001 From: orbitcowboy Date: Thu, 18 Dec 2014 10:02:57 +0100 Subject: [PATCH 01/32] sprite_3d.cpp: fixed buffer access out of bounds. --- scene/3d/sprite_3d.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scene/3d/sprite_3d.cpp b/scene/3d/sprite_3d.cpp index 77f2cf5cc1f..1d2bce5a918 100644 --- a/scene/3d/sprite_3d.cpp +++ b/scene/3d/sprite_3d.cpp @@ -292,7 +292,7 @@ SpriteBase3D::SpriteBase3D() { parent_sprite=NULL; pI=NULL; - for(int i=0;i<4;i++) + for(int i=0;i Date: Tue, 5 May 2015 14:16:59 -0300 Subject: [PATCH 02/32] Remove duplicated filter, Fix #1795 --- core/io/resource_format_xml.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/core/io/resource_format_xml.cpp b/core/io/resource_format_xml.cpp index 9de33e7ef35..4f3b98fbfdb 100644 --- a/core/io/resource_format_xml.cpp +++ b/core/io/resource_format_xml.cpp @@ -1761,7 +1761,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"); From 203f0693296094400db06f826b03cc1d63929223 Mon Sep 17 00:00:00 2001 From: Fabio Alessandrelli Date: Mon, 2 Nov 2015 17:54:33 +0100 Subject: [PATCH 03/32] Expose AudioServer::free(RID rid) as AudioServer::free_rid(RID rid) to avoid script error due to collision with Object method free --- doc/engine_classes.xml | 2 +- servers/audio_server.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/engine_classes.xml b/doc/engine_classes.xml index af153a16ef5..43602e26e97 100644 --- a/doc/engine_classes.xml +++ b/doc/engine_classes.xml @@ -1502,7 +1502,7 @@ - + diff --git a/servers/audio_server.cpp b/servers/audio_server.cpp index c155f5204ae..6c5a2de97b7 100644 --- a/servers/audio_server.cpp +++ b/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 ); From c1d19ad258139c73e7aa81cf6e1fbd99e1bfe38b Mon Sep 17 00:00:00 2001 From: Saracen Date: Sun, 8 Nov 2015 03:21:06 +0000 Subject: [PATCH 04/32] New shader feature: change the colour of shadows on a per-material basis. Conflicts: drivers/gles2/shader_compiler_gles2.cpp --- drivers/gles2/rasterizer_gles2.cpp | 3 +++ drivers/gles2/shader_compiler_gles2.cpp | 6 ++++++ drivers/gles2/shaders/material.glsl | 8 ++++++++ scene/resources/shader_graph.cpp | 1 + servers/visual/shader_language.cpp | 3 ++- 5 files changed, 20 insertions(+), 1 deletion(-) diff --git a/drivers/gles2/rasterizer_gles2.cpp b/drivers/gles2/rasterizer_gles2.cpp index d84ee5a7589..891fe49afac 100644 --- a/drivers/gles2/rasterizer_gles2.cpp +++ b/drivers/gles2/rasterizer_gles2.cpp @@ -4637,6 +4637,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; diff --git a/drivers/gles2/shader_compiler_gles2.cpp b/drivers/gles2/shader_compiler_gles2.cpp index d57512c9363..7501223fccd 100644 --- a/drivers/gles2/shader_compiler_gles2.cpp +++ b/drivers/gles2/shader_compiler_gles2.cpp @@ -218,6 +218,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) { @@ -838,6 +842,7 @@ ShaderCompilerGLES2::ShaderCompilerGLES2() { ////////////// + mode_replace_table[ShaderLanguage::SHADER_MATERIAL_LIGHT]["TIME"]="time"; mode_replace_table[2]["NORMAL"]="normal"; //mode_replace_table[2]["POSITION"]="IN_POSITION"; mode_replace_table[2]["LIGHT_DIR"]="light_dir"; @@ -849,6 +854,7 @@ ShaderCompilerGLES2::ShaderCompilerGLES2() { mode_replace_table[2]["SPECULAR_EXP"]="specular_exp"; mode_replace_table[2]["SHADE_PARAM"]="shade_param"; mode_replace_table[2]["LIGHT"]="light"; + mode_replace_table[ShaderLanguage::SHADER_MATERIAL_LIGHT]["SHADOW"]="shadow_color"; mode_replace_table[2]["POINT_COORD"]="gl_PointCoord"; mode_replace_table[2]["TIME"]="time"; diff --git a/drivers/gles2/shaders/material.glsl b/drivers/gles2/shaders/material.glsl index 38fb03ab5c8..ccd80bf2f09 100644 --- a/drivers/gles2/shaders/material.glsl +++ b/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); diff --git a/scene/resources/shader_graph.cpp b/scene/resources/shader_graph.cpp index 49a1bdccb1e..da4857cccac 100644 --- a/scene/resources/shader_graph.cpp +++ b/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}, diff --git a/servers/visual/shader_language.cpp b/servers/visual/shader_language.cpp index ea56306241e..6b1dae433cd 100644 --- a/servers/visual/shader_language.cpp +++ b/servers/visual/shader_language.cpp @@ -1112,7 +1112,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}, From 6d20ded6d7d776a0397ba8bd3f9e8250d2c4d9ff Mon Sep 17 00:00:00 2001 From: Julian Murgia - StraToN Date: Thu, 19 Nov 2015 14:15:17 +0100 Subject: [PATCH 05/32] Ask confirmation on closing a scene tab --- tools/editor/editor_node.cpp | 36 ++++++++++++++++++++++++++---------- tools/editor/editor_node.h | 2 ++ 2 files changed, 28 insertions(+), 10 deletions(-) diff --git a/tools/editor/editor_node.cpp b/tools/editor/editor_node.cpp index 5b9489992ac..b8b2a5262c9 100644 --- a/tools/editor/editor_node.cpp +++ b/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(); } } @@ -4469,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(); + } + } diff --git a/tools/editor/editor_node.h b/tools/editor/editor_node.h index bd88e1a4b91..002df0f3eab 100644 --- a/tools/editor/editor_node.h +++ b/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; From e393e66a94d88335f9c4011d1c6c85aa83da4bde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Verschelde?= Date: Thu, 19 Nov 2015 22:46:32 +0100 Subject: [PATCH 06/32] Rename polygon_path_finder demo and add icon --- demos/2d/polygon_path_finder/engine.cfg | 5 +++++ demos/2d/polygon_path_finder/icon.png | Bin 0 -> 712 bytes demos/2d/polygon_path_finder/poly_with_holes.scn | Bin 0 -> 2974 bytes .../polygonpathfinder.gd | 0 demos/2d/polygon_path_finder_demo/engine.cfg | 5 ----- demos/2d/polygon_path_finder_demo/icon.png | Bin 3639 -> 0 bytes demos/2d/polygon_path_finder_demo/icon.png.flags | 1 - .../new_scene_poly_with_holes.scn | Bin 2609 -> 0 bytes 8 files changed, 5 insertions(+), 6 deletions(-) create mode 100644 demos/2d/polygon_path_finder/engine.cfg create mode 100644 demos/2d/polygon_path_finder/icon.png create mode 100644 demos/2d/polygon_path_finder/poly_with_holes.scn rename demos/2d/{polygon_path_finder_demo => polygon_path_finder}/polygonpathfinder.gd (100%) delete mode 100644 demos/2d/polygon_path_finder_demo/engine.cfg delete mode 100644 demos/2d/polygon_path_finder_demo/icon.png delete mode 100644 demos/2d/polygon_path_finder_demo/icon.png.flags delete mode 100644 demos/2d/polygon_path_finder_demo/new_scene_poly_with_holes.scn diff --git a/demos/2d/polygon_path_finder/engine.cfg b/demos/2d/polygon_path_finder/engine.cfg new file mode 100644 index 00000000000..47450408af8 --- /dev/null +++ b/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" diff --git a/demos/2d/polygon_path_finder/icon.png b/demos/2d/polygon_path_finder/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..643f5595ee6aaf2512d96a3061b6fc7aeb8d75b1 GIT binary patch literal 712 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1SD0tpLGH$wj^(N7l!{JxM1({$v_d#0*}aI z1_r((Aj~*bn@<`j$X?><>&kwgTUb=vAfP2Ng@J)7)YHW=B;(%OTl>8aJBS?kI9=Yi zCCc%r)>;nHIVBUi7U|`2-LiMzFuQd1KgNIRT4lvSSFX7_7HEh?iM(9meJSR3z@40; z_j)_;INpmpG=1Oc=WQ8FgE&LvWJTtyD7-V2tlK>4b)IhB2ix%K96y__&mVKnIJG`( z{jKC_2mgdz`mLEGzw7<;X`U|ZJ6!zJyC)~FuhKgE=gPi!g6DPLU-j3!Zd~U7LbAX% zd2)F@1B1@y`l6k2mOK8J1vxR7O}mx8b!))6_+#%v_00Od%g3A-5Z@5_gXg2{q>a^A zUz^T;tnz@#q#|rO6m;@2 zOuN|sCGT;CTjhGcerB};#@o2$1wKZoIWo3$+=$GYf31s2Z-&ML0mg?yVqyhb7@ZGU z=*I;zxJ!RVErm?((gK=^HU|P(I~03(Ep{;|wrpf{7ggvn zV0*BF$wjD*RnNk~CQ;)-6LXSckDSFSQ6YZ`)dKCEc?AwJEf-CAGX6D6aB}BVyz_be zN%&al+-Z#l>li#alKCgJ8%$%k$>GfI;UQ7gnxf1juArXS!H~(hm}|oP4GS1va&mJ3 z84V0SIX`m;G#Tt?Q03r`P(!qz09S;yT8SFO(mxRlWZhnC2KfUHx3vIVCg!07aq~tpET3 literal 0 HcmV?d00001 diff --git a/demos/2d/polygon_path_finder/poly_with_holes.scn b/demos/2d/polygon_path_finder/poly_with_holes.scn new file mode 100644 index 0000000000000000000000000000000000000000..6b340377b7b2c0fa0ced7c3b08fb82de929279f6 GIT binary patch literal 2974 zcmXw5dvp}#6~FV?N3t7|kjLh|-zGo^k0c}@r=ZE5-3)Rtv;P|EosYPg|reEmk{&DyFzPWQ> z^Sk%=_4S8BF!?J1xYGx4y$fIt55NHA7+`Zw1{lJDmvBX^Ybq&hx zf@V%s1~cOv&}_GH4AnCT#c=pR--%tY}50(>CLi{uD{t&N7@8q-CxghiOn@ zbLo7A?QR{1Zkun-S72-Ke%rlX{y9|JUO8al6`_?jTpp3PO^eB9 z0o)BsLYo~cWJ@tr@-56F6}UZoI`2Xc0-AXbrt%(ekUA=zqaIw08_|aza1$SPQ;p43 z&xd#6a{h@!v${Q`4%-lV*5p0mL-gGz>HoWVk8mXT5=Wb$+vYgotDMi~fXQ_SA3~q= z?hn4~n)Y$M4V^t}@E&F+QM-qO+o*l$sm(Pp&@Eib`+~RUd`u3*+i`?y zEd{W7uq%qgHuh6JZ+>m~FL@s{(0F~|C!V~Iq3JR{2u!Y_k;*n`y1brtSx&z!XIz%e zlTz?gy%wAG1-t3ykyGc_0|ds|`6Ua-&Y!wwJ#?QsyFMKFiW>^;W9I-QE`;Uq-taEa zS`f_0g^(*e0{zpk4u2Eocu`Gf^pnLjxO?&6&^6Xls5kyvT+s zhoM9jHQRDhss+<_EFgzn2}O)32~~?fY%>d_s+Ql_j+>jmWer)J`TWcwMmB8s0!Ktm zr6PJulkHF_j2Usrc2p%F1hHi`lTu;)j+ zkcv?dciC(eh|RZC#h84^u`HcdVrpP1EFDwjQ?RPJQr-cfz!!`m$KB+!;SF2#1-sw+^8rSQSLneR%DJdI$#)zX2nza_s7m- zt4qcKyr})=HXkJ4I(r@VAYXH(c3s<&t+O znmV|su4%KrhXJw$IBX-3uaQ>RObs5#8r;TY<>ogS&C11>)_y+wS3Te4&9Fk@Ck00t zQ4H(^YxYhylNxC3Wku5p+zn=v-{xlG98S>Gv{WA2k0sI>P;WhsUsB&bT+eibrCE3Z zr=p87wK>0r%*;PP%I4=TeNd`l44n)G-X+6~l94%Xcj2}!yb3wk*tk(D=iXjY-Hj!^ zy0lPg#Uk1~L_iMfqd#DVHIx)t4O!bUhI6HQNHpbbephe3RBgkq`yIj_>U>@A3nH zC{vl>B{Qf`s3Bf(5e_4`31VaucR90mI)0wZbKiaax_}>!*A8ZjwfziZoY>BJEs@va~UviKb#%s+KTC zF|s#!376pB!svi$>1k0m5~fs!M;&u1vzXDQW~o$o2E*fUB{kj!)x>Q>e6mN#2TqZ4 zn4)MTfkaT4&amVZ+?Yid-bZ_i3r)T;Nij66d=s`oDV78xT<4jJPUKwk&Qu(}=4|WJ zSjH`&C&UFWVX^0<+ClvBsu{wjR}W!s4U-9?OX#}{!oLPlWG5zyC6QV@DC9tEtY%Fh zWGZ9{2NR<}3MIfP_!HbkH6Ej$%aC3n0LmyT(%30Hh|TnYO4%!o{$n-Zrc72W#HoiI zHi3uu=;{Evf+g4)e2XTr7G2>N=-G61!Bnyk`>8S96Fgzp?!ghtj610dm%V%sRFF~H zxO?#Q%gsKi^k`nMQQtjNn>e{76 zg*8~m7cJ`z_mQa%q$nzP2MPC7`J+kV_2-v`g`f6rkN)%AIl1cf+%2O!{9C$zG%h`` zwZEPDZe`qm+lIP}@0NTIuWn+Oc;`qpN!O~vC0Dh-CB4IOMcawSA=f&U?S-lp?~FYQ=-#Op73zw(2Z*ESt(JHme5 zUGTGE&$pWu|ElH#dvAJZ;q+~r8>-IdaqD%(-uYGkXdvrenfUzDfA*jEch}#$rJ!n} z{i$C@kNc^#L=cJJ)vZ=I+rIK&h{>Wb+r-tm`L82c<1E)4u+` JP#?XS{}<% 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 JPDHLkV1hBt8>9dL diff --git a/demos/2d/polygon_path_finder_demo/icon.png.flags b/demos/2d/polygon_path_finder_demo/icon.png.flags deleted file mode 100644 index dbef2209e80..00000000000 --- a/demos/2d/polygon_path_finder_demo/icon.png.flags +++ /dev/null @@ -1 +0,0 @@ -gen_mipmaps=true diff --git a/demos/2d/polygon_path_finder_demo/new_scene_poly_with_holes.scn b/demos/2d/polygon_path_finder_demo/new_scene_poly_with_holes.scn deleted file mode 100644 index 07838be41e7fe99e105e6f5b4d6490ecafa276d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2609 zcmXw53v3+K6}|J>PrOdN{;b!ZIDWfM;;fBrh-0i0@ZOnSJA@=9iiKzi;mz#s?C!ws z%ywqhu}wnPgr7(w@hP++Rd7&02tlDh8_|lgDN!j15Ur{LMJdmzXi13_DnLa6kv<18 z(mQi!=FNR~?%Z?F+clj^!SWFXI2Qrv2>^U90tf�fd@g185|^hMju$79%&EH7tXy zWMcrsWJ05`iUb=S!?mkU))=w$vY|Dv%9r$lJ2GRsW~O97E9t8>i#fYW!anMnIU~o! z_LZhJV>lko>siBvCI&-t)pCnECSWClmVj+h&#pi_gK)597K&b3uTat{S7$atltE{6 z)-LIeqt8*(rLI%RKnv;eS9C`&yCdWdzm=n9J7+K{vLa_xydupx`rhTMl4%)qubK0T zwHeu*HFC7}W<%9As9vfRby!Vyvp^@QiMB(v0|IojhF-a1o0b;~N%IDDG5;EW&UCZ7 zlUuwIdYHclXM(eH)UutjULs%U8yDY|a%MhHdIboR(Zv?otr*#AEX1VN6-L=~UDLLp zjjiaHs4-hvl7L6(>1K(R%~>W5)%F9`NA*wYW#w6Ln3SkB1J!yn_h>6*ccf6Vm*nD- z*aR!cLp&RFHcw6q&`cU-&zSY9@dAVQ@i+^#iPXz#|71c`dm&R~{#G1Nd79goU@b(L zRIW!@aCixlOdhUBa9Dke1^4JTKqqU|V;)|fx|YG^dW^|mVKc5*{=s1V!oAG*uNwEm zd^A(Fa;3iCrp`lvOu)1j&zy?=M7Uxk z_Hw8+SFo*$?iKT<6%We8g&asE0S!cwOLmrLaIJJHye*Se1o-a~FM~1M^|iSX9#k6% z-~%v~+UMJ$dxm3@k70mBKwOmYek@=U0&4XT_(+(epNS!~Fp8TYxERF{R&X1iaFAP3 z2$3*eFFo_bKyq>?ZbnESt%vYu^-%iNdPsSOk3Xv~Nt^;nCQ0gjwJ4J~7m|}njQW54 z&W96g-|Jy8imiA=+yJ0|fJXqxh&s<#dv3CcuK>!&wLSro>K*lHdVeh{)G+-xKFVip z0bnw)NYf-B1}%;dHUR*^w1gUw$x!^2oB7p?@S*{9|kLd z;AW*%Z~8%)UUyCUqjXlLX1QV~`bi5E^DoxJvghcQTNq3an4B>s)0;a33+kymU->|O z(@)F1b}7~7VduIRz}2qvZ7r9LoVhM1ZZT{^1ZPfr%vaLq49CrNLt&AV_a^0U4BDVf zzBPGNpmyS~;3UrEjxbmwW_5SNr|Zl8U#9P1(BX58tYOX!tk$~0Wxg@O0tJI+jDl$` zSN53Jk$8jo+Q|j6l(7>k^G)#r7w8=Gbrk;yG~o#)Blj%heA+(ntYBJ+ANWhuvF$Q< zc05rQX+|IXF3_6~8Y>t~FtGz@|I;EhbNWZHQ#ql04yoA3f}`hqmf$3e6#DaJf5owH zHnQH<$0rxXygj2$2$qp}Lkp9Dy4!b)VN|Go^;6(w#{Ai;;~18gU#OorR>$FhVa=G1 zZIv;u&a1`PlQ)MaQ9X)LAq3f5KToqDhi*aWb4#IRCP?_|Lt<$lr5yTy}%pC2DTdGh&lFXN>sX_w%> ztCuj0AsDUQqxNCT)papv(xX7N@nBEHx3sy2ram}3y( z(GFr7N+dnZz|qG}+_iO|LQYHnTavEBe`D{u8-=1h@cX{~Oj?6a3Kjdn6`bm{KLE_~O7s>Zwc(3_1|wewDRFsqn7jaCa`~!dS^B1GcqK8p7n&A( zW!vEqu!*|#$$wr`SZ`h8-+w-8sc-ZFG2BT8?){`ysTE372j>W8IeQPwu{oUK;gBCEAusp|zgt8Esq znEIY}H*}Exc1n4p@VL-ARg1cY=b2W)r8M)9`XWx@Lk-!g>)BD8dB;z=3>k(+3P=<~7)@(_C5R8>JVI&{|BFpHz_AZU zpc%ul8>G>*kx`Tamz|9~xBcAk^Vlkl@jD~{FJV*Y@7=Tb)m7`2TVHtsYu5`EmGkSG zizWFd6{&dPLX*bZHy%}H!HPGFE)dcJw-E_0ECOlJfKw-dhxm-AxE$=@V-FvF$oBz| zI*&T0Qj0jwACL3fd_a)2aX#j;NvYvD*QY4Aeu@D#jMM5{{48;q+RbAa!T_|8agMEv z0re#A<_<9l5fWyDNAOWLeFWOck5IxR_=Pgag-GJgqofhPe Date: Thu, 19 Nov 2015 23:45:19 +0100 Subject: [PATCH 07/32] Add icons to all demos that can have a meaningful one --- demos/2d/fog_of_war/icon.png.flags | 1 - demos/2d/lookat/engine.cfg | 1 + demos/2d/lookat/icon.png | Bin 0 -> 1495 bytes demos/2d/motion/engine.cfg | 1 + demos/2d/motion/icon.png | Bin 0 -> 2621 bytes demos/2d/texscreen/engine.cfg | 1 + demos/2d/texscreen/icon.png | Bin 0 -> 9245 bytes demos/3d/truck_town/engine.cfg | 1 + demos/3d/truck_town/icon.png | Bin 0 -> 6878 bytes demos/gui/drag_and_drop/engine.cfg | 1 + demos/gui/drag_and_drop/icon.png | Bin 0 -> 806 bytes demos/gui/input_mapping/engine.cfg | 1 + demos/gui/input_mapping/icon.png | Bin 0 -> 1503 bytes demos/gui/translation/engine.cfg | 1 + demos/gui/translation/icon.png | Bin 0 -> 2557 bytes demos/misc/regex/engine.cfg | 1 + demos/misc/regex/icon.png | Bin 0 -> 2215 bytes demos/misc/tween/icon.png | Bin 3621 -> 2831 bytes demos/misc/window_management/icon.png | Bin 3639 -> 4210 bytes demos/misc/window_management/icon.png.flags | 1 - demos/viewport/3d_in_2d/engine.cfg | 1 + demos/viewport/3d_in_2d/icon.png | Bin 0 -> 3758 bytes demos/viewport/gui_in_3d/engine.cfg | 1 + demos/viewport/gui_in_3d/icon.png | Bin 0 -> 3770 bytes demos/viewport/screen_capture/engine.cfg | 1 + demos/viewport/screen_capture/icon.png | Bin 0 -> 7350 bytes 26 files changed, 11 insertions(+), 2 deletions(-) delete mode 100644 demos/2d/fog_of_war/icon.png.flags create mode 100644 demos/2d/lookat/icon.png create mode 100644 demos/2d/motion/icon.png create mode 100644 demos/2d/texscreen/icon.png create mode 100644 demos/3d/truck_town/icon.png create mode 100644 demos/gui/drag_and_drop/icon.png create mode 100644 demos/gui/input_mapping/icon.png create mode 100644 demos/gui/translation/icon.png create mode 100644 demos/misc/regex/icon.png delete mode 100644 demos/misc/window_management/icon.png.flags create mode 100644 demos/viewport/3d_in_2d/icon.png create mode 100644 demos/viewport/gui_in_3d/icon.png create mode 100644 demos/viewport/screen_capture/icon.png diff --git a/demos/2d/fog_of_war/icon.png.flags b/demos/2d/fog_of_war/icon.png.flags deleted file mode 100644 index dbef2209e80..00000000000 --- a/demos/2d/fog_of_war/icon.png.flags +++ /dev/null @@ -1 +0,0 @@ -gen_mipmaps=true diff --git a/demos/2d/lookat/engine.cfg b/demos/2d/lookat/engine.cfg index 56917a39ec7..81df107f0e7 100644 --- a/demos/2d/lookat/engine.cfg +++ b/demos/2d/lookat/engine.cfg @@ -2,3 +2,4 @@ name="Look At Pointer" main_scene="res://lookat.scn" +icon="res://icon.png" diff --git a/demos/2d/lookat/icon.png b/demos/2d/lookat/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..442cc1799f81f2e6abd3f448f0e1400a3135d99a GIT binary patch literal 1495 zcmV;|1t|K7P)00009a7bBm000ie z000ie0hKEb8vp&!6vywmzu!z- zTA>5f7NO9R2C+gF5H&=Ji3>0>EFjTnTp0fVG?}}6FYo1k?)jecJ?A|*bm$OS&5M#%zUlyVfI2`O zpbk(o00s>~T$KRMxk8~}sRMx32Y`ri6w9?byQYDVRS00LNg;jZ-Pe5TkW^bje4!g2 zJvwBZJ!JRB#6CIt@!KM!l2W2T)NTX`H})!T>@Lu@r?(oh@&CcqC}b z#>I$MJpmSsfH5XbQ!{FJzw^9O>d!NO6h>|r$BUdXB!zH}D50cKk_%3NSnrck?2M}w z0LGZs+88r(B|muT{By7GkyHiQ%(^FY00bxn3Y1bxfexG06nM_71Ie2{F`sLyI zV?_ueI^(hGjnKmZ%0kjwgNGl#I9-$k;Gw~ZOm473XCkP(iUC0%R-V; zUi@xw_|h15 z*%br0V{KAQ43GVK>b&>9G#v^qDomtOGQOkhK>HIfr0FvBe@is~a*rgWyx2cD`uC`f z(h3_PN@)bSHTK`38&onkZ7YlbrOa8@+1}gS zl*=`59h=Bo467Z1@>YT%kWxnD;mGBDh_`H8aoHO3Bp{F<_B zW6aFy&K~^SFx|P5%r=DfPUgfjS7J*TV}T41ajx<6$Dh8SwboiMba%1cS5+kh08&2Q xzh?D6^>u(cKpmhCPzR_3)B)-Mb%2#y{{dcmTrWXR&O87B002ovPDHLkV1m9hv@HMt literal 0 HcmV?d00001 diff --git a/demos/2d/motion/engine.cfg b/demos/2d/motion/engine.cfg index 261111904ce..6e660572d6f 100644 --- a/demos/2d/motion/engine.cfg +++ b/demos/2d/motion/engine.cfg @@ -2,6 +2,7 @@ name="Motion Test" main_scene="res://motion.scn" +icon="res://icon.png" [display] diff --git a/demos/2d/motion/icon.png b/demos/2d/motion/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..9e64961d3c9f6d5608251487b343f64a03f682e6 GIT binary patch literal 2621 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 literal 0 HcmV?d00001 diff --git a/demos/3d/truck_town/engine.cfg b/demos/3d/truck_town/engine.cfg index 3c340e6dcd2..b2a463e1e2a 100644 --- a/demos/3d/truck_town/engine.cfg +++ b/demos/3d/truck_town/engine.cfg @@ -2,6 +2,7 @@ name="Truck Town" main_scene="res://car_select.scn" +icon="res://icon.png" [display] diff --git a/demos/3d/truck_town/icon.png b/demos/3d/truck_town/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..7d7bd42116da196d7058df5d49703b6c3249d4a8 GIT binary patch literal 6878 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 TKo$~Q00000NkvXXu0mjfSmEv? literal 0 HcmV?d00001 diff --git a/demos/misc/regex/engine.cfg b/demos/misc/regex/engine.cfg index 0a6f4f869cf..ef5483e0969 100644 --- a/demos/misc/regex/engine.cfg +++ b/demos/misc/regex/engine.cfg @@ -2,3 +2,4 @@ name="RegEx" main_scene="res://regex.scn" +icon="res://icon.png" diff --git a/demos/misc/regex/icon.png b/demos/misc/regex/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..7a5232ec4bafefc2e79e7aea2d9206ac76cf8a3f GIT binary patch literal 2215 zcmV;Y2w3-tP)00003b3#c}2nYz< z;ZNWI000SaNLh0L01m_e01m_fl`9S#000O|Nkl>sg1i~&TnDd*(#*ZuzP{r&E}Gn35BZ*VisX2E0zucf7}?iwZp z9*@VXyM_sYsJnoPqG@0(rcTw*$;-~k%XVGlGD_IF3t2gN*+HvTj(2?o00;y^%#KJy zLz%XR#xU20KjZ-A1@}$ zJ}NRcDl*p2-qy$03tOw;T9LE!0&N{_m2ynxe>xA3$9sEw$R&q!8vv>~w-saR>lz+E zd9otl&j7H{#fizZlSrj_JnFj0#n6zZ=mh}8%iE*0Pd5U9D>)bKnYJx0t*xzX&dv+u^OfY7c>8#!r)7O)_7Q_&T3S|qEx)j+sQAsR zt02F~cZoM1kC#X!?w)Q=PJasBxYowTT7E5H-qNyiWZrzo+S+>gG|X;kX?^_Y2>=)y z8?hYht2ws-VE3+nG&es6fP#YS?jDPWlf5oS!PJy)VKMVYacRkoGB0nBj`j|bNc6Og zCqI0O+`W5GON(G-HLH@%dDQ%v&8`v&MVT3Ac)WH+Z%2CvqNk_V-Q5iU+B({pEoa)a zsR?`H^K!4%+^GYA+M2o^K@R|wm6n^Eo0&4`@-QVi3MO=ujP$Jj{{GzDs{lizL`tQy z7cXAY=_W)X(ZPXv*R4Nq!L?RJp%X#@y zAQFi%$z<7+r;z3Ly?g%?3Pp~e%zaZThP^W=it6iAcL3B4ble zreV|ke7~rxZNTL9q8m)6-8AYnC8-qlZn(L*=H}!}B$6?`NMmDDU2Xl!zXSq+qCF;j z{_|!20sL;hN~y&06Deap3)%g8@~!_k+sf+Wb7wEAj8yXCY^+%X0^zI3t*Ix|y1IT* zwBM$U4?%2P)Tz|;pMQS#HeQ^KHS0I5?fo<9-v{tgsdVh9-!b@sfe~*OlLEZ8&E(!z zne@K_O#|u%r`cLmGk62qRCU)dArJtd=u@&zr<<5e|IMgll>87TpC;JUtwwhxqiJ^-8D>z;l1@ab8MobBS|D(b_F{T%gZw+I#wVMyqOUI%+1Z#t_z{j4DQ^i(IRLm z&ZX#6hVKIm1|vRh*P*0jm(Ld3+1sKh`c>pMKA*p3b3{>L(bkA?5=p1Lyu#XgHi<+6 z00#$FYip}w^#Bka9@f~{6uKeor^{D1ZrVU5lL-XE)`%@v^YTMCgf-MRgokfdjHl6P z%a-}4rv4xh2vlZ7Q8Z#(`2D8)+qXsDs=iHqW3O_!fxNt{y}f-89z1MmX=N}N78WxZ z4AZk`&x=H&;^Gp3Axlfkdw2ia+tbTpF#%xiTo${cQfaxkxLrS9%pMpRV6!Vx6g4(B z!r^d3Lqk(2QxF8XeEFw?2a*)y*Q{Ax&AD~w_8kCFnbFeHLSJA1{P~N$y?r$`wH+PG zulXuI&qyQ^0)b#)V1UEnj-NO>e7-1@!NEZ`yVB9ofy?F6>GaCVDy6y3&I>#}J!pnB z`4$U;AOiyf2M!!sw#?t(e@S!mqwF6q0lX^Wz`=b05W8ciT&m0{l}QDH9vViA3Vy;9ys0Cxt>;vEmE) zpsp@yM{G2U#T*=z@%elNc`f6q)HFS^UO?dTkuq|*4+aJ#OPBhQNIDJ<=eyi_U|<^G{im!-n?0%t*y=BR4Yy4a=E1?WxICACnhHFcR(c^(%27LGZaesfml$2wN*MnFrPWk58=byVVnf59(ipAn1hre;r|LF46JE}`EQlm3lt(l>yA@w`XfHB5*}e+D!Ss2fcK>PFLmy3sVC pZZr+38%+c1M$>@0(KMiL{tqPn%G@%85#9g*002ovPDHLkV1m^2L8$-$ literal 0 HcmV?d00001 diff --git a/demos/misc/tween/icon.png b/demos/misc/tween/icon.png index 3e991fcc291bf1ab2860b60b083f48a3bc536da7..ed55c24140f79351c111cdc8f2e3afb9f7b45463 100644 GIT binary patch literal 2831 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 diff --git a/demos/misc/window_management/icon.png b/demos/misc/window_management/icon.png index 0c422e37b0ea9e6ad2901c8d425cb12f4d37694f..ec5c7891f996965a793df65d0a75d8b844de9253 100644 GIT binary patch literal 4210 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 JPDHLkV1hBt8>9dL diff --git a/demos/misc/window_management/icon.png.flags b/demos/misc/window_management/icon.png.flags deleted file mode 100644 index 5130fd1aabc..00000000000 --- a/demos/misc/window_management/icon.png.flags +++ /dev/null @@ -1 +0,0 @@ -gen_mipmaps=false diff --git a/demos/viewport/3d_in_2d/engine.cfg b/demos/viewport/3d_in_2d/engine.cfg index cc893361b56..6d456d7bd48 100644 --- a/demos/viewport/3d_in_2d/engine.cfg +++ b/demos/viewport/3d_in_2d/engine.cfg @@ -2,3 +2,4 @@ name="3D in 2D" main_scene="res://main.scn" +icon="res://icon.png" diff --git a/demos/viewport/3d_in_2d/icon.png b/demos/viewport/3d_in_2d/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..d8a332c18f783d1a92f4d7119f624298ef17ca0b GIT binary patch literal 3758 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 YKW#@yq`WuOApigX07*qoM6N<$f(U9tbN~PV literal 0 HcmV?d00001 diff --git a/demos/viewport/gui_in_3d/engine.cfg b/demos/viewport/gui_in_3d/engine.cfg index 25a66361320..252e53ca333 100644 --- a/demos/viewport/gui_in_3d/engine.cfg +++ b/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" diff --git a/demos/viewport/gui_in_3d/icon.png b/demos/viewport/gui_in_3d/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..22bdd791bbd10155e412e0e752f4e8ad9cfccb6b GIT binary patch literal 3770 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 literal 0 HcmV?d00001 diff --git a/demos/viewport/screen_capture/engine.cfg b/demos/viewport/screen_capture/engine.cfg index b25ed8258ed..a843242720f 100644 --- a/demos/viewport/screen_capture/engine.cfg +++ b/demos/viewport/screen_capture/engine.cfg @@ -2,6 +2,7 @@ name="Screen Capturing" main_scene="res://screen_capture.scn" +icon="res://icon.png" [display] diff --git a/demos/viewport/screen_capture/icon.png b/demos/viewport/screen_capture/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a6968247759c4564ba6ff10f08f54daf1bb47e81 GIT binary patch literal 7350 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 literal 0 HcmV?d00001 From 6f718228d4798352cef3c4a55ee10a811e4fa187 Mon Sep 17 00:00:00 2001 From: masoud bh Date: Sun, 15 Nov 2015 01:13:14 +0330 Subject: [PATCH 08/32] Load binaryname.pck if not found data.pck search for binaryname.pck in linux and windows --- core/globals.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/core/globals.cpp b/core/globals.cpp index ffd4cf5d5e7..a4a5245f0bd 100644 --- a/core/globals.cpp +++ b/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; @@ -346,6 +347,15 @@ Error Globals::setup(const String& p_path,const String & p_main_pack) { found=true; + } + break; + } else 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 (_load_settings(current_dir+"/engine.cfg")==OK || _load_settings_binary(current_dir+"/engine.cfb")==OK) { From 6277fe3078eac6456968ca66d2abecf870d502b0 Mon Sep 17 00:00:00 2001 From: masoud bh Date: Sun, 15 Nov 2015 01:22:53 +0330 Subject: [PATCH 09/32] add priority to load binaryname.pck --- core/globals.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/globals.cpp b/core/globals.cpp index a4a5245f0bd..aee708d0cdd 100644 --- a/core/globals.cpp +++ b/core/globals.cpp @@ -340,7 +340,7 @@ 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"); @@ -349,7 +349,7 @@ Error Globals::setup(const String& p_path,const String & p_main_pack) { } break; - } else if (first_time && (_load_resource_pack(current_dir+"/"+exec_name+".pck") || _load_resource_pack(current_dir+"/"+exec_name+".pcz") )) { + } 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"); From 73a80e5509e8715b7ac4a85913c056edda6bc5ea Mon Sep 17 00:00:00 2001 From: Ovnuniarchos Date: Wed, 18 Nov 2015 16:56:26 +0100 Subject: [PATCH 10/32] Added definition of bias solver. --- doc/base/classes.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/doc/base/classes.xml b/doc/base/classes.xml index da53cb90a59..83c14231ea2 100644 --- a/doc/base/classes.xml +++ b/doc/base/classes.xml @@ -30608,6 +30608,7 @@ This method controls whether the position between two cached points is interpola Use a custom solver bias. No need to change this unless you really know what you are doing. + The solver bias is a factor controlling how much two colliding objects "rebound" off each other, to avoid them getting into each other, because of numerical imprecision. @@ -30646,6 +30647,8 @@ This method controls whether the position between two cached points is interpola + + @@ -30656,6 +30659,8 @@ This method controls whether the position between two cached points is interpola + + From 1155ac884c9b9a045de6a5d5ccd9a01fbfe95453 Mon Sep 17 00:00:00 2001 From: Ovnuniarchos Date: Thu, 19 Nov 2015 01:06:50 +0100 Subject: [PATCH 11/32] ConvexPolygonShape2D.set_point_cloud documented to do nothing. --- doc/base/classes.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/base/classes.xml b/doc/base/classes.xml index 83c14231ea2..e7cc9f4c016 100644 --- a/doc/base/classes.xml +++ b/doc/base/classes.xml @@ -6628,7 +6628,7 @@ - Radius of the [CapsuleShape2D]. + Set the radius of the [CapsuleShape2D]. @@ -6642,7 +6642,7 @@ - Height of the [CapsuleShape2D]. + Set the height of the [CapsuleShape2D]. @@ -7666,7 +7666,7 @@ Concave polygon shape. - Concave polygon shape resource, which can be set into a [PhysicsBody] or area. This shape is created by feeding a list of triangles. + Concave polygon shape resource, which can be set into a [PhysicsBody] or area. This shape is created by feeding a list of triangles. @@ -8590,7 +8590,7 @@ - Create the point set from a point cloud. The resulting convex hull will be set as the shape. + Currently, this method does nothing. From 68a0f713b8da43587c3b027abf73f0c891dab2bc Mon Sep 17 00:00:00 2001 From: Ovnuniarchos Date: Thu, 19 Nov 2015 10:35:48 +0100 Subject: [PATCH 12/32] Differences between ConvexPolygon2D and ConcavePolygon2D? --- doc/base/classes.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/base/classes.xml b/doc/base/classes.xml index e7cc9f4c016..d1be39fe430 100644 --- a/doc/base/classes.xml +++ b/doc/base/classes.xml @@ -8583,7 +8583,8 @@ Convex Polygon Shape for 2D physics. - Convex Polygon Shape for 2D physics. + Convex Polygon Shape for 2D physics. A convex polygon + Concave polygon 2D shape resource for physics. It is made out of segments and is very optimal for complex polygonal concave collisions. It is really not advised to use for RigidBody nodes. A CollisionPolygon2D in convex decomposition mode (solids) or several convex objects are advised for that instead. Otherwise, a concave polygon 2D shape is better for static collisions. From 8c0c46c2ae4b55c3ce966e218ca8b1e8d78159f1 Mon Sep 17 00:00:00 2001 From: Ovnuniarchos Date: Fri, 20 Nov 2015 18:09:01 +0100 Subject: [PATCH 13/32] Inserted explanation about the behaviour of CollsionPolygon2D.set_polygon. --- doc/base/classes.xml | 55 ++++++++++++++++++++++++++++++++++---------- 1 file changed, 43 insertions(+), 12 deletions(-) diff --git a/doc/base/classes.xml b/doc/base/classes.xml index d1be39fe430..32ff75efbd2 100644 --- a/doc/base/classes.xml +++ b/doc/base/classes.xml @@ -6947,7 +6947,7 @@ Base node for 2D collisionables. - CollisionObject2D is the base class for 2D physics collisionables. They can hold any number of 2D collision shapes. Usually, they are edited by placing CollisionBody2D and CollisionPolygon2D nodes as children. Such nodes are for reference ant not present outside the editor, so code should use the regular shape API. + CollisionObject2D is the base class for 2D physics collisionables. They can hold any number of 2D collision shapes. Usually, they are edited by placing [CollisionBody2D] and [CollisionPolygon2D] nodes as children. Such nodes are for reference and not present outside the editor, so code should use the regular shape API. @@ -7143,58 +7143,69 @@ - Editor-Only class. + Editor-only class for easy editing of collision polygons. - Editor-Only class. This is not present when running the game. It's used in the editor to properly edit and position collision shapes in [CollisionObject2D]. This is not accessible from regular code. This class is for editing custom shape polygons. + Editor-only class. This is not present when running the game. It's used in the editor to properly edit and position collision shapes in [CollisionObject2D]. This is not accessible from regular code. This class is for editing custom shape polygons. + Set the array of points forming the polygon. + When editing the point list via the editor, depending on [method get_build_mode], it has to be a list of points (for [code]build_mode[/code]=0), or a list of lines (for [code]build_mode[/code]=1). In the second case, the even elements of the array define the start point of the line, and the odd elements the end point. + Return the list of points that define the polygon. - + + Set whether the polygon is to be a [ConvexPolygon2D] ([code]build_mode[/code]=0), or a [ConcavePolygon2D] ([code]build_mode[/code]=1). + Return whether the polygon is a [ConvexPolygon2D] ([code]build_mode[/code]=0), or a [ConcavePolygon2D] ([code]build_mode[/code]=1). - + + Set whether this polygon is a trigger. A trigger polygon detects collisions, but is otherwise unaffected by physics (i.e. colliding objects will not get blocked). + Return whether this polygon is a trigger. + Return the index of the first shape generated by the editor. + When [code]build_mode[/code] is set to generate convex polygons, the shape shown in the editor may be decomopsed into many convex polygons. In that case, a range of indexes is needed to directly access the [Shape2D]s. + When [code]build_mode[/code] is set to generate concave polygons, there is only one [Shape2D] generated, so the start index and the end index are the same. + Return the index of the last shape generated by the editor. @@ -7253,40 +7264,45 @@ - Editor-Only class. + Editor-only class for easy editing of shapes. - Editor-Only class. This is not present when running the game. It's used in the editor to properly edit and position collision shapes in [CollisionObject2D]. This is not accessible from regular code. + Editor-only class. This is not present when running the game. It's used in the editor to properly edit and position collision shapes in [CollisionObject2D]. This is not accessible from regular code. + Set this shape's [Shape2D]. This will not appear as a node, but can be directly edited as a property. + Return this shape's [Shape2D]. + Set whether this shape is a trigger. A trigger shape detects collisions, but is otherwise unaffected by physics (i.e. will not block movement of colliding objects). + Return whether this shape is a trigger. + Return the index of this shape inside its container [CollisionObject2D]. This can be used to directly access the underlying [Shape2D]. @@ -7693,6 +7709,7 @@ Concave polygon 2D shape resource for physics. It is made out of segments and is very optimal for complex polygonal concave collisions. It is really not advised to use for RigidBody nodes. A CollisionPolygon2D in convex decomposition mode (solids) or several convex objects are advised for that instead. Otherwise, a concave polygon 2D shape is better for static collisions. + The main difference between a [ConvexPolygonShape2D] and a [ConcavePolygonShape2D] is that a concave polygon assumes it is concave and uses a more complex method of collision detection, and a convex one forces itself to be convex in order to speed up collision detection. @@ -8583,8 +8600,8 @@ Convex Polygon Shape for 2D physics. - Convex Polygon Shape for 2D physics. A convex polygon - Concave polygon 2D shape resource for physics. It is made out of segments and is very optimal for complex polygonal concave collisions. It is really not advised to use for RigidBody nodes. A CollisionPolygon2D in convex decomposition mode (solids) or several convex objects are advised for that instead. Otherwise, a concave polygon 2D shape is better for static collisions. + Convex Polygon Shape for 2D physics. A convex polygon, whatever its shape, is internally decomposed into as many convex polygons as needed to ensure all collision checks against it are always done on convex polygons (which are faster to check). + The main difference between a [ConvexPolygonShape2D] and a [ConcavePolygonShape2D] is that a concave polygon assumes it is concave and uses a more complex method of collision detection, and a convex one forces itself to be convex in order to speed up collision detection. @@ -26585,19 +26602,21 @@ This method controls whether the position between two cached points is interpola Ray 2D shape resource for physics. - Ray 2D shape resource for physics. A ray is not really a collision body, isntead it tries to separate itself from whatever is touching its far endpoint. It's often useful for ccharacters. + Ray 2D shape resource for physics. A ray is not really a collision body, isntead it tries to separate itself from whatever is touching its far endpoint. It's often useful for characters. + Set the length of the ray. + Return the length of the ray. @@ -29544,24 +29563,28 @@ This method controls whether the position between two cached points is interpola + Set the first point's position. + Return the first point's position. + Set the second point's position. + Return the second point's position. @@ -30609,14 +30632,14 @@ This method controls whether the position between two cached points is interpola Use a custom solver bias. No need to change this unless you really know what you are doing. - The solver bias is a factor controlling how much two colliding objects "rebound" off each other, to avoid them getting into each other, because of numerical imprecision. + The solver bias is a factor controlling how much two objects "rebound" off each other, when colliding, to avoid them getting into each other because of numerical imprecision. - Return the custom solver bias. No need to change this unless you really know what you are doing. + Return the custom solver bias. @@ -30629,6 +30652,8 @@ This method controls whether the position between two cached points is interpola + Return whether this shape is colliding with another. + This method needs the transformation matrix for this shape ([code]local_xform[/code]), the shape to check collisions with ([code]with_shape[/code]), and the transformation matrix of that shape ([code]shape_xform[/code]). @@ -30645,6 +30670,8 @@ This method controls whether the position between two cached points is interpola + Return whether this shape would collide with another, if a given movemen was applied. + This method needs the transformation matrix for this shape ([code]local_xform[/code]), the movement to test on this shape ([code]local_motion[/code]), the shape to check collisions with ([code]with_shape[/code]), the transformation matrix of that shape ([code]shape_xform[/code]), and the movement to test ont the other object ([code]shape_motion[/code]). @@ -30657,6 +30684,8 @@ This method controls whether the position between two cached points is interpola + Return a list of the points where this shape touches another. If there are no collisions, the list is empty. + This method needs the transformation matrix for this shape ([code]local_xform[/code]), the shape to check collisions with ([code]with_shape[/code]), and the transformation matrix of that shape ([code]shape_xform[/code]). @@ -30673,6 +30702,8 @@ This method controls whether the position between two cached points is interpola + Return a list of the points where this shape would touch another, if a given movement was applied. If there are no collisions, the list is empty. + This method needs the transformation matrix for this shape ([code]local_xform[/code]), the movement to test on this shape ([code]local_motion[/code]), the shape to check collisions with ([code]with_shape[/code]), the transformation matrix of that shape ([code]shape_xform[/code]), and the movement to test ont the other object ([code]shape_motion[/code]). From 497efa720cb53f4ddaef661739493069c102db0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Verschelde?= Date: Fri, 20 Nov 2015 18:39:23 +0100 Subject: [PATCH 14/32] Sync doc template with code --- doc/base/classes.xml | 221 +++++++++++++++++++++++++++---------------- 1 file changed, 138 insertions(+), 83 deletions(-) diff --git a/doc/base/classes.xml b/doc/base/classes.xml index 32ff75efbd2..d0ea373f5cc 100644 --- a/doc/base/classes.xml +++ b/doc/base/classes.xml @@ -3197,6 +3197,24 @@ + + + + + + + + + + + + + + + + + + @@ -5477,7 +5495,7 @@ - + Group of Buttons. @@ -5523,6 +5541,10 @@ + + + + @@ -7165,7 +7187,7 @@ - + Set whether the polygon is to be a [ConvexPolygon2D] ([code]build_mode[/code]=0), or a [ConcavePolygon2D] ([code]build_mode[/code]=1). @@ -7179,7 +7201,7 @@ - + Set whether this polygon is a trigger. A trigger polygon detects collisions, but is otherwise unaffected by physics (i.e. colliding objects will not get blocked). @@ -7314,7 +7336,7 @@ Color in RGBA format. - A color is represented as red, green and blue (r,g,b) components. Additionally, "a" represents the alpha component, often used for transparency. Values are in floating point and usually range from 0 to 1. Some methods (such as set_modulate() ) may accept values > 1. + A color is represented as red, green and blue (r,g,b) components. Additionally, "a" represents the alpha component, often used for transparency. Values are in floating point and usually range from 0 to 1. Some methods (such as set_modulate() ) may accept values > 1. @@ -8608,7 +8630,7 @@ - Currently, this method does nothing. + Currently, this method does nothing. @@ -8889,12 +8911,12 @@ Cubic interpolation tends to follow the curves better, but linear is faster (and + + - - Returns a list of points along the curve, with a curvature controlled point density. That is, the curvier parts will have more points than the straighter parts. This approximation makes straight segments between each point, then subdivides those segments until the resulting shape is similar enough. @@ -8902,16 +8924,6 @@ This approximation makes straight segments between each point, then subdivides t "tolerance_degrees" controls how many degrees the midpoint of a segment may deviate from the real curve, before the segment has to be subdivided. - - - - - - - - - - @@ -9096,12 +9108,12 @@ Cubic interpolation tends to follow the curves better, but linear is faster (and + + - - Returns a list of points along the curve, with a curvature controlled point density. That is, the curvier parts will have more points than the straighter parts. This approximation makes straight segments between each point, then subdivides those segments until the resulting shape is similar enough. @@ -9109,16 +9121,6 @@ This approximation makes straight segments between each point, then subdivides t "tolerance_degrees" controls how many degrees the midpoint of a segment may deviate from the real curve, before the segment has to be subdivided. - - - - - - - - - - @@ -10779,6 +10781,14 @@ This approximation makes straight segments between each point, then subdivides t + + + + + + + + @@ -12539,7 +12549,7 @@ This approximation makes straight segments between each point, then subdivides t - Connect to a host. This needs to be done before any requests are sent. + Connect to a host. This needs to be done before any requests are sent. The host should not have http:// prepended but will strip the protocol identifier if provided. verify_host will check the SSL identity of the host if set to true. @@ -12563,10 +12573,9 @@ verify_host will check the SSL identity of the host if set to true. - Sends a request to the connected host. The url is the what is normally behind the hostname, -i.e; + Sends a request to the connected host. The url is the what is normally behind the hostname, i.e: http://somehost.com/index.php -url would be "index.php" +url would be "index.php" Headers are HTTP request headers @@ -12584,8 +12593,8 @@ var result = httpClient.request(httpClient.METHOD_POST, "index.php", headers, qu - - Stub function + + Stub function @@ -12594,7 +12603,7 @@ var result = httpClient.request(httpClient.METHOD_POST, "index.php", headers, qu - Stub function + Stub function @@ -12647,14 +12656,14 @@ var result = httpClient.request(httpClient.METHOD_POST, "index.php", headers, qu - Sets the size of the buffer used and maximum bytes to read per iteration + Sets the size of the buffer used and maximum bytes to read per iteration - If set to true, execute will wait until all data is read from the response. + If set to true, execute will wait until all data is read from the response. @@ -12667,30 +12676,30 @@ var result = httpClient.request(httpClient.METHOD_POST, "index.php", headers, qu - Returns a status string like STATUS_REQUESTING. Need to call [method poll] in order to get status updates. + Returns a status string like STATUS_REQUESTING. Need to call [method poll] in order to get status updates. - - This needs to be called in order to have any request processed. Check results with [method get_status] + + This needs to be called in order to have any request processed. Check results with [method get_status] - - - - - - - Generates a GET/POST application/x-www-form-urlencoded style query string from a provided dictionary. + + + + + + + Generates a GET/POST application/x-www-form-urlencoded style query string from a provided dictionary. var fields = {"username": "user", "password": "pass"} String queryString = httpClient.query_string_from_dict(fields) returns:= "username=user&password=pass" - - + + @@ -14471,6 +14480,12 @@ returns:= "username=user&password=pass" + + + + + + @@ -15920,6 +15935,18 @@ returns:= "username=user&password=pass" LineEdit provides a single line string editor, used for text fields. + + + + + + + + + + + + Clear the [LineEdit] text. @@ -16033,6 +16060,14 @@ returns:= "username=user&password=pass" + + + + + + + + @@ -16700,11 +16735,11 @@ returns:= "username=user&password=pass" - + - + - + @@ -16751,6 +16786,8 @@ returns:= "username=user&password=pass" + + @@ -18602,6 +18639,18 @@ returns:= "username=user&password=pass" Replace a node in a scene by a given one. Subscriptions that pass through this node will be lost. + + + + + + + + + + + + @@ -21591,16 +21640,16 @@ This method controls whether the position between two cached points is interpola - Forbids the PathFollow to rotate. + Forbids the PathFollow to rotate. - Allows the PathFollow to rotate in the Y axis only. + Allows the PathFollow to rotate in the Y axis only. - Allows the PathFollow to rotate in both the X, and Y axes. + Allows the PathFollow to rotate in both the X, and Y axes. - Allows the PathFollow to rotate in any axis. + Allows the PathFollow to rotate in any axis. @@ -21715,10 +21764,6 @@ This method controls whether the position between two cached points is interpola - - - - @@ -26075,6 +26120,14 @@ This method controls whether the position between two cached points is interpola + + + + + + + + @@ -26886,27 +26939,22 @@ This method controls whether the position between two cached points is interpola - [OK] if the regular expression was valid. [FAIL] otherwise. - The string to be converted into a regular expression. + + - Once created, a RegEx object needs a regular expression to be assigned to it. This method tries to convert the string given to an usable regular expression. - The position within the string (starting with 0) where the pattern was found. It will return -1 if the pattern was not found, it was invalid, or the start or end positions were beyond the string's end. - The text to search the pattern in. - The position in the string (starting with 0) to start searching from. - The position in the string (starting with 0) to stop searching. A value less than the start position means "end of the string". This method tries to find the pattern within the string, and returns the position where it was found. It also stores any capturing group (see [method get_capture]) for further retrieval. @@ -26935,7 +26983,6 @@ This method controls whether the position between two cached points is interpola - The number of the captured group, starting with 0. Like other regular expression engines, Godot's engine takes 0 as the full expression, and 1 as the first pair of capturing parentheses. Returns a captured group. A captured group is the part of a string that matches a part of the pattern delimited by parentheses (unless they are non-capturing parentheses [i](?:)[/i]). @@ -26943,7 +26990,6 @@ This method controls whether the position between two cached points is interpola - A list contining all the strings captured by the regular expression. Return a list of all the captures made by the regular expression. @@ -30675,8 +30721,6 @@ This method controls whether the position between two cached points is interpola - - @@ -30689,8 +30733,6 @@ This method controls whether the position between two cached points is interpola - - @@ -34025,15 +34067,17 @@ This method controls whether the position between two cached points is interpola + + - Set the current column of the text editor. + + - Set the current line of the text editor. @@ -36289,6 +36333,18 @@ This method controls whether the position between two cached points is interpola + + + + + + + + + + + + @@ -37441,6 +37497,12 @@ This method controls whether the position between two cached points is interpola + + + + + + @@ -37459,13 +37521,6 @@ This method controls whether the position between two cached points is interpola Returns the angle in radians between the line connecting the two points and the x coordinate. - - - - - Returns the result of atan2 when called with the Vector's x and y as parameters. - - From 0c8dda80ff23859ca9faf6ed1033427c22acb4d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Verschelde?= Date: Fri, 20 Nov 2015 18:47:18 +0100 Subject: [PATCH 15/32] Update Vector2.angle() description --- doc/base/classes.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/base/classes.xml b/doc/base/classes.xml index d0ea373f5cc..44a7cccfe5c 100644 --- a/doc/base/classes.xml +++ b/doc/base/classes.xml @@ -37501,6 +37501,8 @@ This method controls whether the position between two cached points is interpola + Returns the result of atan2 when called with the Vector's x and y as parameters (Math::atan2(x,y)). + Be aware that it therefore returns an angle oriented clockwise with regard to the (0, 1) unit vector, and not an angle oriented counter-clockwise with regard to the (1, 0) unit vector (which would be the typical trigonometric representation of the angle when calling Math::atan2(y,x)). From 5ef23812ac8833c6456d8d7183373f1507804129 Mon Sep 17 00:00:00 2001 From: Franklin Sobrinho Date: Fri, 20 Nov 2015 18:25:01 -0300 Subject: [PATCH 16/32] Add more properties to AcceptDialog --- scene/gui/dialogs.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/scene/gui/dialogs.cpp b/scene/gui/dialogs.cpp index 0c0f924f522..efda8a66e12 100644 --- a/scene/gui/dialogs.cpp +++ b/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") ); + } From 82c8190013a179e33085df7d1677c7c47934247e Mon Sep 17 00:00:00 2001 From: Franklin Sobrinho Date: Sat, 21 Nov 2015 13:42:15 -0300 Subject: [PATCH 17/32] Implement name filter to PropertyEditor - Add search bar to Inspector tab and to Project and Editor settings dialog --- tools/editor/editor_node.cpp | 49 ++++++++ tools/editor/editor_node.h | 7 ++ tools/editor/project_settings.cpp | 156 +++++++++++++++--------- tools/editor/project_settings.h | 9 ++ tools/editor/property_editor.cpp | 48 ++++++-- tools/editor/property_editor.h | 10 +- tools/editor/settings_config_dialog.cpp | 45 ++++++- tools/editor/settings_config_dialog.h | 4 + 8 files changed, 255 insertions(+), 73 deletions(-) diff --git a/tools/editor/editor_node.cpp b/tools/editor/editor_node.cpp index 7d837f3211d..4e225928803 100644 --- a/tools/editor/editor_node.cpp +++ b/tools/editor/editor_node.cpp @@ -4024,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); @@ -4517,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 @@ -5322,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")); @@ -5333,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); @@ -5341,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()); diff --git a/tools/editor/editor_node.h b/tools/editor/editor_node.h index 002df0f3eab..7d8b97688e2 100644 --- a/tools/editor/editor_node.h +++ b/tools/editor/editor_node.h @@ -250,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; @@ -268,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; @@ -517,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(); diff --git a/tools/editor/project_settings.cpp b/tools/editor/project_settings.cpp index 25a27501660..2fd8b377531 100644 --- a/tools/editor/project_settings.cpp +++ b/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); + + 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 ) ); + + add_prop_bar = memnew( HBoxContainer ); + add_prop_bar->set_h_size_flags(Control::SIZE_EXPAND_FILL); + hbc->add_child(add_prop_bar); Label *l = memnew( Label ); - props_base->add_child(l); - l->set_pos(Point2(6,5)); + add_prop_bar->add_child(l); l->set_text("Category:"); - - 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:"); - - 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:"); - 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); + hbc->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_spacer(); List ep; EditorImportExport::get_singleton()->get_export_platforms(&ep); diff --git a/tools/editor/project_settings.h b/tools/editor/project_settings.h index 7c91254764a..b122609e52e 100644 --- a/tools/editor/project_settings.h +++ b/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(); diff --git a/tools/editor/property_editor.cpp b/tools/editor/property_editor.cpp index d6eae51fbd3..7687791ca2c 100644 --- a/tools/editor/property_editor.cpp +++ b/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::Element *I=plist.front() ; I ; I=I->next()) { PropertyInfo& p = I->get(); @@ -2426,6 +2428,14 @@ 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(); + + if (use_filter && filter!="" && name.findn(filter)==-1) + continue; + String path=p.name.left( p.name.find_last("/") ) ; //printf("property %s\n",p.name.ascii().get_data()); TreeItem * parent = get_parent_node(path,item_path,current_category?current_category:root ); @@ -2448,8 +2458,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 +2473,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 +3407,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 +3424,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 +3479,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(); + + 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 +3557,9 @@ PropertyEditor::PropertyEditor() { show_categories=false; refresh_countdown=0; use_doc_hints=false; - + + use_filter=false; + } diff --git a/tools/editor/property_editor.h b/tools/editor/property_editor.h index dcb7b66abde..5fb8386b1b3 100644 --- a/tools/editor/property_editor.h +++ b/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 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(); diff --git a/tools/editor/settings_config_dialog.cpp b/tools/editor/settings_config_dialog.cpp index f73de26eec7..6d8f8494275 100644 --- a/tools/editor/settings_config_dialog.cpp +++ b/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(); diff --git a/tools/editor/settings_config_dialog.h b/tools/editor/settings_config_dialog.h index cca1ef33d59..50159cf4886 100644 --- a/tools/editor/settings_config_dialog.h +++ b/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(); From d6b317a2c1d6560323d37831ab1d40f3b2674adc Mon Sep 17 00:00:00 2001 From: mikica1986vee Date: Sat, 21 Nov 2015 23:21:36 +0100 Subject: [PATCH 18/32] tegra 3 fix --- .../java/src/com/android/godot/GodotView.java | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/platform/android/java/src/com/android/godot/GodotView.java b/platform/android/java/src/com/android/godot/GodotView.java index ad0354e6241..1a84923065b 100644 --- a/platform/android/java/src/com/android/godot/GodotView.java +++ b/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 { From 9797b6374bff3845130e31029eeaa544ca546653 Mon Sep 17 00:00:00 2001 From: neikeq Date: Sun, 22 Nov 2015 15:53:22 +0100 Subject: [PATCH 19/32] Popup submenu position enhancement --- scene/gui/popup_menu.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/scene/gui/popup_menu.cpp b/scene/gui/popup_menu.cpp index 99663fb2e22..20f28ecf10f 100644 --- a/scene/gui/popup_menu.cpp +++ b/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 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(); From e956677f442f2d427602d5dec76c33c7739f5680 Mon Sep 17 00:00:00 2001 From: Franklin Sobrinho Date: Sun, 22 Nov 2015 13:05:55 -0300 Subject: [PATCH 20/32] Better PropertyEditor search --- tools/editor/property_editor.cpp | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/tools/editor/property_editor.cpp b/tools/editor/property_editor.cpp index 7687791ca2c..31393ebcbc1 100644 --- a/tools/editor/property_editor.cpp +++ b/tools/editor/property_editor.cpp @@ -2433,10 +2433,19 @@ void PropertyEditor::update_tree() { if (capitalize_paths) name = name.camelcase_to_underscore().capitalize(); - if (use_filter && filter!="" && name.findn(filter)==-1) - continue; - 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) From f99b630993166725e91ccf2868cc4cefe2008286 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Verschelde?= Date: Sun, 22 Nov 2015 16:55:07 +0100 Subject: [PATCH 21/32] Load main scene if defined when running editor from the command line If no main scene is defined, or if it's an empty string, the previous behaviour will still be used, i.e. launch the project manager. A small fix was also added not to maximize the window when opening the project manager via -editor (i.e. "godot" and "godot -e" will behave the same when no project is in the path). Fixes #2869. --- main/main.cpp | 4 ++-- tools/editor/project_manager.cpp | 5 ----- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/main/main.cpp b/main/main.cpp index b6bc10cee7b..3ea9128e13f 100644 --- a/main/main.cpp +++ b/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; } @@ -1093,7 +1093,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",""); } diff --git a/tools/editor/project_manager.cpp b/tools/editor/project_manager.cpp index 893df047098..04705017d2c 100644 --- a/tools/editor/project_manager.cpp +++ b/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; From b6c6e2f5e5daa1203807aef6be1b2e44af7f5392 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Verschelde?= Date: Mon, 23 Nov 2015 00:19:00 +0100 Subject: [PATCH 22/32] Make all demo icons 8-bit/color RGB(A) Godot does not seem to like 8-bit colormaps. Fixes #2874. --- demos/2d/area_input/icon.png | Bin 1684 -> 3416 bytes demos/2d/dynamic_collision_shapes/icon.png | Bin 844 -> 1563 bytes demos/2d/hdr/icon.png | Bin 2670 -> 3962 bytes demos/2d/isometric_light/icon.png | Bin 3638 -> 7675 bytes demos/2d/light_mask/icon.png | Bin 3344 -> 6285 bytes demos/2d/lights_shadows/icon.png | Bin 2733 -> 3988 bytes demos/2d/navpoly/icon.png | Bin 2420 -> 3642 bytes demos/2d/normalmaps/icon.png | Bin 4876 -> 10402 bytes demos/2d/screen_space_shaders/icon.png | Bin 3341 -> 7479 bytes demos/2d/sdf_font/icon.png | Bin 1534 -> 3560 bytes demos/2d/splash/icon.png | Bin 3408 -> 7041 bytes demos/2d/sprite_shaders/icon.png | Bin 3934 -> 8209 bytes demos/3d/navmesh/icon.png | Bin 2803 -> 4902 bytes demos/3d/sat_test/icon.png | Bin 2699 -> 4628 bytes demos/gui/rich_text_bbcode/icon.png | Bin 2293 -> 4304 bytes demos/misc/instancing/icon.png | Bin 2185 -> 3396 bytes 16 files changed, 0 insertions(+), 0 deletions(-) diff --git a/demos/2d/area_input/icon.png b/demos/2d/area_input/icon.png index d9bb88169321f8d5af74c5f0b30d7f1e24b454bd..2f412ecf6813ad88c2d6a0abf4c8ecbf6299286a 100644 GIT binary patch literal 3416 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 ZKR}1+|3c)e!~g&Q00>D%PDHLkV1ibo4FLcE diff --git a/demos/2d/dynamic_collision_shapes/icon.png b/demos/2d/dynamic_collision_shapes/icon.png index ac01d401ba3d67a101279daf54aba35db9515b65..b47506d7c8711740aedd19c7423a0e23d6753544 100644 GIT binary patch delta 1557 zcmV+w2I~3D2Ad3!8Gix*001Qm=7|6R010qNS#tmY3ljhU3ljkVnw%H_000McNliru z-wPHO4HTOLBFz8*1-eN@K~!ko?OD%n8&wdVdGGCdckMVoYST7pLYuT{)gqv(P?3OB zPnC+OKpc@cQG`&DKtf#j1A1t$2o4;OkV;R8AC+?9P(&qY5r35+iqg_5YSNgdPU1NB zu6OsnHylhtn%L{L6Q!}_r@icxcm2MZZ|0ks#WQElKszr6ZN54HIsiHVIsiHVIsn>w ziJfy4DKYRl0GJ6S1htt5q{LIFA6yx`c4h3^snZXn#C8He1p9|e=g!}&-kv*uZ~t(K zsGR^{<|%*e&VSy)G7+{70LJLn&A!5-$vJUOg+=q`^(uFs7@wuH3_vGHowp{vT zeEhj$(If%@LR@RU}yY#n*dPE8GYo@#~@2VD2){Jf6w2muBvz3KK%S7e_i zvj%`<7`#v@sOIDH?Ch+J@l>FCHEn@(3g&Y3YXHc4UUzKrtX;#dn=O~4BcZBOTcCiN zC4Y_C8Zn>|dt6sgiwZSRDiMovLPch_M8X|2Usnfgty{DTq7wws<`1<~164&R1)PIr z#jHlP!HRXWklch}LdGJcH@z|ArBdF7i&uaC<%Pltox4B?CCkt54(4ZI>;3zq)OCECgRUq zdu>AkfNAKPHx3D*qs=dPxj`+Y8JkTcUe4#6qS2CJd_6LvIIr`^%HXaddtE7pNPoZm z`m`T%C+U6n?Xj!hAB&zPCPYCnukmC~A-*&-^VZBv%+n{dzI5>5cqZF0c0!e^sLVPc zTcu4y^LLq3wf(=Y8f5^}U1>82hFuq9WS%eg?Yq(6FJkmJoCOJ9Km<(&tx%USs$S90 z+G38gAQph?h;O2&_ix8Jw7lFaWq-}QWDwm=CO;n;napN+GukJZXYwVEfg+3IHM9&v z+jvyhE;Xmqh>&-ju|0bh7^^lk3Lr!b5z9j4EbDTA|K;If*RopbCxNrTrrP2)3Y~U?OuYt8FgImPM}Kt2qMEckjIV+N=UrSTsNV@Y(siwGtS_(N7uEAx~9gMo|I) zQs(`gHP}jb2Pa-!^g)A4IwQ@E*Gs9zKA_x z3ITu+M8MrL-;&eAlbTMqJXGB&0Jd;-0CWI!0CWI6+4V0OiHu3B$PTQ-00000NkvXX Hu0mjft`_7K delta 832 zcmV-G1Hb&649o_Q8Gi!+005o0f$RVP0RK=-R7FfoOg%+#;T082OH4~lP3-y-N=;4V z6cjr{azRICJwx@xfrmEJ85!3X7k@xTX+lS2Sz1PCK0a|e zI(9cVdoweOkuroaF@P~KkS;EqDk{g+BGDQe&Kerx?iSz`73LHa_5Th@QD;IyP)tip zj+sPgYC&K?Kx;iczRD`2t0%@C9o!ceGCFikO-q1_M_*t>b9O(Pq&s|oI-906wZJWy zD=Vn5D73&Lr+*?MxgjB_At9|D9oXd<+vpd3aZhjn00Ia}L_t(o!|j&Wwwo{zMJ2E( zHpLi&u>toQ_mcSbmfq|Ce@o&RbcLj3EzCn6!hY5A@tHG&Mj$8Wzr;8{H!}TxhR`g7 zf_POysB$HqEa1F72y`8AIy=wXy#N{L+}({p7DU4kL4VG_!yFFFnFMqNLc0J?rZ9lN zC~4-Y0@WfsqW{^26!^X$@Xt*Z#x!)ki@=(E`1~RT_6bG~m@p>x@F}2VYX#u-FO@Dx;3XWJCf#%+446xuLZk{p%H6q6{*$bt3ynQ7-zT72t43%ZbSlW zgwQ9V2pc?d@kOAJmqGj)D^cWc_Nel*&NTp}F@N31o`nzf$U^gSeMz?f6U^x*lHY=T z9K?E^On_clE7HTm!cQJ+%q-i?(wl5+aRL!TdwO`7ZTu8))YKLX6m)>{7yA?k$S@zue&4XP)Ai&Z~`e1Kkh5LSI5guA3&IT zKRJzlAmq)QD9x&!{$=zXA(Z8DCU(8bx&ty`m>mOTBY&Ia{FR?_fhU8rj)R*30000< KMNUMnLSTY^5o
9< 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 diff --git a/demos/2d/isometric_light/icon.png b/demos/2d/isometric_light/icon.png index 3de9749729eda77c7adbfcbc83404eff7fba310b..0801f78ea55b82121f2e408cfa33f6343c771d93 100644 GIT binary patch literal 7675 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 literal 3638 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 IM6N<$f}3!yO#lD@ diff --git a/demos/2d/light_mask/icon.png b/demos/2d/light_mask/icon.png index c12b045e62ef34deb3f4b2482ec91e3b3cf4c8fe..34a6b709f611a41241c928f70cb8df48a71173d6 100644 GIT binary patch literal 6285 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 D$0H!0 literal 3344 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 Ef>ab8ApigX delta 2400 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 M07*qoM6N<$g5w17WB>pF literal 4876 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 pdT8+)GndY#6Te?S_vQDMzt8_ZKfQNv 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 BACLe5 literal 3341 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 diff --git a/demos/2d/splash/icon.png b/demos/2d/splash/icon.png index 88620eb35bc308b46f11b91c4c0e8978acbe6a66..b8e24f209ee1e22ede05c84693878220a477ac3a 100644 GIT binary patch literal 7041 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 literal 3408 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 Y|CC5>4f8bhVE_OC07*qoM6N<$g5cwRNdN!< literal 2803 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 KMNUMnLSTYfyUkYs literal 2699 zcmV;63Uu{}P)fNGT^M;2#}58X6-71z{eKKpY#c85g7%6`mIqb`cP9 z4-P&F2`?@NUmc3tARRgy8jlncTn!9R3kq5rhE5oAMMg$UK|(7HK}kG3Bnmbn3o$|@ zBheongn|-B6B2n44`vSzU=0lh1_VVFW?P8fP3D85tS18W*Y<7F-n+Y!41YKnNEW17jYPNET{C6kSU> zSzks*L_|bqLqkYHLOwr0d_6rY4m~(FIfFPiLMkc7Cnd`xA?W5FB_AFg1r>!85lBV} zKRyT?2ncy4u~r#=Ohi(4K|xhOKsq}*P7yamG&D0ZG^Q~xvMnqtDl4}tCmjeTEF>d} z92>hE888hQITRFrd=d-;5)KUxR8a~`3kp032s<|i6blAREMP?)Up*36RYXsGBuZCE zNK;2hT0ufY5I}H1KVUmMIW#m%GBGkND_SZkM-e5fB_mBBAn73=${ri)9UE2+7#|c8 zHWCp!5Dz9L1sod#h$_y8EWB$XoL?J$`S);I7->H@NjW4)RTD@vBRzR{JB&Ctl{PeP zGcrOkF{q_4eJ?JLFD%N*D`R6SnU*MdC?>xsC6XT{+0-Auy%|dv7M`0FKoArW1Qe8! z6GaaaO$!odWes3o3sN2n4Fv_2FWZnTo0u(`Qz~v&7F<(FS4Kfe%*seTGDPO%Kv66` zOiVe8i8qrrHD)t1^6o2}E-Q3%DMLdUhGP<8U=0Zs>Y@Mu00DGTPE*@a=hHd>00%!w zL_t(o!`;?(bW(8?2XOhp0|B3~F+qV%5s;~qNeqXCUBJ{$=iKb>SlHd&-QC^Y-QC^Y zUFY}<;LSSV@jt(w<2k(Z?q|Py-#t9Cu!4;$|8Fk`3s42dFUtQ{0985jCrO>Q9Ou)K ze*={GkS8ZoKc-=?j>Sea=^Q+uN>^XX<3CNER`JDPnv4hwgw*}|B;d~ONKjxoI%c}7Q0sK9;|`F zN;Juliz~u(+`oThPyp3^rc$f5Ydwh?&9s^r$d2P2zBDL6HPw@-MS|U|Ifb{OGXXjd zUltV59LUnrq#0Vf-QETtAphd*B+e^A0A1$*kZd#L%^T*nr`Lk@5LkrED^^@(3Kkl5M;1d2B#^;(3_lafmtTRd!xF>f zFkvot5=}=K1l;sdhdcMCg*f{3&9(4WRUuhN`2gk-$c(r?%%n>Z0&~>p?g>*l&WeM? zsGeq@&5G`-T_GGrCaap208IUyWVXP!wG~*RP&jkkN={Br37=3C-Btnu zGMHZgN!t{QNM|+?!Q}Bw=eKDHLOLp9V->~5%4Fd&6ERS#0<0HB{sKtG590|$mPn5V z5hkflo0^sjg!GEf9;<-=wkwsciOUHf3r$(r?g0aM8`!}Ui9`Z{AUx3+W-_^T^U@q( zN{(#Vvc)%vRvdsp%;YWvhy-Bwy&Df00B3!uKtu#VMwm&hbLd?9(%Et#AzP=|LkRff zZJ{xs7nDE$^+zCK7b+)!MQd}D9Z>DVvx7$<~DD# z`2bEnns%hGfj|!c+7}@iGONMy{9Zr;gQf!`!u2}q%G$M9M|?+UCKl830%#AL0($q* zq3zlY9XfRGnS<}VfND}f9KBwjq!h5lLXc+dnHzo`!z0AU!wy;q#dQBl_)8DO6&bR- zMvVnShTK2%+Is>?bKsBO$c9_XEoVIm@23uz42h4;4m%JE^>u3^pg>!?$Q}Up%$+s& z+wF@I3{bt}7+^3zMVtbp^{o>tu_#uLIdL7Mqnk9#C#IEkyX3?_6<6fG%?H#_e_& zU_At=0u7n^#;vy~+3dy!tF<58tx4#eu24iPI?ZT2xNbKDu)6Mmx5X`(_3|p{L6JR} z1elnk>S-(jp2lkJ-=#-ec!AR)TA@&MIB?Wl7fppl^_T;%)@XO};73r00Ch4opl=-& z)tW1qA5-6YSyB*Q2L0zWo5$h=f{h`-0A&|^bh$@fbVfZ5ycBk6OsS`002ovPDHLk FV1n2VIR5|u diff --git a/demos/gui/rich_text_bbcode/icon.png b/demos/gui/rich_text_bbcode/icon.png index 78358ba71b27b9de3d800aa1cec1cacb61519481..6db48a3a9b5961744e1c6458b6c483aa3b3333db 100644 GIT binary patch literal 4304 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 delta 2292 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 KPDHLkU;%=DH?ckd From 00ddb532fbfc10b016aa193e2443830341e3fec0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Verschelde?= Date: Mon, 23 Nov 2015 00:38:12 +0100 Subject: [PATCH 23/32] Silence too verbose boot splash debug info --- main/main.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/main/main.cpp b/main/main.cpp index b6bc10cee7b..e52b87913bd 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -870,19 +870,18 @@ Error Main::setup2() { String boot_logo_path=GLOBAL_DEF("application/boot_splash",String()); bool boot_logo_scale=GLOBAL_DEF("application/boot_splash_fullsize",true); Globals::get_singleton()->set_custom_property_info("application/boot_splash",PropertyInfo(Variant::STRING,"application/boot_splash",PROPERTY_HINT_FILE,"*.png")); - print_line("BOOT SPLASH: "+boot_logo_path); Image boot_logo; boot_logo_path = boot_logo_path.strip_edges(); - print_line("BOOT SPLASH IS : "+boot_logo_path); 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); if (err!=OK) { - print_line("ËRROR LOADING BOOT LOGO SPLASH :"+boot_logo_path); + print_line("Error loading boot logo splash!); } else { - print_line("BOOT SPLASH OK!"); + print_line("Boot splash OK!"); } } @@ -901,7 +900,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"); From 18dfb16e262578da84ed8e21529bf52c01e92a08 Mon Sep 17 00:00:00 2001 From: zvodd Date: Mon, 23 Nov 2015 12:52:43 +1100 Subject: [PATCH 24/32] fix poorly formed documentation xml, text outside of tags --- doc/core_classes.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/core_classes.xml b/doc/core_classes.xml index 02b46ac4b9b..c37b50f1226 100644 --- a/doc/core_classes.xml +++ b/doc/core_classes.xml @@ -575,8 +575,8 @@ 3x3 Matrix. - 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). + @@ -937,8 +937,8 @@ Vector used for 2D Math. - Vector class, which performs basic 2D vector math operations. + From ca750fb7bca0211b02bdbf292d98c958ea00631e Mon Sep 17 00:00:00 2001 From: Bojidar Marinov Date: Mon, 23 Nov 2015 13:57:57 +0200 Subject: [PATCH 25/32] Update doc with -doctool. --- doc/base/classes.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/base/classes.xml b/doc/base/classes.xml index 44a7cccfe5c..2e7bde65491 100644 --- a/doc/base/classes.xml +++ b/doc/base/classes.xml @@ -4371,7 +4371,7 @@ Stop a given voice. - + From 4359a90ccab188675aa00f62dcf67411a6d1ff1e Mon Sep 17 00:00:00 2001 From: Bojidar Marinov Date: Mon, 23 Nov 2015 14:18:13 +0200 Subject: [PATCH 26/32] Document Vector3 and Vector3Array. Fix documentation of Vector2 and Vector2Array. --- doc/base/classes.xml | 46 +++++++++++++++++++++++++++++++------------- 1 file changed, 33 insertions(+), 13 deletions(-) diff --git a/doc/base/classes.xml b/doc/base/classes.xml index 2e7bde65491..a26458a14f1 100644 --- a/doc/base/classes.xml +++ b/doc/base/classes.xml @@ -37623,7 +37623,7 @@ This method controls whether the position between two cached points is interpola - Reflects/mirrors the vector around another vector. + Like "slide", but reflects the Vector instead of continuing along the wall. @@ -37687,10 +37687,10 @@ This method controls whether the position between two cached points is interpola - An Array of Vector2's. + An Array of Vector2. - An Array specifically designed to hold Vector2's. + An Array specifically designed to hold Vector2. @@ -37699,21 +37699,21 @@ This method controls whether the position between two cached points is interpola - Get the Vector2 at the given index. + Returns the Vector2 at the given index. - Insert a new Vector2. + Inserts a Vector2 at the end. - Set the size of the Vector2Array. If larger than the current size it will reserve some space beforehand, and if it is smaller it will cut off the array. + Sets the size of the Vector2Array. If larger than the current size it will reserve some space beforehand, and if it is smaller it will cut off the array. @@ -37722,7 +37722,7 @@ This method controls whether the position between two cached points is interpola - Set the Vector2 at the given index. + Changes the Vector2 at the given index. @@ -37757,12 +37757,14 @@ This method controls whether the position between two cached points is interpola + Returns a new vector with all components in absolute values (e.g. positive). + Returns a new vector with all components rounded up. @@ -37786,7 +37788,7 @@ This method controls whether the position between two cached points is interpola - Perform a cubic interpolation between vectors a,b,c,d (b is current), by the given amount (i). + Perform a cubic interpolation between vectors pre_a, a, b, post_b (a is current), by the given amount (t). @@ -37795,7 +37797,7 @@ This method controls whether the position between two cached points is interpola - Return the squared distance (distance minus the last square root) to b. + Return the squared distance (distance minus the last square root) to b. Prefer this function over distance_to if you need to sort vectors or need the squared distance for some formula. @@ -37820,13 +37822,14 @@ This method controls whether the position between two cached points is interpola + Returns a new vector with all components rounded down. - Returns the inverse of the vector. this is the same as Vector3( 1.0 / v.x, 1.0 / v.y, 1.0 / v.z ) + Returns the inverse of the vector. This is the same as Vector3( 1.0 / v.x, 1.0 / v.y, 1.0 / v.z ) @@ -37840,7 +37843,7 @@ This method controls whether the position between two cached points is interpola - Return the length of the vector, squared. + Return the length of the vector, squared. Prefer this function over "length" if you need to sort vectors or need the squared length for some formula. @@ -37851,26 +37854,28 @@ This method controls whether the position between two cached points is interpola - Linearly interpolates the vector to a given one (b), by the given amount (i). + Linearly interpolates the vector to a given one (b), by the given amount (t). + Returns AXIS_X, AXIS_Y or AXIS_Z depending on which axis is the largest. + Returns AXIS_X, AXIS_Y or AXIS_Z depending on which axis is the smallest. - Return a copy of the normalized vector to unit length. This is the same as v / v.length() + Return a copy of the normalized vector to unit length. This is the same as v / v.length(). @@ -37879,6 +37884,7 @@ This method controls whether the position between two cached points is interpola + Like "slide", but reflects the Vector instead of continuing along the wall. @@ -37889,6 +37895,7 @@ This method controls whether the position between two cached points is interpola + Rotates the vector around some axis by phi radians. @@ -37897,6 +37904,7 @@ This method controls whether the position between two cached points is interpola + Slides the vector along a wall. @@ -37918,6 +37926,7 @@ This method controls whether the position between two cached points is interpola + Returns a Vector3 with the given components. @@ -37931,17 +37940,22 @@ This method controls whether the position between two cached points is interpola + Enumerated value for the X axis. Returned by functions like max_axis or min_axis. + Enumerated value for the Y axis. + Enumerated value for the Z axis. + An Array of Vector3. + An Array specifically designed to hold Vector3. @@ -37950,18 +37964,21 @@ This method controls whether the position between two cached points is interpola + Returns the Vector3 at the given index. + Inserts a Vector3 at the end. + Sets the size of the Vector3Array. If larger than the current size it will reserve some space beforehand, and if it is smaller it will cut off the array. @@ -37970,12 +37987,14 @@ This method controls whether the position between two cached points is interpola + Changes the Vector3 at the given index. + Returns the size of the array. @@ -37984,6 +38003,7 @@ This method controls whether the position between two cached points is interpola + Constructs a new Vector3Array. Optionally, you can pass in an Array that will be converted. From f7b090f94a26b590f494c441344832ec417ba03d Mon Sep 17 00:00:00 2001 From: Brickcaster Date: Mon, 23 Nov 2015 08:00:52 -0500 Subject: [PATCH 27/32] Added windows specific file godot_res.res is showing up as a changed file when compiling for windows. Need to ignore it. --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index a7ac2d2fc7d..f24d91a7ee0 100644 --- a/.gitignore +++ b/.gitignore @@ -296,3 +296,4 @@ cscope.po.out godot.creator.* projects/ +platform/windows/godot_res.res From a961347d8c9e1808e80da5b996cd7ab929f5eabb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Verschelde?= Date: Mon, 23 Nov 2015 19:07:32 +0100 Subject: [PATCH 28/32] Fix return type of Matrix32 member vars Thanks to @bojidar-bg for localising the issue. --- core/variant_op.cpp | 6 +++--- doc/base/classes.xml | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/core/variant_op.cpp b/core/variant_op.cpp index eabd6478377..1bcfa7d2aee 100644 --- a/core/variant_op.cpp +++ b/core/variant_op.cpp @@ -2818,9 +2818,9 @@ void Variant::get_property_list(List *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: { diff --git a/doc/base/classes.xml b/doc/base/classes.xml index a26458a14f1..aa310b15c9f 100644 --- a/doc/base/classes.xml +++ b/doc/base/classes.xml @@ -16735,11 +16735,11 @@ returns:= "username=user&password=pass" - + - + - + From 62b9659c4164cdc9b80aa7f1ce83065efde1c025 Mon Sep 17 00:00:00 2001 From: neikeq Date: Mon, 23 Nov 2015 20:06:37 +0100 Subject: [PATCH 29/32] Import Sub-Scene as root's child if no node is selected --- tools/editor/scene_tree_dock.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tools/editor/scene_tree_dock.cpp b/tools/editor/scene_tree_dock.cpp index 0cafe7459bb..8b5bf8c1e16 100644 --- a/tools/editor/scene_tree_dock.cpp +++ b/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.. From a23e29ab36244214cc9f2c8eb28521a3c9a4a651 Mon Sep 17 00:00:00 2001 From: est31 Date: Tue, 24 Nov 2015 05:06:45 +0100 Subject: [PATCH 30/32] Correct retvals of String::to_ascii() and String::to_utf8() Both return RawArray, not String. My fault from commit f83f96cb44a5c4f65c6271d0a98606b489adc488. --- core/variant_call.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/variant_call.cpp b/core/variant_call.cpp index 51d683f1fe6..48c38f05f99 100644 --- a/core/variant_call.cpp +++ b/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()); From 323938cc28cede46092bf5adecbd28206ee71481 Mon Sep 17 00:00:00 2001 From: est31 Date: Tue, 24 Nov 2015 05:46:00 +0100 Subject: [PATCH 31/32] Document byte conversion methods for Strings --- doc/base/classes.xml | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/doc/base/classes.xml b/doc/base/classes.xml index aa310b15c9f..12f90628880 100644 --- a/doc/base/classes.xml +++ b/doc/base/classes.xml @@ -12551,7 +12551,7 @@ This approximation makes straight segments between each point, then subdivides t Connect to a host. This needs to be done before any requests are sent. The host should not have http:// prepended but will strip the protocol identifier if provided. - + verify_host will check the SSL identity of the host if set to true. @@ -12576,9 +12576,9 @@ verify_host will check the SSL identity of the host if set to true. Sends a request to the connected host. The url is the what is normally behind the hostname, i.e: http://somehost.com/index.php url would be "index.php" - + Headers are HTTP request headers - + To create a POST request with query strings to push to the server, do: var fields = {"username" : "user", "password" : "pass"} @@ -12693,10 +12693,10 @@ var result = httpClient.request(httpClient.METHOD_POST, "index.php", headers, qu Generates a GET/POST application/x-www-form-urlencoded style query string from a provided dictionary. - + var fields = {"username": "user", "password": "pass"} String queryString = httpClient.query_string_from_dict(fields) - + returns:= "username=user&password=pass" @@ -26372,12 +26372,14 @@ This method controls whether the position between two cached points is interpola + Returns a copy of the array's contents formatted as String. Fast alternative to get_string_from_utf8(), assuming the content is ASCII-only (unlike the UTF-8 function, this function maps every byte to a character in the string, so any multibyte sequence will be torn apart). + Returns a copy of the array's contents formatted as String, assuming the array is formatted as UTF-8. Slower than get_string_from_ascii(), but works for UTF-8. Usually you should prefer this function over get_string_from_ascii() to support international input. @@ -33134,9 +33136,10 @@ This method controls whether the position between two cached points is interpola - + + Convert the String (which is a character array) to RawArray (which is an array of bytes). The conversion is speeded up in comparison to to_utf8() with the assumption that all the characters the String contains are only ASCII characters. @@ -33168,9 +33171,10 @@ This method controls whether the position between two cached points is interpola - + + Convert the String (which is an array of characters) to RawArray (which is an array of bytes). The conversion is a bit slower than to_ascii(), but supports all UTF-8 characters. Therefore, you should prefer this function over to_ascii(). From b01546f91c498bb230c267a2f21654d7b3565d1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Verschelde?= Date: Tue, 24 Nov 2015 10:14:06 +0100 Subject: [PATCH 32/32] Fix typo, missing quote --- main/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main/main.cpp b/main/main.cpp index 9f551d62bec..9a9a2d4e4ff 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -879,7 +879,7 @@ Error Main::setup2() { print_line("Boot splash path: "+boot_logo_path); Error err = boot_logo.load(boot_logo_path); if (err!=OK) { - print_line("Error loading boot logo splash!); + print_line("Error loading boot logo splash!"); } else { print_line("Boot splash OK!");