From 2580ca01e6b73a54def5a8f6e61d19509d3278ee Mon Sep 17 00:00:00 2001 From: reduz Date: Tue, 15 Sep 2015 22:07:03 -0300 Subject: [PATCH] Ability to keep collisionshapes and collisionpolygons when running the game. Works for 2D and 3D These are still just helpers in case you want to animate them or access them directly. Modifying the real shapes is still done via CollisionObject and CollisionObject2D APIs But an API was added so you can query which shapes from CollisionObject correspond to which CollisionShape. Have Fun! --- demos/2d/dynamic_collision_shapes/ball.gd | 21 ++++ demos/2d/dynamic_collision_shapes/ball.png | Bin 0 -> 321 bytes demos/2d/dynamic_collision_shapes/ball.scn | Bin 0 -> 1898 bytes demos/2d/dynamic_collision_shapes/box.png | Bin 0 -> 253 bytes demos/2d/dynamic_collision_shapes/circle.png | Bin 0 -> 889 bytes .../dynamic_colobjs.gd | 23 ++++ .../dynamic_colobjs.scn | Bin 0 -> 4348 bytes demos/2d/dynamic_collision_shapes/engine.cfg | 4 + demos/2d/dynamic_collision_shapes/poly.png | Bin 0 -> 1638 bytes demos/2d/isometric/dungeon.scn | Bin 2841 -> 8743 bytes demos/2d/lights_shadows/light_shadows.scn | Bin 4293 -> 7181 bytes demos/2d/platformer/stage.xml | 56 +++------ scene/2d/canvas_item.cpp | 9 ++ scene/2d/canvas_item.h | 7 +- scene/2d/collision_polygon_2d.cpp | 84 ++++++++++--- scene/2d/collision_polygon_2d.h | 12 ++ scene/2d/collision_shape_2d.cpp | 64 +++++++++- scene/2d/collision_shape_2d.h | 8 ++ scene/3d/body_shape.cpp | 75 ++++++++++-- scene/3d/body_shape.h | 14 ++- scene/3d/collision_polygon.cpp | 110 ++++++++++++++---- scene/3d/collision_polygon.h | 12 ++ scene/3d/spatial.cpp | 25 ++++ scene/3d/spatial.h | 5 + scene/register_scene_types.cpp | 10 +- 25 files changed, 436 insertions(+), 103 deletions(-) create mode 100644 demos/2d/dynamic_collision_shapes/ball.gd create mode 100644 demos/2d/dynamic_collision_shapes/ball.png create mode 100644 demos/2d/dynamic_collision_shapes/ball.scn create mode 100644 demos/2d/dynamic_collision_shapes/box.png create mode 100644 demos/2d/dynamic_collision_shapes/circle.png create mode 100644 demos/2d/dynamic_collision_shapes/dynamic_colobjs.gd create mode 100644 demos/2d/dynamic_collision_shapes/dynamic_colobjs.scn create mode 100644 demos/2d/dynamic_collision_shapes/engine.cfg create mode 100644 demos/2d/dynamic_collision_shapes/poly.png diff --git a/demos/2d/dynamic_collision_shapes/ball.gd b/demos/2d/dynamic_collision_shapes/ball.gd new file mode 100644 index 0000000000..c17b20f9c8 --- /dev/null +++ b/demos/2d/dynamic_collision_shapes/ball.gd @@ -0,0 +1,21 @@ + +extends RigidBody2D + +# member variables here, example: +# var a=2 +# var b="textvar" + +var timeout=5 + +func _process(delta): + timeout-=delta + if (timeout<1): + set_opacity(timeout) + if (timeout<0): + queue_free() +func _ready(): + set_process(true) + # Initialization here + pass + + diff --git a/demos/2d/dynamic_collision_shapes/ball.png b/demos/2d/dynamic_collision_shapes/ball.png new file mode 100644 index 0000000000000000000000000000000000000000..b7cf71da29149ec0e8e8a640405c7116e68be976 GIT binary patch literal 321 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7*pj^6T^JY`v>5(BoIU*r z0|NtRfk$L90|U1(2s1Lwnj^u$z`$PO>FdgVpOcSIT+DJ8?^Ol{2FViFh!W@g+}zZ> z5(ej@)Wnk16ovB4k_-iRPv3y>Mm}){28NZME{-7o?kq_k8&(Mx^TVicaElb5#b*8$MnEt zK~(Rp;+1T?9-<9P7z4wc4@x~|no#kLwV|%>%csssYu=q!ne6xQnOIie%l}o(d)o{z VrCs*A!N9=4;OXk;vd$@?2>^}^bszu$ literal 0 HcmV?d00001 diff --git a/demos/2d/dynamic_collision_shapes/ball.scn b/demos/2d/dynamic_collision_shapes/ball.scn new file mode 100644 index 0000000000000000000000000000000000000000..e332de276d8698b527041c4c478758606b154b12 GIT binary patch literal 1898 zcmWFvc6Md}0RaYvPrM8aLF^0+j0_A7j0{W-Y>W(y3d{^V3d}qKiOJciDZ$C9d8rJi z9Rwa2F)*+ySTpb`F!L3q7U!21C8z4=CFZ6w2rCE*CzlqNAikjQPNub-5d zlcSfO!oZ=R%Mp@VQBqoz%D}I{{eVf9sUR;s!JdIjL5w9QKRGc+!Hmg}LEGW40>cAl zQ6?jX$OWPfhj^Sbi;{CvgEJBfQjJ^^935mBSQLyM7#v+3xS7u{c<10~{E*q@fI5Se zf`-FZM-c`#1#U-freX#q1x^M<1!f0Zg?))l96_1snJG^BDU}MD4*PgA^9o8!^b0bR zvlEkY8ZI&vJ9ID?>l^4Na3lsLa5@Nal@ulB6{qDFHku$(zJKP9z+gDJ7NII)E#ttd0OM8P8A6l+p` zXQDRwUNo9PoVh~d*gOEbS!bi-Rc_pa|GE61;MG5LW$@zIDnR%u8rN!~d zDGllhf_#a|CB^YYsRj8(C8;S40uHtfqAc;b`FWWR)=mtp#W|^|1(}Km9G5XCC+5W` z2qfq+mZd75QK)Ct&&kY7O>B7bfI*lgF)zI|M?r)^R3V%-B{8=kK3}PXxhOLw^?)ve z*aHrU14fR&nwlQ5bh5?grj{he$0xF|78ev{mZTg=3CK z7#Wxq)Sc3tq8PXpxD{=f^5T;f=P;BcNI5VZkYdPFy!e1gih)@{+Cj=Oj zaL{3P%*)J85OHXA5J*%}df{y5aL|FlLEIr$vDCrdQQtwxft|BBFR>uLAhRMh=K+hZ z%Z3Cg#-e%)nh%j%|k9KenaCn|zo}lNz%gn%_ z;OM~YAnTZzAj?#gnxhcPQ1*azp@VLMEJM1|iU%ycPDc|YA29T?=BK3iTYP{7Q<@XOgj zz=4}7Ex#;*otc5b#K}R}VF7blW@@>MV$%W#Rmc5DgPaaBrerEfxlDABVPartNNjbE zVyJMaULe{~>LAKc`G7;z!9`Vqp+xNuLs7!5Lmn=ZcuI>?<5Tm>GK=!_a#NL~9x(?v zJa>>+Ilz*UpPrwmdh!9YoI}40yQA0xW`+lm2OJn29UlBW@Zi(|$2-o`4$G<=s&97g zI<(tCR=Jrau{5V7KDi@l)&W_!Wah-&q)erY4YF#o3_0p+9K@Mt&6Kn|zzlL&@+Rlb zC#)d{Je}?&NHXNB?PJJnkvbsloX1d=KGT_t`Rti9whr4Fc^Mus&SWkwN>56d;lSV^ z;~b>0En%bc3dZ<~1ZyTMx59*WH-l#k5{yNqs*@R0OEe-G(vOKd*EzU3OkL5%oLH1z zoFMFQm_;{7L8UnBse`KX4+ocr3^oo74ie9J>RFPDQd9HP>KznZ>Q{9*gf%cQHrPAN zd&u14$lzYhR?MKlz`)?Ez|8P}0fVEG1A_w}gSY~R!wv_A1GbI^4#EyO4h#;S4$=-4 z4(x7^9h4moIVd}{I`CGt3$LC zhl9IYxkIw2jsv^HYKLrxmk!wvm>FEIJ6bwicG%4ztsvvj&LE?}exUsT1B0vrhXb>N zw!?XkT1R09c?EF?21k8|cGIjpv&PfmuX_+FNZ1eM?75|LoyoQUfIoc$U&g> z;mo@kNgG62qNV2_QRAPlH$gs3XNw@We#+#Y*5185?X91~SAKhg3Lby2g5C zc?Ma=7aR`m3|34RQu#IJoRfW(wKx8j%rejC@1AW@s%wxxtC-WTEogXo+nuX#Z)Tq0 z7Fc}bN9~q?m6yAI+-;mYWU|=ut^mS#w&&kIps-_zn|C@nEZzkx!g~fg#n?#WAGf*4qn=j0^@G%nN>6e0#s#R?lU@ tC1cAsPc0akSU3a}92yuXV0>t1z5SDEMa%ZkZww3!44$rjF6*2UngFRmJJbLG literal 0 HcmV?d00001 diff --git a/demos/2d/dynamic_collision_shapes/circle.png b/demos/2d/dynamic_collision_shapes/circle.png new file mode 100644 index 0000000000000000000000000000000000000000..9fdfa550b1c7f8a18cdf63a49bda70c73ea47e8f GIT binary patch literal 889 zcmeAS@N?(olHy`uVBq!ia0y~yU~m9o4mJh`hElSE}yUNuASNo z?H9OAyu5EJXReMwlMrwCMKi_QZmT&i9+=vt5V883Z&FM5zlNQgZ!hZE%psywa5*V2 z;PKp<=E;jc-94_u7Zx|@F>dHJslf5wW5*$12-Jdx{7Tz#N+xz+yF40}#EKJe_Q zHqPLZC|qSP&3B+XhH2j0hr#Qov_<=sZcJp@bD}h1*UA64@-42;Tq6E{{lPy0TxXbl z+N=N8bAC|T-q<;1?-O3Dt0!fdKPZJawocji@|)$==cUXal;$3geh}crn8PGK=atvq z(IJ7G=$Qm+OIx`d*GQ4eL*m9gkXkjGw*h zmmONl$xxBVaKK*9oAHbkgF&>ILxj$p(;I&7+%N8u%-N9i+Bw9@q)0|Nttr>mdKI;Vst0Iqy&V*mgE literal 0 HcmV?d00001 diff --git a/demos/2d/dynamic_collision_shapes/dynamic_colobjs.gd b/demos/2d/dynamic_collision_shapes/dynamic_colobjs.gd new file mode 100644 index 0000000000..a6a42a1914 --- /dev/null +++ b/demos/2d/dynamic_collision_shapes/dynamic_colobjs.gd @@ -0,0 +1,23 @@ + +extends Node2D + +# member variables here, example: +# var a=2 +# var b="textvar" +const EMIT_INTERVAL=0.1 +var timeout=EMIT_INTERVAL + +func _process(delta): + timeout-=delta + if (timeout<0): + timeout=EMIT_INTERVAL + var ball = preload("res://ball.scn").instance() + ball.set_pos( Vector2(randf() * get_viewport_rect().size.x, 0) ) + add_child(ball) + +func _ready(): + set_process(true) + # Initialization here + pass + + diff --git a/demos/2d/dynamic_collision_shapes/dynamic_colobjs.scn b/demos/2d/dynamic_collision_shapes/dynamic_colobjs.scn new file mode 100644 index 0000000000000000000000000000000000000000..e6d1ebf9cfd05ef4ad6129fc90f81faa1d128cc7 GIT binary patch literal 4348 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 M3JMN#290|F08zSZ=>Px# literal 0 HcmV?d00001 diff --git a/demos/2d/dynamic_collision_shapes/engine.cfg b/demos/2d/dynamic_collision_shapes/engine.cfg new file mode 100644 index 0000000000..536b75f2f2 --- /dev/null +++ b/demos/2d/dynamic_collision_shapes/engine.cfg @@ -0,0 +1,4 @@ +[application] + +name="Run-Time CollisionShape" +main_scene="res://dynamic_colobjs.scn" diff --git a/demos/2d/dynamic_collision_shapes/poly.png b/demos/2d/dynamic_collision_shapes/poly.png new file mode 100644 index 0000000000000000000000000000000000000000..49ed55cc7ddb48761024730efd8f2180c38199ea GIT binary patch literal 1638 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 diff --git a/demos/2d/lights_shadows/light_shadows.scn b/demos/2d/lights_shadows/light_shadows.scn index a13e31376ecd0ae4fdd3c510a45dc33fa35ea2fc..152f68a40729fe71e124fb9dc2233b063be99e29 100644 GIT binary patch delta 6251 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 a$e_T$vd$@?i6JOB$T=w3*%<(Q1S38G delta 3325 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 - + @@ -16,22 +16,12 @@ "conns" "names" - + "stage" "Node" - "_import_path" "__meta__" "tile_map" "TileMap" - "visibility/visible" - "visibility/opacity" - "visibility/self_opacity" - "visibility/light_mask" - "transform/pos" - "transform/rot" - "transform/scale" - "z/z" - "z/relative" "mode" "tile_set" "cell/size" @@ -49,6 +39,8 @@ "coins" "coin" "Area2D" + "_import_path" + "transform/pos" "coin 2" "coin 3" "coin 4" @@ -129,14 +121,9 @@ "margin/top" "margin/right" "margin/bottom" - "focus_neighbour/left" - "focus_neighbour/top" - "focus_neighbour/right" - "focus_neighbour/bottom" "focus/ignore_mouse" "focus/stop_mouse" "size_flags/horizontal" - "size_flags/stretch_ratio" "range/min" "range/max" "range/step" @@ -145,19 +132,15 @@ "range/exp_edit" "rounded_values" "text" - "align" - "valign" "autowrap" - "uppercase" "percent_visible" "node_count" 67 "nodes" - -1, -1, 1, 0, -1, 2, 2, 0, 3, 1, 0, 0, 0, 5, 4, -1, 25, 2, 0, 6, 2, 7, 3, 8, 3, 9, 4, 10, 5, 11, 6, 12, 7, 13, 8, 14, 2, 15, 8, 16, 9, 17, 10, 18, 11, 19, 12, 20, 13, 21, 8, 22, 14, 23, 14, 24, 3, 25, 6, 26, 4, 27, 4, 28, 15, 3, 16, 0, 0, 0, 1, 29, -1, 1, 2, 0, 0, 2, 0, 31, 30, 17, 3, 2, 0, 10, 18, 3, 19, 0, 2, 0, 31, 32, 17, 3, 2, 0, 10, 20, 3, 19, 0, 2, 0, 31, 33, 17, 3, 2, 0, 10, 21, 3, 19, 0, 2, 0, 31, 34, 17, 3, 2, 0, 10, 22, 3, 19, 0, 2, 0, 31, 35, 17, 3, 2, 0, 10, 23, 3, 19, 0, 2, 0, 31, 36, 17, 3, 2, 0, 10, 24, 3, 19, 0, 2, 0, 31, 37, 17, 3, 2, 0, 10, 25, 3, 19, 0, 2, 0, 31, 38, 17, 3, 2, 0, 10, 26, 3, 19, 0, 2, 0, 31, 39, 17, 3, 2, 0, 10, 27, 3, 19, 0, 2, 0, 31, 40, 17, 3, 2, 0, 10, 28, 3, 19, 0, 2, 0, 31, 41, 17, 3, 2, 0, 10, 29, 3, 19, 0, 2, 0, 31, 42, 17, 3, 2, 0, 10, 30, 3, 19, 0, 2, 0, 31, 43, 17, 3, 2, 0, 10, 31, 3, 19, 0, 2, 0, 31, 44, 17, 3, 2, 0, 10, 32, 3, 19, 0, 2, 0, 31, 45, 17, 3, 2, 0, 10, 33, 3, 19, 0, 2, 0, 31, 46, 17, 3, 2, 0, 10, 34, 3, 19, 0, 2, 0, 31, 47, 17, 3, 2, 0, 10, 35, 3, 19, 0, 2, 0, 31, 48, 17, 3, 2, 0, 10, 36, 3, 19, 0, 2, 0, 31, 49, 17, 3, 2, 0, 10, 37, 3, 19, 0, 2, 0, 31, 50, 17, 3, 2, 0, 10, 38, 3, 19, 0, 2, 0, 31, 51, 17, 3, 2, 0, 10, 39, 3, 19, 0, 2, 0, 31, 52, 17, 3, 2, 0, 10, 40, 3, 19, 0, 2, 0, 31, 53, 17, 3, 2, 0, 10, 41, 3, 19, 0, 2, 0, 31, 54, 17, 3, 2, 0, 10, 42, 3, 19, 0, 2, 0, 31, 55, 17, 3, 2, 0, 10, 43, 3, 19, 0, 2, 0, 31, 56, 17, 3, 2, 0, 10, 44, 3, 19, 0, 2, 0, 31, 57, 17, 3, 2, 0, 10, 45, 3, 19, 0, 2, 0, 31, 58, 17, 3, 2, 0, 10, 46, 3, 19, 0, 2, 0, 31, 59, 17, 3, 2, 0, 10, 47, 3, 19, 0, 2, 0, 31, 60, 17, 3, 2, 0, 10, 48, 3, 19, 0, 2, 0, 31, 61, 17, 3, 2, 0, 10, 49, 3, 19, 0, 2, 0, 31, 62, 17, 3, 2, 0, 10, 50, 3, 19, 0, 2, 0, 31, 63, 17, 3, 2, 0, 10, 51, 3, 19, 0, 2, 0, 31, 64, 17, 3, 2, 0, 10, 52, 3, 19, 0, 2, 0, 31, 65, 17, 3, 2, 0, 10, 53, 3, 19, 0, 2, 0, 31, 66, 17, 3, 2, 0, 10, 54, 3, 19, 0, 2, 0, 31, 67, 17, 3, 2, 0, 10, 55, 3, 19, 0, 2, 0, 31, 68, 17, 3, 2, 0, 10, 56, 3, 19, 0, 2, 0, 31, 69, 17, 3, 2, 0, 10, 57, 3, 19, 0, 2, 0, 31, 70, 17, 3, 2, 0, 10, 58, 3, 19, 0, 2, 0, 31, 71, 17, 3, 2, 0, 10, 59, 3, 19, 0, 2, 0, 31, 72, 17, 3, 2, 0, 10, 60, 3, 19, 0, 0, 0, 1, 73, -1, 1, 2, 0, 0, 45, 0, 75, 74, 61, 5, 2, 0, 10, 62, 3, 63, 76, 64, 77, 65, 0, 45, 0, 75, 78, 61, 5, 2, 0, 10, 66, 3, 63, 76, 67, 77, 68, 0, 45, 0, 75, 79, 61, 5, 2, 0, 10, 69, 3, 63, 76, 70, 77, 68, 0, 45, 0, 75, 80, 71, 3, 2, 0, 10, 72, 3, 73, 0, 45, 0, 82, 81, 74, 3, 2, 0, 10, 75, 3, 76, 0, 0, 0, 84, 83, 77, 3, 2, 0, 10, 78, 3, 79, 0, 0, 0, 86, 85, -1, 7, 2, 0, 87, 80, 88, 14, 89, 2, 90, 81, 91, 2, 92, 14, 0, 0, 0, 1, 93, -1, 1, 2, 0, 0, 53, 0, 84, 94, 82, 3, 2, 0, 10, 83, 3, 84, 0, 53, 0, 84, 95, 82, 3, 2, 0, 10, 85, 3, 84, 0, 53, 0, 84, 96, 82, 3, 2, 0, 10, 86, 3, 84, 0, 53, 0, 84, 97, 82, 3, 2, 0, 10, 87, 3, 84, 0, 53, 0, 84, 98, 82, 3, 2, 0, 10, 88, 3, 84, 0, 53, 0, 84, 99, 82, 3, 2, 0, 10, 89, 3, 84, 0, 53, 0, 84, 100, 82, 3, 2, 0, 10, 90, 3, 84, 0, 53, 0, 84, 101, 82, 3, 2, 0, 10, 91, 3, 84, 0, 53, 0, 84, 102, 82, 3, 2, 0, 10, 92, 3, 84, 0, 53, 0, 84, 103, 82, 3, 2, 0, 10, 93, 3, 84, 0, 53, 0, 84, 104, 82, 3, 2, 0, 10, 94, 3, 84, 0, 0, 0, 106, 105, 95, 2, 2, 0, 3, 96, 0, 0, 0, 107, 107, -1, 30, 2, 0, 6, 2, 7, 3, 8, 3, 9, 4, 108, 97, 109, 98, 110, 99, 111, 100, 112, 0, 113, 0, 114, 0, 115, 0, 116, 2, 117, 2, 118, 13, 119, 3, 120, 6, 121, 101, 122, 3, 123, 102, 124, 6, 125, 14, 126, 14, 127, 103, 128, 8, 129, 8, 130, 2, 131, 14, 132, 104, 0 + -1, -1, 1, 0, -1, 1, 2, 0, 0, 0, 0, 4, 3, -1, 15, 5, 1, 6, 2, 7, 3, 8, 4, 9, 5, 10, 6, 11, 1, 12, 7, 13, 7, 14, 8, 15, 9, 16, 10, 17, 10, 18, 11, 2, 12, 0, 0, 0, 1, 19, -1, 0, 0, 2, 0, 21, 20, 13, 3, 22, 14, 23, 15, 2, 16, 0, 2, 0, 21, 24, 13, 3, 22, 14, 23, 17, 2, 16, 0, 2, 0, 21, 25, 13, 3, 22, 14, 23, 18, 2, 16, 0, 2, 0, 21, 26, 13, 3, 22, 14, 23, 19, 2, 16, 0, 2, 0, 21, 27, 13, 3, 22, 14, 23, 20, 2, 16, 0, 2, 0, 21, 28, 13, 3, 22, 14, 23, 21, 2, 16, 0, 2, 0, 21, 29, 13, 3, 22, 14, 23, 22, 2, 16, 0, 2, 0, 21, 30, 13, 3, 22, 14, 23, 23, 2, 16, 0, 2, 0, 21, 31, 13, 3, 22, 14, 23, 24, 2, 16, 0, 2, 0, 21, 32, 13, 3, 22, 14, 23, 25, 2, 16, 0, 2, 0, 21, 33, 13, 3, 22, 14, 23, 26, 2, 16, 0, 2, 0, 21, 34, 13, 3, 22, 14, 23, 27, 2, 16, 0, 2, 0, 21, 35, 13, 3, 22, 14, 23, 28, 2, 16, 0, 2, 0, 21, 36, 13, 3, 22, 14, 23, 29, 2, 16, 0, 2, 0, 21, 37, 13, 3, 22, 14, 23, 30, 2, 16, 0, 2, 0, 21, 38, 13, 3, 22, 14, 23, 31, 2, 16, 0, 2, 0, 21, 39, 13, 3, 22, 14, 23, 32, 2, 16, 0, 2, 0, 21, 40, 13, 3, 22, 14, 23, 33, 2, 16, 0, 2, 0, 21, 41, 13, 3, 22, 14, 23, 34, 2, 16, 0, 2, 0, 21, 42, 13, 3, 22, 14, 23, 35, 2, 16, 0, 2, 0, 21, 43, 13, 3, 22, 14, 23, 36, 2, 16, 0, 2, 0, 21, 44, 13, 3, 22, 14, 23, 37, 2, 16, 0, 2, 0, 21, 45, 13, 3, 22, 14, 23, 38, 2, 16, 0, 2, 0, 21, 46, 13, 3, 22, 14, 23, 39, 2, 16, 0, 2, 0, 21, 47, 13, 3, 22, 14, 23, 40, 2, 16, 0, 2, 0, 21, 48, 13, 3, 22, 14, 23, 41, 2, 16, 0, 2, 0, 21, 49, 13, 3, 22, 14, 23, 42, 2, 16, 0, 2, 0, 21, 50, 13, 3, 22, 14, 23, 43, 2, 16, 0, 2, 0, 21, 51, 13, 3, 22, 14, 23, 44, 2, 16, 0, 2, 0, 21, 52, 13, 3, 22, 14, 23, 45, 2, 16, 0, 2, 0, 21, 53, 13, 3, 22, 14, 23, 46, 2, 16, 0, 2, 0, 21, 54, 13, 3, 22, 14, 23, 47, 2, 16, 0, 2, 0, 21, 55, 13, 3, 22, 14, 23, 48, 2, 16, 0, 2, 0, 21, 56, 13, 3, 22, 14, 23, 49, 2, 16, 0, 2, 0, 21, 57, 13, 3, 22, 14, 23, 50, 2, 16, 0, 2, 0, 21, 58, 13, 3, 22, 14, 23, 51, 2, 16, 0, 2, 0, 21, 59, 13, 3, 22, 14, 23, 52, 2, 16, 0, 2, 0, 21, 60, 13, 3, 22, 14, 23, 53, 2, 16, 0, 2, 0, 21, 61, 13, 3, 22, 14, 23, 54, 2, 16, 0, 2, 0, 21, 62, 13, 3, 22, 14, 23, 55, 2, 16, 0, 2, 0, 21, 63, 13, 3, 22, 14, 23, 56, 2, 16, 0, 2, 0, 21, 64, 13, 3, 22, 14, 23, 57, 2, 16, 0, 0, 0, 1, 65, -1, 0, 0, 45, 0, 67, 66, 58, 5, 22, 14, 23, 59, 2, 60, 68, 61, 69, 62, 0, 45, 0, 67, 70, 58, 5, 22, 14, 23, 63, 2, 60, 68, 64, 69, 65, 0, 45, 0, 67, 71, 58, 5, 22, 14, 23, 66, 2, 60, 68, 67, 69, 65, 0, 45, 0, 67, 72, 68, 3, 22, 14, 23, 69, 2, 70, 0, 45, 0, 74, 73, 71, 3, 22, 14, 23, 72, 2, 73, 0, 0, 0, 76, 75, 74, 3, 22, 14, 23, 75, 2, 76, 0, 0, 0, 78, 77, -1, 6, 79, 77, 80, 7, 81, 78, 82, 79, 83, 78, 84, 7, 0, 0, 0, 1, 85, -1, 0, 0, 53, 0, 76, 86, 80, 3, 22, 14, 23, 81, 2, 82, 0, 53, 0, 76, 87, 80, 3, 22, 14, 23, 83, 2, 82, 0, 53, 0, 76, 88, 80, 3, 22, 14, 23, 84, 2, 82, 0, 53, 0, 76, 89, 80, 3, 22, 14, 23, 85, 2, 82, 0, 53, 0, 76, 90, 80, 3, 22, 14, 23, 86, 2, 82, 0, 53, 0, 76, 91, 80, 3, 22, 14, 23, 87, 2, 82, 0, 53, 0, 76, 92, 80, 3, 22, 14, 23, 88, 2, 82, 0, 53, 0, 76, 93, 80, 3, 22, 14, 23, 89, 2, 82, 0, 53, 0, 76, 94, 80, 3, 22, 14, 23, 90, 2, 82, 0, 53, 0, 76, 95, 80, 3, 22, 14, 23, 91, 2, 82, 0, 53, 0, 76, 96, 80, 3, 22, 14, 23, 92, 2, 82, 0, 0, 0, 98, 97, 93, 2, 22, 14, 2, 94, 0, 0, 0, 99, 99, -1, 17, 100, 95, 101, 96, 102, 97, 103, 98, 104, 78, 105, 78, 106, 6, 107, 9, 108, 99, 109, 8, 110, 100, 111, 9, 112, 7, 113, 7, 114, 101, 115, 78, 116, 102, 0 "variants" - - "" + "__editor_plugin_screen__" "2D" @@ -166,7 +149,7 @@ "2D" "ofs" - 328.379, 822.226 + -70.6559, 735.599 "snap_grid" False "snap_offset" @@ -186,7 +169,7 @@ "snap_step" 10, 10 "zoom" - 1.108032 + 0.663419 "3D" @@ -280,18 +263,6 @@ "znear" 0.1 - "Script" - - "current" - 0 - "sources" - - "res://moving_platform.gd" - "res://enemy.gd" - "res://player.gd" - "res://coin.gd" - - "__editor_run_settings__" @@ -301,12 +272,6 @@ 0 - True - 1 - 1 - 0, 0 - 0 - 1, 1 0 64, 64 @@ -314,12 +279,16 @@ 1, 0, 0, 1, 0, 0 2 False + 1 + 0 + 1 0, 2, 70, 536870914, 71, 10, 72, 10, 73, 10, 74, 10, 75, 10, 76, 10, 77, 10, 78, 10, 65536, 2, 65606, 536870914, 65607, 10, 65608, 10, 65609, 10, 65610, 10, 65611, 10, 65612, 10, 65613, 10, 65614, 10, 131072, 2, 131142, 536870914, 131143, 10, 131144, 10, 131145, 10, 131146, 10, 131147, 10, 131148, 10, 131149, 10, 131150, 10, 196608, 2, 196626, 9, 196678, 536870914, 196679, 10, 196680, 10, 196681, 10, 196682, 10, 196683, 10, 196684, 10, 196685, 10, 196686, 10, 262144, 2, 262162, 8, 262214, 536870914, 262215, 10, 262216, 10, 262217, 10, 262218, 10, 262219, 10, 262220, 10, 262221, 10, 262222, 10, 327680, 2, 327697, 536870921, 327698, 7, 327733, 9, 327750, 536870914, 327751, 10, 327752, 10, 327753, 10, 327754, 10, 327755, 10, 327756, 10, 327757, 10, 327758, 10, 393216, 2, 393233, 536870920, 393234, 7, 393257, 9, 393269, 7, 393286, 536870914, 393287, 10, 393288, 10, 393289, 10, 393290, 10, 393291, 10, 393292, 10, 393293, 10, 393294, 10, 458752, 2, 458769, 7, 458770, 8, 458790, 9, 458793, 8, 458805, 8, 458822, 536870914, 458823, 10, 458824, 10, 458825, 10, 458826, 10, 458827, 10, 458828, 10, 458829, 10, 458830, 10, 524288, 4, 524289, 1, 524304, 536870913, 524305, 536870918, 524306, 6, 524307, 5, 524308, 1, 524326, 8, 524329, 7, 524341, 7, 524358, 536870914, 524359, 10, 524360, 10, 524361, 10, 524362, 10, 524363, 10, 524364, 10, 524365, 10, 524366, 10, 589824, 10, 589825, 13, 589840, 536870914, 589841, 10, 589842, 10, 589843, 10, 589844, 2, 589862, 7, 589865, 7, 589876, 536870913, 589877, 6, 589878, 1, 589894, 536870914, 589895, 10, 589896, 10, 589897, 10, 589898, 10, 589899, 10, 589900, 10, 589901, 10, 589902, 10, 655360, 2, 655376, 536870914, 655377, 10, 655378, 10, 655379, 10, 655380, 2, 655398, 7, 655401, 8, 655412, 536870925, 655413, 11, 655414, 13, 655430, 536870914, 655431, 10, 655432, 10, 655433, 10, 655434, 10, 655435, 10, 655436, 10, 655437, 10, 655438, 10, 720896, 2, 720912, 536870914, 720913, 10, 720914, 10, 720915, 10, 720916, 2, 720934, 8, 720937, 7, 720958, 536870913, 720959, 5, 720960, 536870917, 720961, 5, 720962, 5, 720963, 536870917, 720964, 5, 720965, 0, 720966, 536870916, 720967, 10, 720968, 10, 720969, 10, 720970, 10, 720971, 10, 720972, 10, 720973, 10, 720974, 10, 786432, 2, 786437, 9, 786448, 536870914, 786449, 10, 786450, 10, 786451, 10, 786452, 2, 786464, 536870913, 786465, 1, 786470, 7, 786473, 7, 786474, 536870924, 786475, 1, 786494, 536870914, 786495, 10, 786496, 10, 786497, 10, 786498, 10, 786499, 10, 786500, 10, 786501, 10, 786502, 10, 786503, 10, 786504, 10, 786505, 10, 786506, 10, 786507, 10, 786508, 10, 786509, 10, 851968, 2, 851973, 7, 851984, 536870914, 851985, 10, 851986, 10, 851987, 10, 851988, 2, 851996, 536870913, 851997, 1, 852000, 536870914, 852001, 3, 852006, 7, 852009, 536870913, 852011, 2, 852030, 536870914, 852031, 10, 852032, 10, 852033, 10, 852034, 10, 852035, 10, 852036, 10, 852037, 10, 852038, 10, 852039, 10, 852040, 10, 852041, 10, 852042, 10, 852043, 10, 852044, 10, 852045, 10, 917504, 2, 917506, 9, 917509, 7, 917512, 536870921, 917520, 536870925, 917521, 11, 917522, 11, 917523, 11, 917524, 13, 917532, 536870925, 917533, 13, 917536, 536870914, 917537, 4, 917538, 1, 917540, 536870913, 917541, 0, 917542, 1, 917545, 536870914, 917546, 10, 917547, 4, 917548, 1, 917566, 536870914, 917567, 10, 917568, 10, 917569, 10, 917570, 10, 917571, 10, 917572, 10, 917573, 10, 917574, 10, 917575, 10, 917576, 10, 917577, 10, 917578, 10, 917579, 10, 917580, 10, 917581, 10, 983040, 2, 983042, 7, 983045, 7, 983048, 536870920, 983050, 536870913, 983051, 0, 983052, 1, 983064, 536870913, 983065, 1, 983072, 536870914, 983073, 10, 983074, 4, 983075, 0, 983076, 536870916, 983077, 10, 983078, 4, 983079, 536870912, 983080, 536870912, 983081, 536870916, 983082, 10, 983083, 10, 983084, 2, 983095, 9, 983102, 536870914, 983103, 10, 983104, 10, 983105, 10, 983106, 10, 983107, 10, 983108, 10, 983109, 10, 983110, 10, 983111, 10, 983112, 10, 983113, 10, 983114, 10, 983115, 10, 983116, 10, 983117, 10, 1048576, 2, 1048578, 8, 1048581, 8, 1048584, 536870919, 1048586, 536870914, 1048587, 536870922, 1048588, 2, 1048600, 536870925, 1048601, 13, 1048604, 9, 1048608, 536870925, 1048609, 536870923, 1048610, 536870923, 1048611, 536870923, 1048612, 10, 1048613, 10, 1048614, 10, 1048615, 10, 1048616, 10, 1048617, 10, 1048618, 10, 1048619, 10, 1048620, 4, 1048621, 1, 1048630, 536870921, 1048631, 8, 1048638, 536870914, 1048639, 10, 1048640, 10, 1048641, 10, 1048642, 10, 1048643, 10, 1048644, 10, 1048645, 10, 1048646, 10, 1048647, 10, 1048648, 10, 1048649, 10, 1048650, 10, 1048651, 10, 1048652, 10, 1048653, 10, 1114112, 4, 1114113, 0, 1114114, 6, 1114115, 0, 1114116, 0, 1114117, 6, 1114118, 1, 1114120, 536870920, 1114122, 536870925, 1114123, 11, 1114124, 13, 1114128, 536870913, 1114129, 5, 1114130, 536870917, 1114131, 5, 1114132, 0, 1114133, 1, 1114140, 7, 1114141, 536870921, 1114148, 536870914, 1114149, 10, 1114150, 10, 1114151, 10, 1114152, 10, 1114153, 10, 1114154, 10, 1114155, 10, 1114156, 10, 1114157, 2, 1114166, 536870920, 1114167, 8, 1114174, 536870914, 1114175, 10, 1114176, 10, 1114177, 10, 1114178, 10, 1114179, 10, 1114180, 10, 1114181, 10, 1114182, 10, 1114183, 10, 1114184, 10, 1114185, 10, 1114186, 10, 1114187, 10, 1114188, 10, 1179648, 10, 1179649, 10, 1179650, 10, 1179651, 10, 1179652, 10, 1179653, 10, 1179654, 2, 1179656, 536870919, 1179663, 536870915, 1179665, 10, 1179666, 10, 1179667, 10, 1179668, 10, 1179669, 4, 1179670, 12, 1179675, 9, 1179676, 8, 1179677, 8, 1179684, 536870914, 1179685, 10, 1179686, 10, 1179687, 10, 1179688, 10, 1179689, 10, 1179690, 10, 1179691, 10, 1179692, 10, 1179693, 4, 1179694, 1, 1179701, 9, 1179702, 536870919, 1179703, 7, 1179710, 536870914, 1179711, 10, 1179712, 10, 1179713, 10, 1179714, 10, 1179715, 10, 1179716, 10, 1179717, 10, 1179718, 10, 1179719, 10, 1179720, 10, 1179721, 10, 1179722, 10, 1245184, 10, 1245185, 10, 1245186, 10, 1245187, 10, 1245188, 10, 1245189, 10, 1245190, 2, 1245192, 536870919, 1245199, 536870913, 1245200, 536870916, 1245201, 10, 1245202, 10, 1245203, 10, 1245204, 10, 1245205, 10, 1245207, 1, 1245211, 7, 1245212, 7, 1245213, 536870920, 1245220, 536870914, 1245221, 10, 1245222, 10, 1245223, 10, 1245224, 10, 1245225, 10, 1245226, 10, 1245227, 10, 1245228, 10, 1245229, 10, 1245230, 2, 1245237, 8, 1245238, 536870919, 1245239, 8, 1245240, 536870921, 1245246, 536870914, 1245247, 10, 1245248, 10, 1245249, 10, 1245250, 10, 1245251, 10, 1245252, 10, 1245253, 10, 1245254, 10, 1245255, 10, 1245256, 10, 1245257, 10, 1245258, 10, 1310720, 10, 1310721, 10, 1310722, 10, 1310723, 10, 1310724, 10, 1310725, 10, 1310726, 2, 1310728, 536870920, 1310730, 536870913, 1310731, 1, 1310734, 536870913, 1310735, 536870916, 1310736, 10, 1310737, 10, 1310738, 10, 1310739, 10, 1310740, 10, 1310741, 10, 1310742, 10, 1310743, 4, 1310744, 1, 1310747, 8, 1310748, 7, 1310749, 536870919, 1310756, 536870914, 1310757, 10, 1310758, 10, 1310759, 10, 1310760, 10, 1310761, 10, 1310762, 10, 1310763, 10, 1310764, 10, 1310765, 10, 1310766, 4, 1310767, 5, 1310768, 12, 1310773, 7, 1310774, 536870919, 1310775, 7, 1310776, 536870919, 1310782, 536870914, 1310783, 10, 1310784, 10, 1310785, 10, 1310786, 10, 1310787, 10, 1310788, 10, 1310789, 10, 1310790, 10, 1310791, 10, 1310792, 10, 1310793, 10, 1376256, 10, 1376257, 10, 1376258, 10, 1376259, 10, 1376260, 10, 1376261, 10, 1376262, 4, 1376263, 0, 1376264, 0, 1376265, 0, 1376266, 536870916, 1376267, 4, 1376268, 0, 1376269, 0, 1376270, 536870916, 1376271, 10, 1376272, 10, 1376273, 10, 1376274, 10, 1376275, 10, 1376276, 10, 1376277, 10, 1376278, 10, 1376279, 10, 1376280, 4, 1376281, 12, 1376283, 8, 1376284, 8, 1376285, 536870920, 1376287, 536870924, 1376288, 0, 1376289, 5, 1376290, 536870917, 1376291, 0, 1376292, 536870916, 1376293, 10, 1376294, 10, 1376295, 10, 1376296, 10, 1376297, 10, 1376298, 10, 1376299, 10, 1376300, 10, 1376301, 10, 1376302, 10, 1376303, 10, 1376305, 12, 1376309, 7, 1376310, 536870920, 1376311, 7, 1376312, 536870920, 1376318, 536870914, 1376319, 10, 1376320, 10, 1376321, 10, 1376322, 10, 1376323, 10, 1376324, 10, 1376325, 10, 1376326, 10, 1376327, 10, 1376328, 10, 1441792, 10, 1441793, 10, 1441794, 10, 1441795, 10, 1441796, 10, 1441797, 10, 1441798, 10, 1441799, 10, 1441800, 10, 1441801, 10, 1441802, 10, 1441803, 10, 1441804, 10, 1441805, 10, 1441806, 10, 1441807, 10, 1441808, 10, 1441809, 10, 1441810, 10, 1441811, 10, 1441812, 10, 1441813, 10, 1441814, 10, 1441815, 10, 1441816, 10, 1441818, 0, 1441819, 6, 1441820, 6, 1441821, 536870918, 1441822, 5, 1441824, 10, 1441825, 10, 1441826, 10, 1441827, 10, 1441828, 10, 1441829, 10, 1441830, 10, 1441831, 10, 1441832, 10, 1441833, 10, 1441834, 10, 1441835, 10, 1441836, 10, 1441837, 10, 1441838, 10, 1441839, 10, 1441840, 10, 1441842, 0, 1441843, 0, 1441844, 0, 1441845, 6, 1441846, 536870918, 1441847, 6, 1441848, 536870918, 1441849, 0, 1441850, 5, 1441851, 536870917, 1441852, 5, 1441853, 0, 1441854, 536870916, 1441855, 10, 1441856, 10, 1441857, 10, 1441858, 10, 1441859, 10, 1441860, 10, 1441861, 10, 1441862, 10, 1441863, 10, 1507328, 10, 1507329, 10, 1507330, 10, 1507331, 10, 1507332, 10, 1507333, 10, 1507334, 10, 1507335, 10, 1507336, 10, 1507337, 10, 1507338, 10, 1507339, 10, 1507340, 10, 1507341, 10, 1507342, 10, 1507343, 10, 1507344, 10, 1507345, 10, 1507346, 10, 1507347, 10, 1507348, 10, 1507349, 10, 1507350, 10, 1507351, 10, 1507352, 10, 1507353, 10, 1507354, 10, 1507355, 10, 1507356, 10, 1507357, 10, 1507358, 10, 1507359, 10, 1507360, 10, 1507361, 10, 1507362, 10, 1507363, 10, 1507364, 10, 1507365, 10, 1507366, 10, 1507367, 10, 1507368, 10, 1507369, 10, 1507370, 10, 1507371, 10, 1507372, 10, 1507373, 10, 1507374, 10, 1507375, 10, 1507376, 10, 1507377, 10, 1507378, 10, 1507379, 10, 1507380, 10, 1507381, 10, 1507382, 10, 1507383, 10, 1507384, 10, 1507385, 10, 1507386, 10, 1507387, 10, 1507388, 10, 1507389, 10, 1507390, 10, 1507391, 10, 1507392, 10, 1507393, 10, 1507394, 10, 1507395, 10, 1507396, 10, 1507397, 10, 1507398, 10, 1507399, 10, 1572864, 10, 1572865, 10, 1572866, 10, 1572867, 10, 1572868, 10, 1572869, 10, 1572870, 10, 1572871, 10, 1572872, 10, 1572873, 10, 1572874, 10, 1572875, 10, 1572876, 10, 1572877, 10, 1572878, 10, 1572879, 10, 1572880, 10, 1572881, 10, 1572882, 10, 1572883, 10, 1572884, 10, 1572885, 10, 1572886, 10, 1572887, 10, 1572888, 10, 1572889, 10, 1572890, 10, 1572891, 10, 1572892, 10, 1572893, 10, 1572894, 10, 1572895, 10, 1572896, 10, 1572897, 10, 1572898, 10, 1572899, 10, 1572900, 10, 1572901, 10, 1572902, 10, 1572903, 10, 1572904, 10, 1572905, 10, 1572906, 10, 1572907, 10, 1572908, 10, 1572909, 10, 1572910, 10, 1572911, 10, 1572912, 10, 1572913, 10, 1572914, 10, 1572915, 10, 1572916, 10, 1572917, 10, 1572918, 10, 1572919, 10, 1572920, 10, 1572921, 10, 1572922, 10, 1572923, 10, 1572924, 10, 1572925, 10, 1572926, 10, 1572927, 10, 1572928, 10, 1572929, 10, 1572930, 10, 1572931, 10, 1572932, 10, 1572933, 10, 1572934, 10, 1572935, 10, 1638400, 10, 1638401, 10, 1638402, 10, 1638403, 10, 1638404, 10, 1638405, 10, 1638406, 10, 1638407, 10, 1638408, 10, 1638409, 10, 1638410, 10, 1638411, 10, 1638412, 10, 1638413, 10, 1638414, 10, 1638415, 10, 1638416, 10, 1638417, 10, 1638418, 10, 1638419, 10, 1638420, 10, 1638421, 10, 1638422, 10, 1638423, 10, 1638424, 10, 1638425, 10, 1638426, 10, 1638427, 10, 1638428, 10, 1638429, 10, 1638430, 10, 1638431, 10, 1638432, 10, 1638433, 10, 1638434, 10, 1638435, 10, 1638436, 10, 1638437, 10, 1638438, 10, 1638439, 10, 1638440, 10, 1638441, 10, 1638442, 10, 1638443, 10, 1638444, 10, 1638445, 10, 1638446, 10, 1638447, 10, 1638448, 10, 1638449, 10, 1638450, 10, 1638451, 10, 1638452, 10, 1638453, 10, 1638454, 10, 1638455, 10, 1638456, 10, 1638457, 10, 1638458, 10, 1638459, 10, 1638460, 10, 1638461, 10, 1638462, 10, 1638463, 10, 1638464, 10, 1638465, 10, 1638466, 10, 1638467, 10, 1638468, 10, 1638469, 10, 1638470, 10, 1638471, 10, 1703952, 10, 1703953, 10, 1703954, 10, 1703955, 10, 1703956, 10, 1703957, 10, 1703958, 10, 1703959, 10, 1703960, 10, 1703961, 10, 1703962, 10, 1703963, 10, 1703964, 10, 1703965, 10, 1703966, 10, 1703967, 10, 1703968, 10, 1703969, 10, 1703970, 10, 1703971, 10, 1703972, 10, 1703973, 10, 1703974, 10, 1703975, 10, 1703976, 10, 1703977, 10, 1703978, 10, 1703979, 10, 1703980, 10, 1703981, 10, 1703982, 10, 1703983, 10, 1703984, 10, 1703985, 10, 1703986, 10, 1703987, 10, 1703988, 10, 1703989, 10, 1703990, 10, 1703991, 10, 1703992, 10, 1703993, 10, 1703994, 10, 1703995, 10, 1703996, 10, 1703997, 10, 1703998, 10, 1703999, 10, 1704000, 10, 1704001, 10, 1704002, 10, 1704003, 10, 1704004, 10, 1704005, 10, 1704006, 10, 1704007, 10, 1769488, 10, 1769489, 10, 1769490, 10, 1769491, 10, 1769492, 10, 1769493, 10, 1769494, 10, 1769495, 10, 1769496, 10, 1769497, 10, 1769498, 10, 1769499, 10, 1769500, 10, 1769501, 10, 1769502, 10, 1769503, 10, 1769504, 10, 1769505, 10, 1769506, 10, 1769507, 10, 1769508, 10, 1769509, 10, 1769510, 10, 1769511, 10, 1769512, 10, 1769513, 10, 1769514, 10, 1769515, 10, 1769516, 10, 1769517, 10, 1769518, 10, 1769519, 10, 1769520, 10, 1769521, 10, 1769522, 10, 1769523, 10, 1769524, 10, 1769525, 10, 1769526, 10, 1769527, 10, 1769528, 10, 1769529, 10, 1769530, 10, 1769531, 10, 1769532, 10, 1769533, 10, 1769534, 10, 1769535, 10, 1769536, 10, 1769537, 10, 1769538, 10, 1769539, 10, 1769540, 10, 1769541, 10 "_edit_lock_" True + "" 672, 1179 "__editor_plugin_screen__" @@ -957,6 +926,7 @@ + True 2 834.664, 1309.6 diff --git a/scene/2d/canvas_item.cpp b/scene/2d/canvas_item.cpp index 92d5088b81..49229ba500 100644 --- a/scene/2d/canvas_item.cpp +++ b/scene/2d/canvas_item.cpp @@ -1172,6 +1172,14 @@ Matrix32 CanvasItem::get_viewport_transform() const { } +void CanvasItem::set_notify_local_transform(bool p_enable) { + notify_local_transform=p_enable; +} + +bool CanvasItem::is_local_transform_notification_enabled() const { + return notify_local_transform; +} + CanvasItem::CanvasItem() : xform_change(this) { @@ -1191,6 +1199,7 @@ CanvasItem::CanvasItem() : xform_change(this) { canvas_layer=NULL; use_parent_material=false; global_invalid=true; + notify_local_transform=false; light_mask=1; C=NULL; diff --git a/scene/2d/canvas_item.h b/scene/2d/canvas_item.h index 6d8308dbe4..4885256c64 100644 --- a/scene/2d/canvas_item.h +++ b/scene/2d/canvas_item.h @@ -126,6 +126,7 @@ private: bool block_transform_notify; bool behind; bool use_parent_material; + bool notify_local_transform; Ref material; @@ -155,7 +156,7 @@ private: protected: - _FORCE_INLINE_ void _notify_transform() { if (!is_inside_tree()) return; _notify_transform(this); if (!block_transform_notify) notification(NOTIFICATION_LOCAL_TRANSFORM_CHANGED); } + _FORCE_INLINE_ void _notify_transform() { if (!is_inside_tree()) return; _notify_transform(this); if (!block_transform_notify && notify_local_transform) notification(NOTIFICATION_LOCAL_TRANSFORM_CHANGED); } void item_rect_changed(); @@ -263,6 +264,10 @@ public: Vector2 get_global_mouse_pos() const; Vector2 get_local_mouse_pos() const; + void set_notify_local_transform(bool p_enable); + bool is_local_transform_notification_enabled() const; + + CanvasItem(); ~CanvasItem(); }; diff --git a/scene/2d/collision_polygon_2d.cpp b/scene/2d/collision_polygon_2d.cpp index ceea41d1c8..8a5e2f51d1 100644 --- a/scene/2d/collision_polygon_2d.cpp +++ b/scene/2d/collision_polygon_2d.cpp @@ -33,7 +33,7 @@ void CollisionPolygon2D::_add_to_collision_object(Object *p_obj) { - if (unparenting) + if (unparenting || !can_update_body) return; CollisionObject2D *co = p_obj->cast_to(); @@ -49,6 +49,7 @@ void CollisionPolygon2D::_add_to_collision_object(Object *p_obj) { //here comes the sun, lalalala //decompose concave into multiple convex polygons and add them Vector< Vector > decomp = Geometry::decompose_polygon(polygon); + shape_from=co->get_shape_count(); for(int i=0;i convex = memnew( ConvexPolygonShape2D ); convex->set_points(decomp[i]); @@ -57,6 +58,11 @@ void CollisionPolygon2D::_add_to_collision_object(Object *p_obj) { co->set_shape_as_trigger(co->get_shape_count()-1,true); } + shape_to=co->get_shape_count()-1; + if (shape_toset_shape_as_trigger(co->get_shape_count()-1,true); + shape_from=co->get_shape_count()-1; + shape_to=co->get_shape_count()-1; + } @@ -86,6 +95,8 @@ void CollisionPolygon2D::_add_to_collision_object(Object *p_obj) { void CollisionPolygon2D::_update_parent() { + if (!can_update_body) + return; Node *parent = get_parent(); if (!parent) return; @@ -101,12 +112,24 @@ void CollisionPolygon2D::_notification(int p_what) { switch(p_what) { case NOTIFICATION_ENTER_TREE: { unparenting=false; + can_update_body=get_tree()->is_editor_hint(); + } break; + case NOTIFICATION_EXIT_TREE: { + can_update_body=false; } break; case NOTIFICATION_LOCAL_TRANSFORM_CHANGED: { if (!is_inside_tree()) break; - _update_parent(); + if (can_update_body) { + _update_parent(); + } else if (shape_from>=0 && shape_to>=0) { + CollisionObject2D *co = get_parent()->cast_to(); + for(int i=shape_from;i<=shape_to;i++) { + co->set_shape_transform(i,get_transform()); + } + } + } break; @@ -141,20 +164,22 @@ void CollisionPolygon2D::set_polygon(const Vector& p_polygon) { polygon=p_polygon; - for(int i=0;i=0 && shape_to>=0) { + CollisionObject2D *co = get_parent()->cast_to(); + for(int i=shape_from;i<=shape_to;i++) { + co->set_shape_as_trigger(i,p_trigger); + } + + } } bool CollisionPolygon2D::is_trigger() const{ @@ -192,6 +224,17 @@ bool CollisionPolygon2D::is_trigger() const{ } +void CollisionPolygon2D::_set_shape_range(const Vector2& p_range) { + + shape_from=p_range.x; + shape_to=p_range.y; +} + +Vector2 CollisionPolygon2D::_get_shape_range() const { + + return Vector2(shape_from,shape_to); +} + void CollisionPolygon2D::_bind_methods() { ObjectTypeDB::bind_method(_MD("_add_to_collision_object"),&CollisionPolygon2D::_add_to_collision_object); @@ -204,9 +247,17 @@ void CollisionPolygon2D::_bind_methods() { ObjectTypeDB::bind_method(_MD("set_trigger"),&CollisionPolygon2D::set_trigger); ObjectTypeDB::bind_method(_MD("is_trigger"),&CollisionPolygon2D::is_trigger); + ObjectTypeDB::bind_method(_MD("_set_shape_range","shape_range"),&CollisionPolygon2D::_set_shape_range); + ObjectTypeDB::bind_method(_MD("_get_shape_range"),&CollisionPolygon2D::_get_shape_range); + + ObjectTypeDB::bind_method(_MD("get_collision_object_first_shape"),&CollisionPolygon2D::get_collision_object_first_shape); + ObjectTypeDB::bind_method(_MD("get_collision_object_last_shape"),&CollisionPolygon2D::get_collision_object_last_shape); + ADD_PROPERTY( PropertyInfo(Variant::INT,"build_mode",PROPERTY_HINT_ENUM,"Solids,Segments"),_SCS("set_build_mode"),_SCS("get_build_mode")); ADD_PROPERTY( PropertyInfo(Variant::VECTOR2_ARRAY,"polygon"),_SCS("set_polygon"),_SCS("get_polygon")); + ADD_PROPERTY( PropertyInfo(Variant::VECTOR2,"shape_range",PROPERTY_HINT_NONE,"",PROPERTY_USAGE_NOEDITOR),_SCS("_set_shape_range"),_SCS("_get_shape_range")); ADD_PROPERTY( PropertyInfo(Variant::BOOL,"trigger"),_SCS("set_trigger"),_SCS("is_trigger")); + } CollisionPolygon2D::CollisionPolygon2D() { @@ -215,6 +266,9 @@ CollisionPolygon2D::CollisionPolygon2D() { build_mode=BUILD_SOLIDS; trigger=false; unparenting=false; - + shape_from=-1; + shape_to=-1; + can_update_body=false; + set_notify_local_transform(true); } diff --git a/scene/2d/collision_polygon_2d.h b/scene/2d/collision_polygon_2d.h index 4e78868082..4bc9713c8a 100644 --- a/scene/2d/collision_polygon_2d.h +++ b/scene/2d/collision_polygon_2d.h @@ -56,6 +56,14 @@ protected: void _add_to_collision_object(Object *p_obj); void _update_parent(); + bool can_update_body; + int shape_from; + int shape_to; + + void _set_shape_range(const Vector2& p_range); + Vector2 _get_shape_range() const; + + protected: void _notification(int p_what); @@ -72,6 +80,10 @@ public: Vector get_polygon() const; virtual Rect2 get_item_rect() const; + + int get_collision_object_first_shape() const { return shape_from; } + int get_collision_object_last_shape() const { return shape_to; } + CollisionPolygon2D(); }; diff --git a/scene/2d/collision_shape_2d.cpp b/scene/2d/collision_shape_2d.cpp index 5012c54b17..a0a015a99e 100644 --- a/scene/2d/collision_shape_2d.cpp +++ b/scene/2d/collision_shape_2d.cpp @@ -44,10 +44,12 @@ void CollisionShape2D::_add_to_collision_object(Object *p_obj) { CollisionObject2D *co = p_obj->cast_to(); ERR_FAIL_COND(!co); + update_shape_index=co->get_shape_count(); co->add_shape(shape,get_transform()); if (trigger) co->set_shape_as_trigger(co->get_shape_count()-1,true); + } void CollisionShape2D::_shape_changed() { @@ -74,12 +76,27 @@ void CollisionShape2D::_notification(int p_what) { case NOTIFICATION_ENTER_TREE: { unparenting=false; + can_update_body=get_tree()->is_editor_hint(); + } break; case NOTIFICATION_LOCAL_TRANSFORM_CHANGED: { if (!is_inside_tree()) break; - _update_parent(); + if (can_update_body) { + _update_parent(); + } else if (update_shape_index>=0){ + + CollisionObject2D *co = get_parent()->cast_to(); + if (co) { + co->set_shape_transform(update_shape_index,get_transform()); + } + + } + + } break; + case NOTIFICATION_EXIT_TREE: { + can_update_body=false; } break; /* @@ -92,6 +109,9 @@ void CollisionShape2D::_notification(int p_what) { } break;*/ case NOTIFICATION_DRAW: { + if (!get_tree()->is_editor_hint()) + return; + rect=Rect2(); Color draw_col=Color(0,0.6,0.7,0.5); @@ -209,7 +229,14 @@ void CollisionShape2D::set_shape(const Ref& p_shape) { shape->disconnect("changed",this,"_shape_changed"); shape=p_shape; update(); - _update_parent(); + if (is_inside_tree() && can_update_body) + _update_parent(); + if (is_inside_tree() && !can_update_body && update_shape_index>=0) { + CollisionObject2D *co = get_parent()->cast_to(); + if (co) { + co->set_shape(update_shape_index,p_shape); + } + } if (shape.is_valid()) shape->connect("changed",this,"_shape_changed"); @@ -228,7 +255,14 @@ Rect2 CollisionShape2D::get_item_rect() const { void CollisionShape2D::set_trigger(bool p_trigger) { trigger=p_trigger; - _update_parent(); + if (can_update_body) { + _update_parent(); + } else if (is_inside_tree() && update_shape_index>=0){ + CollisionObject2D *co = get_parent()->cast_to(); + if (co) { + co->set_shape_as_trigger(update_shape_index,p_trigger); + } + } } bool CollisionShape2D::is_trigger() const{ @@ -236,6 +270,19 @@ bool CollisionShape2D::is_trigger() const{ return trigger; } + +void CollisionShape2D::_set_update_shape_index(int p_index) { + + + update_shape_index=p_index; +} + +int CollisionShape2D::_get_update_shape_index() const{ + + return update_shape_index; +} + + void CollisionShape2D::_bind_methods() { ObjectTypeDB::bind_method(_MD("set_shape","shape"),&CollisionShape2D::set_shape); @@ -245,14 +292,23 @@ void CollisionShape2D::_bind_methods() { ObjectTypeDB::bind_method(_MD("set_trigger","enable"),&CollisionShape2D::set_trigger); ObjectTypeDB::bind_method(_MD("is_trigger"),&CollisionShape2D::is_trigger); + ObjectTypeDB::bind_method(_MD("_set_update_shape_index","index"),&CollisionShape2D::_set_update_shape_index); + ObjectTypeDB::bind_method(_MD("_get_update_shape_index"),&CollisionShape2D::_get_update_shape_index); + + ObjectTypeDB::bind_method(_MD("get_collision_object_shape_index"),&CollisionShape2D::get_collision_object_shape_index); + ADD_PROPERTYNZ(PropertyInfo(Variant::OBJECT,"shape",PROPERTY_HINT_RESOURCE_TYPE,"Shape2D"),_SCS("set_shape"),_SCS("get_shape")); ADD_PROPERTY(PropertyInfo(Variant::BOOL,"trigger"),_SCS("set_trigger"),_SCS("is_trigger")); + ADD_PROPERTY( PropertyInfo( Variant::INT, "_update_shape_index", PROPERTY_HINT_NONE, "",PROPERTY_USAGE_NOEDITOR), _SCS("_set_update_shape_index"), _SCS("_get_update_shape_index")); + } CollisionShape2D::CollisionShape2D() { rect=Rect2(-Point2(10,10),Point2(20,20)); - + set_notify_local_transform(true); trigger=false; unparenting = false; + can_update_body = false; + update_shape_index=-1; } diff --git a/scene/2d/collision_shape_2d.h b/scene/2d/collision_shape_2d.h index 507912d31e..82e1137174 100644 --- a/scene/2d/collision_shape_2d.h +++ b/scene/2d/collision_shape_2d.h @@ -39,7 +39,13 @@ class CollisionShape2D : public Node2D { Rect2 rect; bool trigger; bool unparenting; + bool can_update_body; void _shape_changed(); + int update_shape_index; + + void _set_update_shape_index(int p_index); + int _get_update_shape_index() const; + protected: void _update_parent(); @@ -55,6 +61,8 @@ public: void set_trigger(bool p_trigger); bool is_trigger() const; + int get_collision_object_shape_index() const { return _get_update_shape_index(); } + CollisionShape2D(); }; diff --git a/scene/3d/body_shape.cpp b/scene/3d/body_shape.cpp index c49d1b028c..709a79a5f4 100644 --- a/scene/3d/body_shape.cpp +++ b/scene/3d/body_shape.cpp @@ -43,7 +43,10 @@ void CollisionShape::_update_body() { - + if (!get_tree() || !can_update_body) + return; + if (!get_tree()->is_editor_hint()) + return; if (get_parent() && get_parent()->cast_to()) get_parent()->cast_to()->_update_shapes_from_children(); @@ -310,10 +313,13 @@ void CollisionShape::_add_to_collision_object(Object* p_cshape) { if (shape.is_valid()) { + update_shape_index=co->get_shape_count(); co->add_shape(shape,get_transform()); - if (trigger) - co->set_shape_as_trigger( co->get_shape_count() -1, true ); - } + if (trigger) + co->set_shape_as_trigger( co->get_shape_count() -1, true ); + } else { + update_shape_index=-1; + } } void CollisionShape::_notification(int p_what) { @@ -322,12 +328,14 @@ void CollisionShape::_notification(int p_what) { case NOTIFICATION_ENTER_TREE: { unparenting=false; + can_update_body=get_tree()->is_editor_hint(); + set_notify_local_transform(!can_update_body); //indicator_instance = VisualServer::get_singleton()->instance_create2(indicator,get_world()->get_scenario()); } break; case NOTIFICATION_TRANSFORM_CHANGED: { // VisualServer::get_singleton()->instance_set_transform(indicator_instance,get_global_transform()); - if (updating_body) { + if (can_update_body && updating_body) { _update_body(); } } break; @@ -336,16 +344,30 @@ void CollisionShape::_notification(int p_what) { VisualServer::get_singleton()->free(indicator_instance); indicator_instance=RID(); }*/ + can_update_body=false; + set_notify_local_transform(false); } break; case NOTIFICATION_UNPARENTED: { unparenting=true; - if (updating_body) + if (can_update_body && updating_body) _update_body(); } break; case NOTIFICATION_PARENTED: { - if (updating_body) + if (can_update_body && updating_body) _update_body(); } break; + case NOTIFICATION_LOCAL_TRANSFORM_CHANGED: { + + if (!can_update_body && update_shape_index>=0) { + + CollisionObject *co = get_parent()->cast_to(); + if (co) { + co->set_shape_transform(update_shape_index,get_transform()); + } + } + + } break; + } } @@ -357,6 +379,18 @@ void CollisionShape::resource_changed(RES res) { } +void CollisionShape::_set_update_shape_index(int p_index) { + + + update_shape_index=p_index; +} + +int CollisionShape::_get_update_shape_index() const{ + + return update_shape_index; +} + + void CollisionShape::_bind_methods() { //not sure if this should do anything @@ -368,10 +402,14 @@ void CollisionShape::_bind_methods() { ObjectTypeDB::bind_method(_MD("is_trigger"),&CollisionShape::is_trigger); ObjectTypeDB::bind_method(_MD("make_convex_from_brothers"),&CollisionShape::make_convex_from_brothers); ObjectTypeDB::set_method_flags("CollisionShape","make_convex_from_brothers",METHOD_FLAGS_DEFAULT|METHOD_FLAG_EDITOR); + ObjectTypeDB::bind_method(_MD("_set_update_shape_index","index"),&CollisionShape::_set_update_shape_index); + ObjectTypeDB::bind_method(_MD("_get_update_shape_index"),&CollisionShape::_get_update_shape_index); + ObjectTypeDB::bind_method(_MD("get_collision_object_shape_index"),&CollisionShape::get_collision_object_shape_index); ADD_PROPERTY( PropertyInfo( Variant::OBJECT, "shape", PROPERTY_HINT_RESOURCE_TYPE, "Shape"), _SCS("set_shape"), _SCS("get_shape")); - ADD_PROPERTY(PropertyInfo(Variant::BOOL,"trigger"),_SCS("set_trigger"),_SCS("is_trigger")); + ADD_PROPERTY(PropertyInfo(Variant::BOOL,"trigger"),_SCS("set_trigger"),_SCS("is_trigger")); + ADD_PROPERTY( PropertyInfo( Variant::INT, "_update_shape_index", PROPERTY_HINT_NONE, "",PROPERTY_USAGE_NOEDITOR), _SCS("_set_update_shape_index"), _SCS("_get_update_shape_index")); } @@ -383,8 +421,15 @@ void CollisionShape::set_shape(const Ref &p_shape) { if (!shape.is_null()) shape->register_owner(this); update_gizmo(); - if (updating_body) + if (updating_body) { _update_body(); + } else if (can_update_body && update_shape_index>=0 && is_inside_tree()){ + CollisionObject *co = get_parent()->cast_to(); + if (co) { + co->set_shape(update_shape_index,p_shape); + } + + } } Ref CollisionShape::get_shape() const { @@ -405,8 +450,14 @@ bool CollisionShape::is_updating_body() const { void CollisionShape::set_trigger(bool p_trigger) { trigger=p_trigger; - if (updating_body) + if (updating_body) { _update_body(); + } else if (can_update_body && update_shape_index>=0 && is_inside_tree()){ + CollisionObject *co = get_parent()->cast_to(); + if (co) { + co->set_shape_as_trigger(update_shape_index,p_trigger); + } + } } bool CollisionShape::is_trigger() const{ @@ -419,7 +470,9 @@ CollisionShape::CollisionShape() { //indicator = VisualServer::get_singleton()->mesh_create(); updating_body=true; unparenting=false; - trigger=false; + update_shape_index=-1; + trigger=false; + can_update_body=false; } CollisionShape::~CollisionShape() { diff --git a/scene/3d/body_shape.h b/scene/3d/body_shape.h index b3c0006d79..c1ebf806a9 100644 --- a/scene/3d/body_shape.h +++ b/scene/3d/body_shape.h @@ -56,8 +56,16 @@ class CollisionShape : public Spatial { bool unparenting; bool trigger; + bool can_update_body; + + int update_shape_index; + void _update_body(); void _add_to_collision_object(Object* p_cshape); + + void _set_update_shape_index(int p_index); + int _get_update_shape_index() const; + protected: void _notification(int p_what); @@ -73,8 +81,10 @@ public: void set_updating_body(bool p_update); bool is_updating_body() const; - void set_trigger(bool p_trigger); - bool is_trigger() const; + void set_trigger(bool p_trigger); + bool is_trigger() const; + + int get_collision_object_shape_index() const { return _get_update_shape_index(); } CollisionShape(); ~CollisionShape(); diff --git a/scene/3d/collision_polygon.cpp b/scene/3d/collision_polygon.cpp index 4ab1a1a1ab..c857b4851a 100644 --- a/scene/3d/collision_polygon.cpp +++ b/scene/3d/collision_polygon.cpp @@ -6,6 +6,8 @@ void CollisionPolygon::_add_to_collision_object(Object *p_obj) { + if (!can_update_body) + return; CollisionObject *co = p_obj->cast_to(); ERR_FAIL_COND(!co); @@ -23,6 +25,7 @@ void CollisionPolygon::_add_to_collision_object(Object *p_obj) { //here comes the sun, lalalala //decompose concave into multiple convex polygons and add them + shape_from=co->get_shape_count(); for(int i=0;i convex = memnew( ConvexPolygonShape ); DVector cp; @@ -43,6 +46,11 @@ void CollisionPolygon::_add_to_collision_object(Object *p_obj) { co->add_shape(convex,get_transform()); } + shape_to=co->get_shape_count()-1; + if (shape_to_update_shapes_from_children(); } +void CollisionPolygon::_set_shape_range(const Vector2& p_range) { + + shape_from=p_range.x; + shape_to=p_range.y; +} + +Vector2 CollisionPolygon::_get_shape_range() const { + + return Vector2(shape_from,shape_to); +} + void CollisionPolygon::_notification(int p_what) { switch(p_what) { + case NOTIFICATION_ENTER_TREE: { + can_update_body=get_tree()->is_editor_hint(); + set_notify_local_transform(!can_update_body); + + //indicator_instance = VisualServer::get_singleton()->instance_create2(indicator,get_world()->get_scenario()); + } break; + case NOTIFICATION_EXIT_TREE: { + can_update_body=false; + set_notify_local_transform(false); + } break; case NOTIFICATION_TRANSFORM_CHANGED: { if (!is_inside_tree()) break; - _update_parent(); + if (can_update_body) { + _update_parent(); + } + + } break; + case NOTIFICATION_LOCAL_TRANSFORM_CHANGED: { + if (!can_update_body && shape_from>=0 && shape_from>=0) { + + CollisionObject *co = get_parent()->cast_to(); + if (co) { + for(int i=shape_from;i<=shape_to;i++) { + co->set_shape_transform(i,get_transform()); + } + } + } } break; #if 0 @@ -119,29 +165,31 @@ void CollisionPolygon::_notification(int p_what) { void CollisionPolygon::set_polygon(const Vector& p_polygon) { polygon=p_polygon; + if (can_update_body) { - for(int i=0;i polygon; + void _add_to_collision_object(Object *p_obj); void _update_parent(); + bool can_update_body; + int shape_from; + int shape_to; + + void _set_shape_range(const Vector2& p_range); + Vector2 _get_shape_range() const; + protected: void _notification(int p_what); @@ -43,6 +51,10 @@ public: Vector get_polygon() const; virtual AABB get_item_rect() const; + + int get_collision_object_first_shape() const { return shape_from; } + int get_collision_object_last_shape() const { return shape_to; } + CollisionPolygon(); }; diff --git a/scene/3d/spatial.cpp b/scene/3d/spatial.cpp index 7117c59176..a65f68ed2c 100644 --- a/scene/3d/spatial.cpp +++ b/scene/3d/spatial.cpp @@ -231,6 +231,11 @@ void Spatial::set_transform(const Transform& p_transform) { _change_notify("transform/rotation"); _change_notify("transform/scale"); _propagate_transform_changed(this); + if (data.notify_local_transform) { + notification(NOTIFICATION_LOCAL_TRANSFORM_CHANGED); + } + + } @@ -335,6 +340,9 @@ void Spatial::set_translation(const Vector3& p_translation) { data.local_transform.origin=p_translation; _propagate_transform_changed(this); + if (data.notify_local_transform) { + notification(NOTIFICATION_LOCAL_TRANSFORM_CHANGED); + } } @@ -348,6 +356,9 @@ void Spatial::set_rotation(const Vector3& p_euler){ data.rotation=p_euler; data.dirty|=DIRTY_LOCAL; _propagate_transform_changed(this); + if (data.notify_local_transform) { + notification(NOTIFICATION_LOCAL_TRANSFORM_CHANGED); + } } void Spatial::set_scale(const Vector3& p_scale){ @@ -360,6 +371,9 @@ void Spatial::set_scale(const Vector3& p_scale){ data.scale=p_scale; data.dirty|=DIRTY_LOCAL; _propagate_transform_changed(this); + if (data.notify_local_transform) { + notification(NOTIFICATION_LOCAL_TRANSFORM_CHANGED); + } } @@ -685,6 +699,13 @@ void Spatial::look_at_from_pos(const Vector3& p_pos,const Vector3& p_target, con } +void Spatial::set_notify_local_transform(bool p_enable) { + data.notify_local_transform=p_enable; +} + +bool Spatial::is_local_transform_notification_enabled() const { + return data.notify_local_transform; +} void Spatial::_bind_methods() { @@ -725,6 +746,9 @@ void Spatial::_bind_methods() { ObjectTypeDB::bind_method(_MD("_set_visible_"), &Spatial::_set_visible_); ObjectTypeDB::bind_method(_MD("_is_visible_"), &Spatial::_is_visible_); + ObjectTypeDB::bind_method(_MD("set_notify_local_transform","enable"), &Spatial::set_notify_local_transform); + ObjectTypeDB::bind_method(_MD("is_local_transform_notification_enabled"), &Spatial::is_local_transform_notification_enabled); + void rotate(const Vector3& p_normal,float p_radians); void rotate_x(float p_radians); void rotate_y(float p_radians); @@ -783,6 +807,7 @@ Spatial::Spatial() : xform_change(this) data.gizmo_disabled=false; data.gizmo_dirty=false; #endif + data.notify_local_transform=false; data.parent=NULL; data.C=NULL; diff --git a/scene/3d/spatial.h b/scene/3d/spatial.h index 8b40786fb8..7fa6099d7a 100644 --- a/scene/3d/spatial.h +++ b/scene/3d/spatial.h @@ -91,6 +91,7 @@ class Spatial : public Node { List::Element *C; bool ignore_notification; + bool notify_local_transform; bool visible; @@ -134,6 +135,7 @@ public: NOTIFICATION_ENTER_WORLD=41, NOTIFICATION_EXIT_WORLD=42, NOTIFICATION_VISIBILITY_CHANGED=43, + NOTIFICATION_LOCAL_TRANSFORM_CHANGED=44, }; Spatial *get_parent_spatial() const; @@ -179,6 +181,9 @@ public: void look_at(const Vector3& p_target, const Vector3& p_up_normal); void look_at_from_pos(const Vector3& p_pos,const Vector3& p_target, const Vector3& p_up_normal); + void set_notify_local_transform(bool p_enable); + bool is_local_transform_notification_enabled() const; + void orthonormalize(); void set_identity(); diff --git a/scene/register_scene_types.cpp b/scene/register_scene_types.cpp index 3727c2e8ec..851de4a89f 100644 --- a/scene/register_scene_types.cpp +++ b/scene/register_scene_types.cpp @@ -458,7 +458,6 @@ void register_scene_types() { /* disable types by default, only editors should enable them */ - ObjectTypeDB::set_type_enabled("CollisionShape",false); //ObjectTypeDB::set_type_enabled("BodyVolumeSphere",false); //ObjectTypeDB::set_type_enabled("BodyVolumeBox",false); //ObjectTypeDB::set_type_enabled("BodyVolumeCapsule",false); @@ -492,9 +491,12 @@ void register_scene_types() { ObjectTypeDB::register_type(); ObjectTypeDB::register_type(); ObjectTypeDB::register_type(); - - ObjectTypeDB::set_type_enabled("CollisionShape2D",false); - ObjectTypeDB::set_type_enabled("CollisionPolygon2D",false); + if (bool(GLOBAL_DEF("physics/remove_collision_helpers_at_runtime",false))) { + ObjectTypeDB::set_type_enabled("CollisionShape2D",false); + ObjectTypeDB::set_type_enabled("CollisionPolygon2D",false); + ObjectTypeDB::set_type_enabled("CollisionShape",false); + ObjectTypeDB::set_type_enabled("CollisionPolygon",false); + } OS::get_singleton()->yield(); //may take time to init