From 9d182e93a3d75396405733109f9f086969c4b19b Mon Sep 17 00:00:00 2001 From: Carl Olsson Date: Fri, 13 Feb 2015 20:49:21 +1000 Subject: [PATCH 1/2] Added body mode property to TileMap to select between static and kinematic physics bodies. Kinematic allow use of TileMaps for moving platforms for example. Updated 2D Platformer demo to use kinematic TileMaps for moving platforms, in doing so discovered that the tileset was messed up and not converting properly, so fixed that too. And in order to fix the tileset I need to activate snapping for collision polygon vertices. --- demos/2d/platformer/moving_platform.png | Bin 2143 -> 0 bytes demos/2d/platformer/moving_platform.xml | 119 ++++++----- demos/2d/platformer/stage.xml | 40 ++-- demos/2d/platformer/tiles_demo.png | Bin 11736 -> 10066 bytes demos/2d/platformer/tileset.xml | 185 ++++++++++++------ demos/2d/platformer/tileset_edit.xml | 142 +++++++++----- scene/2d/tile_map.cpp | 51 +++-- scene/2d/tile_map.h | 11 +- .../collision_polygon_editor_plugin.cpp | 14 +- 9 files changed, 339 insertions(+), 223 deletions(-) delete mode 100644 demos/2d/platformer/moving_platform.png diff --git a/demos/2d/platformer/moving_platform.png b/demos/2d/platformer/moving_platform.png deleted file mode 100644 index f01c6ea37fc5535d28d704004a6c36deb0587890..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2143 zcmV-l2%z_gP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iye- z1PU`=_Loio00-YmL_t(|+U=dqZxvM-#-G7TDaC4AkhGQrB1jNPNlXaQbb(b96XSxI zxYCvG`~!?87&pd^J9oM;x-u~?)Sxlck2D~`4XA{m7)WUND)c7A(iVYnaqn9?Z|B@| z&diyQOP}ASxijbMJ!g8J=bX7SH$uh4aa>5b+ddzU0pRafC!(dtpZMhYM7lp;{~>6- zcW!(|+m3e)7x6_j-iYop8TLlun zQ&-&?W-pLVAga0nL+|Vc01Ry2005XdH|>=T{kzS|M%>^JP`kQ0eq}Tl-A$7v&J>00B`QSHolYyXG2NQ+rb4ej zD&x@nJb4tk#Hi=dKz4cnJigQo0{Dg9Lg)ZI*!l5u z0DwyuF2w+_acpzj8P!DSbfL-(b-b*2^Ty>{f7Sg{R=>;V%ai8-09OzE9&rzV5VEoz zz~FnkQk9>OdlBsfuD$yQ_W%eX)zDR!hWM`e3F$=TuiJG^2S5lNKz*<|fzZ41S!d?5 z^ZCYQ%NMGgQ1Mnh4rN_$b%PFo5ITVR&^X)t?t8!IjIDQ9P5I@#khLDuXKBCb`wWZi z+p-~7e1hrjiO#Rv2kGZlJFNZLO6TjSB){$Z9kz739eKye)E~Nj*Ku{NM~^!l03oC@ zYV$0Bo*@@!W>IR#q0a7T{i$=;@962|8sm6fDlp{wYdv$_f0vC z#Ed!CI{wj)DFDFu7q?qVlgvN(VRPmkL{h0lxv+RVT?wJ`NqLR^>Gd=W=@yj`(`}Ve z$6-=_jZL97ws`L<`*dnOrgHTfTE{Ca?}ubR;aK{3+WOHp4yN%kjkhV@<=0VqJ$gLf zJT(FUm~?!@6&(N}WaaGvyz$~b0Km7Sjl>>+W_E5NQ~4YFdYsZ7es&H3@bsZ%`pehn z+BymwyGN4BWm0z2`QuYFsfuKCFd7|~Yd=W*%bi90cKF6`>IWUa4LweJ{7vI*!W6%a z-k$E%4*t{ z4uB9kfa-X-Z*3{cR+R#WRwQ4g_KiREZh6&v6`kV1=l}>I+yjtZf8X8HqITg;<<@1b zxzghA)bTgn&7uP!gwO%_I)SRci5GgUTo=V-{9)s-tMbzU5JKwb0Oa|9d5&6U(5z1b z%F}3BaeW%CsI_ulrDOcn#Q*PqcT%rwIsifl9e{A<`i46R0;uF4VJOi3YyJat#<&j^^nHa+nW(u3KnSUi0~p=3zLI*iGMBxJ zP6e-)vc{hdfDl3l;ELS$FKQRnv?iD1p_IV)elr!Yoc=3o{7u(29RMMO4xlQf6HIS) z4W*1(6)Uvzx!#2^rK`#r6s`D0k3aVS2qAO;zQkz$RLbPJ>DXs4An*NlQ3U&LD66zE3CSjbGOOa$VB_5JKnxe4W6y!QMY01V?+!!& zFn#?-TV>nOw>B|jOZu#9W>;l2<;%Oa*YQX{Tvq*HN@we@yvl6rpV0AV82{AkO4nm* z=h~h%iR+pUfDl3lAe=aVHSu}-@L*!b{A+IBYi+6(-!#KJC}8T^QPOE8vE4;*br7z~ zr~AVcmrd!WJ=41?Y1TEpt)EQiUE}v1f0H9{9hVXQIxr!G4j?0s4G%^DaQecv)ETzT zTDMRI)SpFBOisn7{I=hlx9x4%+UpuuR$|o-(^}bvDP6p{cQF^cD0bFybxp4wgpOaX z+qy#sKnNW`{n5W7ENij63TDfnLrGJW$k!p5$}L*a1N4vAo`k7ieB%#2uC5NU=wG>} z10aOldk!G$%;`FVU$N}k7S%pih17_mgi`XN;?L@g9O4V=V2U39(2k1^fDlp|{{xVg V;v;u%4f_B9002ovPDHLkV1g7OG=~5H diff --git a/demos/2d/platformer/moving_platform.xml b/demos/2d/platformer/moving_platform.xml index 4d54d6d11c8..f39b11782c2 100644 --- a/demos/2d/platformer/moving_platform.xml +++ b/demos/2d/platformer/moving_platform.xml @@ -1,77 +1,56 @@ - - - - - 0 - -88, 24, -88, -24, 88, -24, 88, 24 - - + + + "names" - + "moving_platform" "Node2D" + "_import_path" "visibility/visible" "visibility/opacity" "visibility/self_opacity" - "visibility/on_top" "transform/pos" "transform/rot" "transform/scale" + "z/z" + "z/relative" "script/script" "__meta__" "motion" "cycle" "platform" - "RigidBody2D" - "shape_count" - "shapes/0/shape" - "shapes/0/transform" - "shapes/0/trigger" + "TileMap" "mode" - "mass" - "friction" - "bounce" - "custom_integrator" - "continuous_cd" - "contacts_reported" - "contact_monitor" - "active" - "can_sleep" - "velocity/linear" - "velocity/angular" - "Sprite" - "texture" - "centered" - "offset" - "flip_h" - "flip_v" - "vframes" - "hframes" - "frame" - "modulate" - "region" - "region_rect" - "CollisionPolygon2D" - "build_mode" - "polygon" + "tile_set" + "cell/size" + "cell/quadrant_size" + "cell/custom_transform" + "cell/half_offset" + "collision/body_mode" + "collision/friction" + "collision/bounce" + "collision/layers" + "tile_data" "version" 1 "conn_count" 0 "node_count" - 4 + 2 "variants" + "" True 1 0, 0 0 1, 1 - + 0 + "__editor_plugin_states__" @@ -92,16 +71,22 @@ "pixel_snap" False "zoom" - 1.360373 + 1.850616 + "use_snap" + True "ofs" - -210.652, -172.81 + -406.735, -157.32 + "snap" + 32 "3D" + "deflight_rot_y" + 0.628319 "zfar" 500 "fov" - 400 + 179 "viewports" @@ -111,10 +96,12 @@ 0 "y_rot" 0 - "use_orthogonal" - False + "listener" + True "use_environment" False + "use_orthogonal" + False "pos" 0, 0, 0 @@ -125,10 +112,12 @@ 0 "y_rot" 0 - "use_orthogonal" + "listener" False "use_environment" False + "use_orthogonal" + False "pos" 0, 0, 0 @@ -139,10 +128,12 @@ 0 "y_rot" 0 - "use_orthogonal" + "listener" False "use_environment" False + "use_orthogonal" + False "pos" 0, 0, 0 @@ -153,10 +144,12 @@ 0 "y_rot" 0 - "use_orthogonal" + "listener" False "use_environment" False + "use_orthogonal" + False "pos" 0, 0, 0 @@ -165,12 +158,18 @@ 1 "default_light" True + "ambient_light_color" + 0.15, 0.15, 0.15, 1 "show_grid" True "show_origin" True "znear" 0.1 + "default_srgb" + False + "deflight_rot_x" + 0.942478 "__editor_run_settings__" @@ -183,19 +182,17 @@ "__editor_plugin_screen__" "2D" + -96, -32 + + 64, 64 + 16 + 1, 0, 0, 1, 0, 0 + 2 1 - - 1, -0, 0, 1, 0, 0 - False - 3 - 0 - - 1, 1, 1, 1 - 0, 0, 0, 0 - -88, -24, 88, -24, 88, 24, -88, 24 + 0, 536870927, 1, 536870926, 2, 15 "nodes" - -1, -1, 1, 0, -1, 11, 2, 0, 3, 1, 4, 1, 5, 0, 6, 2, 7, 3, 8, 4, 9, 5, 10, 6, 11, 2, 12, 1, 0, 0, 0, 14, 13, -1, 23, 2, 0, 3, 1, 4, 1, 5, 0, 6, 2, 7, 3, 8, 4, 15, 7, 16, 8, 17, 9, 18, 10, 19, 11, 20, 1, 21, 1, 22, 3, 23, 10, 24, 10, 25, 12, 26, 10, 27, 0, 28, 0, 29, 2, 30, 3, 0, 1, 0, 31, 31, -1, 18, 2, 0, 3, 1, 4, 1, 5, 0, 6, 2, 7, 3, 8, 4, 32, 13, 33, 0, 34, 2, 35, 10, 36, 10, 37, 7, 38, 7, 39, 12, 40, 14, 41, 10, 42, 15, 0, 1, 0, 43, 43, -1, 9, 2, 0, 3, 1, 4, 1, 5, 0, 6, 2, 7, 3, 8, 4, 44, 12, 45, 16, 0 + -1, -1, 1, 0, -1, 13, 2, 0, 3, 1, 4, 2, 5, 2, 6, 3, 7, 4, 8, 5, 9, 6, 10, 1, 11, 7, 12, 8, 13, 3, 14, 2, 0, 0, 0, 16, 15, -1, 20, 2, 0, 3, 1, 4, 2, 5, 2, 6, 9, 7, 4, 8, 5, 9, 6, 10, 1, 17, 6, 18, 10, 19, 11, 20, 12, 21, 13, 22, 14, 23, 15, 24, 2, 25, 4, 26, 15, 27, 16, 0 "conns" diff --git a/demos/2d/platformer/stage.xml b/demos/2d/platformer/stage.xml index e2943d8fcf6..35517f747db 100644 --- a/demos/2d/platformer/stage.xml +++ b/demos/2d/platformer/stage.xml @@ -1,17 +1,17 @@ - - + + + - - + "names" - + "stage" "Node" "_import_path" @@ -21,16 +21,18 @@ "visibility/visible" "visibility/opacity" "visibility/self_opacity" - "visibility/behind_parent" "transform/pos" "transform/rot" "transform/scale" + "z/z" + "z/relative" "mode" "tile_set" "cell/size" "cell/quadrant_size" "cell/custom_transform" "cell/half_offset" + "collision/body_mode" "collision/friction" "collision/bounce" "collision/layers" @@ -167,11 +169,11 @@ "pixel_snap" False "zoom" - 0.54036 + 0.814506 "use_snap" False "ofs" - -177.089, 415.221 + -121.031, 464.121 "snap" 10 @@ -276,22 +278,21 @@ 0 "__editor_plugin_screen__" - "Script" + "2D" True 1 - False 0, 0 0 1, 1 0 64, 64 - 16 + 8 1, 0, 0, 1, 0, 0 2 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, 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, 536870925, 1048587, 13, 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, 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, 536870918, 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 + 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, 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, 536870925, 1048587, 13, 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, 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 @@ -482,6 +483,12 @@ "3D" + "deflight_rot_y" + 0.628319 + "zfar" + 500 + "fov" + 45 "viewports" @@ -549,12 +556,6 @@ 0, 0, 0 - "zfar" - 500 - "deflight_rot_y" - 0.628319 - "fov" - 45 "default_light" True "viewport_mode" @@ -805,6 +806,7 @@ "2D" + False 2 834.664, 1309.6 @@ -998,7 +1000,7 @@ -1 "nodes" - -1, -1, 1, 0, -1, 2, 2, 0, 3, 1, 0, 0, 0, 5, 4, -1, 19, 2, 0, 6, 2, 7, 3, 8, 3, 9, 4, 10, 5, 11, 6, 12, 7, 13, 8, 14, 9, 15, 10, 16, 11, 17, 12, 18, 13, 19, 3, 20, 6, 21, 14, 22, 15, 3, 16, 0, 0, 0, 1, 23, -1, 2, 2, 0, 3, 17, 0, 2, 0, 25, 24, 18, 3, 2, 0, 10, 19, 3, 20, 0, 2, 0, 25, 26, 18, 3, 2, 0, 10, 21, 3, 20, 0, 2, 0, 25, 27, 18, 3, 2, 0, 10, 22, 3, 20, 0, 2, 0, 25, 28, 18, 3, 2, 0, 10, 23, 3, 20, 0, 2, 0, 25, 29, 18, 3, 2, 0, 10, 24, 3, 20, 0, 2, 0, 25, 30, 18, 3, 2, 0, 10, 25, 3, 20, 0, 2, 0, 25, 31, 18, 3, 2, 0, 10, 26, 3, 20, 0, 2, 0, 25, 32, 18, 3, 2, 0, 10, 27, 3, 20, 0, 2, 0, 25, 33, 18, 3, 2, 0, 10, 28, 3, 20, 0, 2, 0, 25, 34, 18, 3, 2, 0, 10, 29, 3, 20, 0, 2, 0, 25, 35, 18, 3, 2, 0, 10, 30, 3, 20, 0, 2, 0, 25, 36, 18, 3, 2, 0, 10, 31, 3, 20, 0, 2, 0, 25, 37, 18, 3, 2, 0, 10, 32, 3, 20, 0, 2, 0, 25, 38, 18, 3, 2, 0, 10, 33, 3, 20, 0, 2, 0, 25, 39, 18, 3, 2, 0, 10, 34, 3, 20, 0, 2, 0, 25, 40, 18, 3, 2, 0, 10, 35, 3, 20, 0, 2, 0, 25, 41, 18, 3, 2, 0, 10, 36, 3, 20, 0, 2, 0, 25, 42, 18, 3, 2, 0, 10, 37, 3, 20, 0, 2, 0, 25, 43, 18, 3, 2, 0, 10, 38, 3, 20, 0, 2, 0, 25, 44, 18, 3, 2, 0, 10, 39, 3, 20, 0, 2, 0, 25, 45, 18, 3, 2, 0, 10, 40, 3, 20, 0, 2, 0, 25, 46, 18, 3, 2, 0, 10, 41, 3, 20, 0, 2, 0, 25, 47, 18, 3, 2, 0, 10, 42, 3, 20, 0, 2, 0, 25, 48, 18, 3, 2, 0, 10, 43, 3, 20, 0, 2, 0, 25, 49, 18, 3, 2, 0, 10, 44, 3, 20, 0, 2, 0, 25, 50, 18, 3, 2, 0, 10, 45, 3, 20, 0, 2, 0, 25, 51, 18, 3, 2, 0, 10, 46, 3, 20, 0, 2, 0, 25, 52, 18, 3, 2, 0, 10, 47, 3, 20, 0, 2, 0, 25, 53, 18, 3, 2, 0, 10, 48, 3, 20, 0, 2, 0, 25, 54, 18, 3, 2, 0, 10, 49, 3, 20, 0, 2, 0, 25, 55, 18, 3, 2, 0, 10, 50, 3, 20, 0, 2, 0, 25, 56, 18, 3, 2, 0, 10, 51, 3, 20, 0, 2, 0, 25, 57, 18, 3, 2, 0, 10, 52, 3, 20, 0, 2, 0, 25, 58, 18, 3, 2, 0, 10, 53, 3, 20, 0, 2, 0, 25, 59, 18, 3, 2, 0, 10, 54, 3, 20, 0, 2, 0, 25, 60, 18, 3, 2, 0, 10, 55, 3, 20, 0, 2, 0, 25, 61, 18, 3, 2, 0, 10, 56, 3, 20, 0, 2, 0, 25, 62, 18, 3, 2, 0, 10, 57, 3, 20, 0, 2, 0, 25, 63, 18, 3, 2, 0, 10, 58, 3, 20, 0, 2, 0, 25, 64, 18, 3, 2, 0, 10, 59, 3, 20, 0, 2, 0, 25, 65, 18, 3, 2, 0, 10, 60, 3, 20, 0, 2, 0, 25, 66, 18, 3, 2, 0, 10, 61, 3, 20, 0, 0, 0, 68, 67, 62, 3, 2, 0, 10, 63, 3, 64, 0, 0, 0, 1, 69, -1, 1, 2, 0, 0, 46, 0, 71, 70, 65, 5, 2, 0, 10, 66, 3, 67, 72, 68, 73, 69, 0, 46, 0, 71, 74, 65, 5, 2, 0, 10, 70, 3, 67, 72, 71, 73, 72, 0, 46, 0, 71, 75, 65, 5, 2, 0, 10, 73, 3, 67, 72, 74, 73, 72, 0, 46, 0, 71, 76, 75, 3, 2, 0, 10, 76, 3, 77, 0, 0, 0, 78, 77, -1, 7, 2, 0, 79, 78, 80, 4, 81, 2, 82, 79, 83, 2, 84, 4, 0, 0, 0, 1, 85, -1, 1, 2, 0, 0, 52, 0, 68, 86, 80, 3, 2, 0, 10, 81, 3, 82, 0, 52, 0, 68, 87, 80, 3, 2, 0, 10, 83, 3, 82, 0, 52, 0, 68, 88, 80, 3, 2, 0, 10, 84, 3, 82, 0, 52, 0, 68, 89, 80, 3, 2, 0, 10, 85, 3, 82, 0, 52, 0, 68, 90, 80, 3, 2, 0, 10, 86, 3, 82, 0, 52, 0, 68, 91, 80, 3, 2, 0, 10, 87, 3, 82, 0, 52, 0, 68, 92, 80, 3, 2, 0, 10, 88, 3, 82, 0, 52, 0, 68, 93, 80, 3, 2, 0, 10, 89, 3, 82, 0, 52, 0, 68, 94, 80, 3, 2, 0, 10, 90, 3, 82, 0, 52, 0, 68, 95, 80, 3, 2, 0, 10, 91, 3, 82, 0, 52, 0, 68, 96, 80, 3, 2, 0, 10, 92, 3, 82, 0, 0, 0, 98, 97, 93, 2, 2, 0, 3, 94, 0, 0, 0, 99, 99, -1, 30, 2, 0, 6, 2, 7, 3, 8, 3, 9, 4, 100, 95, 101, 96, 102, 97, 103, 98, 104, 0, 105, 0, 106, 0, 107, 0, 108, 2, 109, 2, 110, 13, 111, 3, 112, 6, 113, 99, 114, 3, 115, 100, 116, 6, 117, 4, 118, 4, 119, 101, 120, 8, 121, 8, 122, 2, 123, 4, 124, 102, 0 + -1, -1, 1, 0, -1, 2, 2, 0, 3, 1, 0, 0, 0, 5, 4, -1, 21, 2, 0, 6, 2, 7, 3, 8, 3, 9, 4, 10, 5, 11, 6, 12, 7, 13, 2, 14, 7, 15, 8, 16, 9, 17, 10, 18, 11, 19, 12, 20, 7, 21, 3, 22, 5, 23, 13, 24, 14, 3, 15, 0, 0, 0, 1, 25, -1, 2, 2, 0, 3, 16, 0, 2, 0, 27, 26, 17, 3, 2, 0, 9, 18, 3, 19, 0, 2, 0, 27, 28, 17, 3, 2, 0, 9, 20, 3, 19, 0, 2, 0, 27, 29, 17, 3, 2, 0, 9, 21, 3, 19, 0, 2, 0, 27, 30, 17, 3, 2, 0, 9, 22, 3, 19, 0, 2, 0, 27, 31, 17, 3, 2, 0, 9, 23, 3, 19, 0, 2, 0, 27, 32, 17, 3, 2, 0, 9, 24, 3, 19, 0, 2, 0, 27, 33, 17, 3, 2, 0, 9, 25, 3, 19, 0, 2, 0, 27, 34, 17, 3, 2, 0, 9, 26, 3, 19, 0, 2, 0, 27, 35, 17, 3, 2, 0, 9, 27, 3, 19, 0, 2, 0, 27, 36, 17, 3, 2, 0, 9, 28, 3, 19, 0, 2, 0, 27, 37, 17, 3, 2, 0, 9, 29, 3, 19, 0, 2, 0, 27, 38, 17, 3, 2, 0, 9, 30, 3, 19, 0, 2, 0, 27, 39, 17, 3, 2, 0, 9, 31, 3, 19, 0, 2, 0, 27, 40, 17, 3, 2, 0, 9, 32, 3, 19, 0, 2, 0, 27, 41, 17, 3, 2, 0, 9, 33, 3, 19, 0, 2, 0, 27, 42, 17, 3, 2, 0, 9, 34, 3, 19, 0, 2, 0, 27, 43, 17, 3, 2, 0, 9, 35, 3, 19, 0, 2, 0, 27, 44, 17, 3, 2, 0, 9, 36, 3, 19, 0, 2, 0, 27, 45, 17, 3, 2, 0, 9, 37, 3, 19, 0, 2, 0, 27, 46, 17, 3, 2, 0, 9, 38, 3, 19, 0, 2, 0, 27, 47, 17, 3, 2, 0, 9, 39, 3, 19, 0, 2, 0, 27, 48, 17, 3, 2, 0, 9, 40, 3, 19, 0, 2, 0, 27, 49, 17, 3, 2, 0, 9, 41, 3, 19, 0, 2, 0, 27, 50, 17, 3, 2, 0, 9, 42, 3, 19, 0, 2, 0, 27, 51, 17, 3, 2, 0, 9, 43, 3, 19, 0, 2, 0, 27, 52, 17, 3, 2, 0, 9, 44, 3, 19, 0, 2, 0, 27, 53, 17, 3, 2, 0, 9, 45, 3, 19, 0, 2, 0, 27, 54, 17, 3, 2, 0, 9, 46, 3, 19, 0, 2, 0, 27, 55, 17, 3, 2, 0, 9, 47, 3, 19, 0, 2, 0, 27, 56, 17, 3, 2, 0, 9, 48, 3, 19, 0, 2, 0, 27, 57, 17, 3, 2, 0, 9, 49, 3, 19, 0, 2, 0, 27, 58, 17, 3, 2, 0, 9, 50, 3, 19, 0, 2, 0, 27, 59, 17, 3, 2, 0, 9, 51, 3, 19, 0, 2, 0, 27, 60, 17, 3, 2, 0, 9, 52, 3, 19, 0, 2, 0, 27, 61, 17, 3, 2, 0, 9, 53, 3, 19, 0, 2, 0, 27, 62, 17, 3, 2, 0, 9, 54, 3, 19, 0, 2, 0, 27, 63, 17, 3, 2, 0, 9, 55, 3, 19, 0, 2, 0, 27, 64, 17, 3, 2, 0, 9, 56, 3, 19, 0, 2, 0, 27, 65, 17, 3, 2, 0, 9, 57, 3, 19, 0, 2, 0, 27, 66, 17, 3, 2, 0, 9, 58, 3, 19, 0, 2, 0, 27, 67, 17, 3, 2, 0, 9, 59, 3, 19, 0, 2, 0, 27, 68, 17, 3, 2, 0, 9, 60, 3, 19, 0, 0, 0, 70, 69, 61, 3, 2, 0, 9, 62, 3, 63, 0, 0, 0, 1, 71, -1, 1, 2, 0, 0, 46, 0, 73, 72, 64, 5, 2, 0, 9, 65, 3, 66, 74, 67, 75, 68, 0, 46, 0, 73, 76, 64, 5, 2, 0, 9, 69, 3, 66, 74, 70, 75, 71, 0, 46, 0, 73, 77, 64, 5, 2, 0, 9, 72, 3, 66, 74, 73, 75, 71, 0, 46, 0, 73, 78, 74, 3, 2, 0, 9, 75, 3, 76, 0, 0, 0, 80, 79, -1, 7, 2, 0, 81, 77, 82, 78, 83, 2, 84, 79, 85, 2, 86, 78, 0, 0, 0, 1, 87, -1, 1, 2, 0, 0, 52, 0, 70, 88, 80, 3, 2, 0, 9, 81, 3, 82, 0, 52, 0, 70, 89, 80, 3, 2, 0, 9, 83, 3, 82, 0, 52, 0, 70, 90, 80, 3, 2, 0, 9, 84, 3, 82, 0, 52, 0, 70, 91, 80, 3, 2, 0, 9, 85, 3, 82, 0, 52, 0, 70, 92, 80, 3, 2, 0, 9, 86, 3, 82, 0, 52, 0, 70, 93, 80, 3, 2, 0, 9, 87, 3, 82, 0, 52, 0, 70, 94, 80, 3, 2, 0, 9, 88, 3, 82, 0, 52, 0, 70, 95, 80, 3, 2, 0, 9, 89, 3, 82, 0, 52, 0, 70, 96, 80, 3, 2, 0, 9, 90, 3, 82, 0, 52, 0, 70, 97, 80, 3, 2, 0, 9, 91, 3, 82, 0, 52, 0, 70, 98, 80, 3, 2, 0, 9, 92, 3, 82, 0, 0, 0, 100, 99, 93, 2, 2, 0, 3, 94, 0, 0, 0, 101, 101, -1, 29, 2, 0, 6, 2, 7, 3, 8, 3, 102, 95, 103, 96, 104, 97, 105, 98, 106, 0, 107, 0, 108, 0, 109, 0, 110, 2, 111, 2, 112, 12, 113, 3, 114, 5, 115, 99, 116, 3, 117, 100, 118, 5, 119, 78, 120, 78, 121, 101, 122, 7, 123, 7, 124, 2, 125, 78, 126, 102, 0 "conns" diff --git a/demos/2d/platformer/tiles_demo.png b/demos/2d/platformer/tiles_demo.png index a7a5000906e746f5dea30f6439ab316b5e77163e..bc738e6d387d09cbe98f456228bb126d07f03650 100644 GIT binary patch literal 10066 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 diff --git a/demos/2d/platformer/tileset.xml b/demos/2d/platformer/tileset.xml index 2e4ecc8c046..d8f9a651ee8 100644 --- a/demos/2d/platformer/tileset.xml +++ b/demos/2d/platformer/tileset.xml @@ -1,134 +1,191 @@ - + - - "" - 0 - 0, 8, 64, 8, 64, 64, 0, 64 - - - "" 0 - 0, 64, 0, 8, 56, 8, 56, 64 - + -32, -24, 32, -24, 32, 32, -32, 32 + - "" 0 - 0, 64, 0, 0, 56, 0, 56, 64 - + -32, 32, -32, -24, 24, -24, 24, 32 + - "" 0 - 0, 64, 0, 0, 56, 0, 56, 64 - + -32, 32, -32, -32, 24, -32, 24, 32 + - "" 0 - 0, 64, 0, 0, 56, 0, 64, 8, 64, 64 - + -64, 32, -64, -32, -8, -32, -8, 32 + - "" 0 - 0, 64, 0, 8, 64, 8, 64, 64 - + -32, 32, -32, -32, 24, -32, 32, -24, 32, 32 + - "" 0 - 0, 64, 0, 8, 64, 8, 64, 64 - + -32, 32, -32, -24, 32, -24, 32, 32 + - "" 0 - 0, 0, 64, 0, 64, 64, 0, 64 - + -32, 32, -32, -24, 32, -24, 32, 32 + - "" 0 - 0, 8, 64, 72, 64, 128, 0, 128 - + -32, -32, 32, -32, 32, 32, -32, 32 + - "" 0 - 0, 64, 0, 0, 56, 0, 56, 64 - + -32, -56, 32, 8, 32, 64, -32, 64 + + + + 0 + -32, 32, -32, -32, 24, -32, 24, 32 + + + + 0 + -32, -24, 32, -24, 32, 24, -32, 24 + + + + 0 + -32, -24, 24, -24, 24, 24, -32, 24 + - "" "floor" - 0, 0 + 0, 0 + 32, 32 0, 0, 64, 64 - + + + "edge" - 0, 0 + 0, 0 + 32, 32 64, 0, 64, 64 - + + + "wall" - 0, 0 + 0, 0 + 32, 32 64, 64, 64, 64 - + + + "wall_deco" - 0, 0 + 0, 0 + 64, 32 320, 128, 128, 64 - + + + "corner" - 0, 0 + 0, 0 + 32, 32 64, 128, 64, 64 - + + + "flowers" - 0, 0 + 0, 0 + 32, 32 192, 192, 64, 64 - + + + "tree_base" - 0, 0 + 0, 0 + 32, 32 256, 192, 64, 64 - + + + "tree_mid" - 0, 0 + 0, 0 + 0, 0 256, 128, 64, 64 - "tree_mid 2" + + + "tree_mid 2" - 0, 0 + 0, 0 + 0, 0 256, 64, 64, 64 - "tree_top" + + + "tree_top" - 0, 0 + 0, 0 + 0, 0 256, 0, 64, 64 - "solid" + + + "solid" - 0, 0 + 0, 0 + 0, 0 0, 64, 64, 64 - "ceiling" + + + "ceiling" - 0, 0 + 0, 0 + 32, 32 384, 64, 64, 64 - + + + "ramp" - 0, 0 + 0, 0 + 32, 64 128, 128, 64, 128 - + + + "ceiling2wall" - 0, 0 + 0, 0 + 32, 32 448, 64, 64, 64 - - + + + + "platform_floor" + + 0, 0 + 32, 32 + 128, 0, 64, 64 + + + + "platform_edge" + + 0, 0 + 32, 32 + 192, 0, 64, 64 + + + + \ No newline at end of file diff --git a/demos/2d/platformer/tileset_edit.xml b/demos/2d/platformer/tileset_edit.xml index 2473656a6a0..db289433aba 100644 --- a/demos/2d/platformer/tileset_edit.xml +++ b/demos/2d/platformer/tileset_edit.xml @@ -1,71 +1,83 @@ - + 0 - 0, 8, 64, 8, 64, 64, 0, 64 + -32, -24, 32, -24, 32, 32, -32, 32 0 - 0, 64, 0, 8, 56, 8, 56, 64 + -32, 32, -32, -24, 24, -24, 24, 32 0 - 0, 64, 0, 0, 56, 0, 56, 64 + -32, 32, -32, -32, 24, -32, 24, 32 0 - 0, 64, 0, 0, 56, 0, 56, 64 + -64, 32, -64, -32, -8, -32, -8, 32 0 - 0, 64, 0, 0, 56, 0, 64, 8, 64, 64 + -32, 32, -32, -32, 24, -32, 32, -24, 32, 32 0 - 0, 8, 64, 72, 64, 128, 0, 128 + -32, 32, -32, -24, 32, -24, 32, 32 0 - 0, 64, 0, 8, 64, 8, 64, 64 + -32, 32, -32, -24, 32, -24, 32, 32 0 - 0, 64, 0, 8, 64, 8, 64, 64 + -32, -32, 32, -32, 32, 32, -32, 32 0 - 0, 0, 64, 0, 64, 64, 0, 64 + -32, -56, 32, 8, 32, 64, -32, 64 0 - 0, 64, 0, 0, 56, 0, 56, 64 + -32, 32, -32, -32, 24, -32, 24, 32 + + + + 0 + -32, -24, 32, -24, 32, 24, -32, 24 + + + + 0 + -32, -24, 24, -24, 24, 24, -32, 24 "names" - + "Node" + "_import_path" "__meta__" "floor" "Sprite" "visibility/visible" "visibility/opacity" "visibility/self_opacity" - "visibility/behind_parent" "transform/pos" "transform/rot" "transform/scale" + "z/z" + "z/relative" "texture" "centered" "offset" @@ -83,6 +95,7 @@ "shapes/0/shape" "shapes/0/transform" "shapes/0/trigger" + "layers" "constant_linear_velocity" "constant_angular_velocity" "friction" @@ -90,11 +103,11 @@ "CollisionPolygon2D" "build_mode" "polygon" + "trigger" "edge" "wall" "wall_deco" "corner" - "ramp" "flowers" "tree_base" "tree_mid" @@ -102,13 +115,10 @@ "tree_top" "solid" "ceiling" + "ramp" "ceiling2wall" "help" "Label" - "margin/left" - "margin/top" - "margin/right" - "margin/bottom" "focus_neighbour/left" "focus_neighbour/top" "focus_neighbour/right" @@ -130,29 +140,38 @@ "autowrap" "uppercase" "percent_visible" + "platform_floor" + "platform_edge" "version" 1 "conn_count" 0 "node_count" - 36 + 42 "variants" - + + "" "__editor_plugin_states__" "2D" "pixel_snap" - False + True "zoom" - 1.670182 + 1.670183 + "use_snap" + True "ofs" - -58.9115, 60.1605 + -446.534, -87.6905 + "snap" + 8 "3D" + "deflight_rot_y" + 0.628319 "zfar" 500 "fov" @@ -166,10 +185,12 @@ 0 "y_rot" 0 - "use_orthogonal" - False + "listener" + True "use_environment" False + "use_orthogonal" + False "pos" 0, 0, 0 @@ -180,10 +201,12 @@ 0 "y_rot" 0 - "use_orthogonal" + "listener" False "use_environment" False + "use_orthogonal" + False "pos" 0, 0, 0 @@ -194,10 +217,12 @@ 0 "y_rot" 0 - "use_orthogonal" + "listener" False "use_environment" False + "use_orthogonal" + False "pos" 0, 0, 0 @@ -208,10 +233,12 @@ 0 "y_rot" 0 - "use_orthogonal" + "listener" False "use_environment" False + "use_orthogonal" + False "pos" 0, 0, 0 @@ -220,12 +247,18 @@ 1 "default_light" True + "ambient_light_color" + 0.15, 0.15, 0.15, 1 "show_grid" True "show_origin" True "znear" 0.1 + "default_srgb" + False + "deflight_rot_x" + 0.942478 "__editor_run_settings__" @@ -239,45 +272,42 @@ "2D" True - - + 1 0, 0 - + 0 1, 1 + 0 + False 1 - 1, 1, 1, 1 0, 0, 64, 64 1, -0, 0, 1, 0, 0 - 64, 8, 64, 64, 0, 64, 0, 8 + 32, -24, 32, 32, -32, 32, -32, -24 64, 0 64, 0, 64, 64 - 0, 8, 56, 8, 56, 64, 0, 64 + -32, -24, 24, -24, 24, 32, -32, 32 64, 64 64, 64, 64, 64 - 0, 0, 56, 0, 56, 64, 0, 64 - 64, 128 + -32, -32, 24, -32, 24, 32, -32, 32 + 96, 128 320, 128, 128, 64 + -64, -32, -8, -32, -8, 32, -64, 32 64, 192 64, 128, 64, 64 - 0, 0, 56, 0, 64, 8, 64, 64, 0, 64 - 256, 192 - 128, 128, 64, 128 - - 0, 8, 64, 72, 64, 128, 0, 128 + -32, -32, 24, -32, 32, -24, 32, 32, -32, 32 128, 192 192, 192, 64, 64 - - 0, 64, 64, 64, 64, 8, 0, 8 + + -32, 32, 32, 32, 32, -24, -32, -24 192, 192 256, 192, 64, 64 - + 192, 128 256, 128, 64, 64 192, 64 @@ -288,23 +318,29 @@ 0, 64, 64, 64 0, 128 384, 64, 64, 64 + + 32, -32, 32, 32, -32, 32, -32, -32 + 256, 224 + 128, 128, 64, 128 - 64, 0, 64, 64, 0, 64, 0, 0 + -32, -56, 32, 8, 32, 64, -32, 64 0, 192 448, 64, 64, 64 - - - - - 2 - - "This scene serves as a tool for editing the tileset. Nodes (sprites) and their respective collisions are edited here. To create a tileset from this, a "TileSet" resoucre must be created. Use the helper in: Scene -< Convert To -< TileSet This will save a tileset. Saving over it will merge your changes. Finally, the saved tileset resource (tileset.xml in this case), can be opened to be used into a TileMap node for editing a tile map. " + "This scene serves as a tool for editing the tileset. Nodes (sprites) and their respective collisions are edited here. To create a tileset from this, a "TileSet" resoucre must be created. Use the helper in: Scene -< Convert To -< TileSet This will save a tileset. Saving over it will merge your changes. Finally, the saved tileset resource (tileset.xml in this case), can be opened to be used into a TileMap node for editing a tile map. " -1 + 0, 256 + 128, 0, 64, 64 + + 32, -24, 32, 24, -32, 24, -32, -24 + 64, 256 + 192, 0, 64, 64 + + 24, -24, 24, 24, -32, 24, -32, -24 "nodes" - -1, -1, 0, 0, -1, 1, 1, 0, 0, 0, 0, 3, 2, -1, 18, 4, 1, 5, 2, 6, 2, 7, 3, 8, 4, 9, 5, 10, 6, 11, 7, 12, 3, 13, 4, 14, 3, 15, 3, 16, 8, 17, 8, 18, 9, 19, 10, 20, 1, 21, 11, 0, 1, 0, 23, 22, -1, 15, 4, 1, 5, 2, 6, 2, 7, 3, 8, 4, 9, 5, 10, 6, 24, 8, 25, 12, 26, 13, 27, 3, 28, 4, 29, 5, 30, 2, 31, 5, 0, 2, 0, 32, 32, -1, 9, 4, 1, 5, 2, 6, 2, 7, 3, 8, 4, 9, 5, 10, 6, 33, 9, 34, 14, 0, 0, 0, 3, 35, -1, 18, 4, 1, 5, 2, 6, 2, 7, 3, 8, 15, 9, 5, 10, 6, 11, 7, 12, 3, 13, 4, 14, 3, 15, 3, 16, 8, 17, 8, 18, 9, 19, 10, 20, 1, 21, 16, 0, 4, 0, 23, 22, -1, 15, 4, 1, 5, 2, 6, 2, 7, 3, 8, 4, 9, 5, 10, 6, 24, 8, 25, 17, 26, 13, 27, 3, 28, 4, 29, 5, 30, 2, 31, 5, 0, 5, 0, 32, 32, -1, 9, 4, 1, 5, 2, 6, 2, 7, 3, 8, 4, 9, 5, 10, 6, 33, 9, 34, 18, 0, 0, 0, 3, 36, -1, 18, 4, 1, 5, 2, 6, 2, 7, 3, 8, 19, 9, 5, 10, 6, 11, 7, 12, 3, 13, 4, 14, 3, 15, 3, 16, 8, 17, 8, 18, 9, 19, 10, 20, 1, 21, 20, 0, 7, 0, 23, 22, -1, 15, 4, 1, 5, 2, 6, 2, 7, 3, 8, 4, 9, 5, 10, 6, 24, 8, 25, 21, 26, 13, 27, 3, 28, 4, 29, 5, 30, 2, 31, 5, 0, 8, 0, 32, 32, -1, 9, 4, 1, 5, 2, 6, 2, 7, 3, 8, 4, 9, 5, 10, 6, 33, 9, 34, 22, 0, 0, 0, 3, 37, -1, 18, 4, 1, 5, 2, 6, 2, 7, 3, 8, 23, 9, 5, 10, 6, 11, 7, 12, 3, 13, 4, 14, 3, 15, 3, 16, 8, 17, 8, 18, 9, 19, 10, 20, 1, 21, 24, 0, 10, 0, 23, 22, -1, 15, 4, 1, 5, 2, 6, 2, 7, 3, 8, 4, 9, 5, 10, 6, 24, 8, 25, 25, 26, 13, 27, 3, 28, 4, 29, 5, 30, 2, 31, 5, 0, 11, 0, 32, 32, -1, 9, 4, 1, 5, 2, 6, 2, 7, 3, 8, 4, 9, 5, 10, 6, 33, 9, 34, 22, 0, 0, 0, 3, 38, -1, 18, 4, 1, 5, 2, 6, 2, 7, 3, 8, 26, 9, 5, 10, 6, 11, 7, 12, 3, 13, 4, 14, 3, 15, 3, 16, 8, 17, 8, 18, 9, 19, 10, 20, 1, 21, 27, 0, 13, 0, 23, 22, -1, 15, 4, 1, 5, 2, 6, 2, 7, 3, 8, 4, 9, 5, 10, 6, 24, 8, 25, 28, 26, 13, 27, 3, 28, 4, 29, 5, 30, 2, 31, 5, 0, 14, 0, 32, 32, -1, 9, 4, 1, 5, 2, 6, 2, 7, 3, 8, 4, 9, 5, 10, 6, 33, 9, 34, 29, 0, 0, 0, 3, 39, -1, 18, 4, 1, 5, 2, 6, 2, 7, 3, 8, 30, 9, 5, 10, 6, 11, 7, 12, 3, 13, 4, 14, 3, 15, 3, 16, 8, 17, 8, 18, 9, 19, 10, 20, 1, 21, 31, 0, 16, 0, 23, 22, -1, 15, 4, 1, 5, 2, 6, 2, 7, 3, 8, 4, 9, 5, 10, 6, 24, 8, 25, 32, 26, 13, 27, 3, 28, 4, 29, 5, 30, 2, 31, 5, 0, 17, 0, 32, 32, -1, 9, 4, 1, 5, 2, 6, 2, 7, 3, 8, 4, 9, 5, 10, 6, 33, 9, 34, 33, 0, 0, 0, 3, 40, -1, 18, 4, 1, 5, 2, 6, 2, 7, 3, 8, 34, 9, 5, 10, 6, 11, 7, 12, 3, 13, 4, 14, 3, 15, 3, 16, 8, 17, 8, 18, 9, 19, 10, 20, 1, 21, 35, 0, 19, 0, 23, 22, -1, 15, 4, 1, 5, 2, 6, 2, 7, 3, 8, 4, 9, 5, 10, 6, 24, 8, 25, 36, 26, 13, 27, 3, 28, 4, 29, 5, 30, 2, 31, 5, 0, 20, 0, 32, 32, -1, 9, 4, 1, 5, 2, 6, 2, 7, 3, 8, 4, 9, 5, 10, 6, 33, 9, 34, 37, 0, 0, 0, 3, 41, -1, 18, 4, 1, 5, 2, 6, 2, 7, 3, 8, 38, 9, 5, 10, 6, 11, 7, 12, 3, 13, 4, 14, 3, 15, 3, 16, 8, 17, 8, 18, 9, 19, 10, 20, 1, 21, 39, 0, 22, 0, 23, 22, -1, 15, 4, 1, 5, 2, 6, 2, 7, 3, 8, 4, 9, 5, 10, 6, 24, 8, 25, 40, 26, 13, 27, 3, 28, 4, 29, 5, 30, 2, 31, 5, 0, 23, 0, 32, 32, -1, 9, 4, 1, 5, 2, 6, 2, 7, 3, 8, 4, 9, 5, 10, 6, 33, 9, 34, 37, 0, 0, 0, 3, 42, -1, 18, 4, 1, 5, 2, 6, 2, 7, 3, 8, 41, 9, 5, 10, 6, 11, 7, 12, 3, 13, 4, 14, 3, 15, 3, 16, 8, 17, 8, 18, 9, 19, 10, 20, 1, 21, 42, 0, 0, 0, 3, 43, -1, 18, 4, 1, 5, 2, 6, 2, 7, 3, 8, 43, 9, 5, 10, 6, 11, 7, 12, 3, 13, 4, 14, 3, 15, 3, 16, 8, 17, 8, 18, 9, 19, 10, 20, 1, 21, 44, 0, 0, 0, 3, 44, -1, 18, 4, 1, 5, 2, 6, 2, 7, 3, 8, 45, 9, 5, 10, 6, 11, 7, 12, 3, 13, 4, 14, 3, 15, 3, 16, 8, 17, 8, 18, 9, 19, 10, 20, 1, 21, 46, 0, 0, 0, 3, 45, -1, 18, 4, 1, 5, 2, 6, 2, 7, 3, 8, 47, 9, 5, 10, 6, 11, 7, 12, 3, 13, 4, 14, 3, 15, 3, 16, 8, 17, 8, 18, 9, 19, 10, 20, 1, 21, 48, 0, 0, 0, 3, 46, -1, 18, 4, 1, 5, 2, 6, 2, 7, 3, 8, 49, 9, 5, 10, 6, 11, 7, 12, 3, 13, 4, 14, 3, 15, 3, 16, 8, 17, 8, 18, 9, 19, 10, 20, 1, 21, 50, 0, 29, 0, 23, 22, -1, 15, 4, 1, 5, 2, 6, 2, 7, 3, 8, 4, 9, 5, 10, 6, 24, 8, 25, 51, 26, 13, 27, 3, 28, 4, 29, 5, 30, 2, 31, 5, 0, 30, 0, 32, 32, -1, 9, 4, 1, 5, 2, 6, 2, 7, 3, 8, 4, 9, 5, 10, 6, 33, 9, 34, 52, 0, 0, 0, 3, 47, -1, 18, 4, 1, 5, 2, 6, 2, 7, 3, 8, 53, 9, 5, 10, 6, 11, 7, 12, 3, 13, 4, 14, 3, 15, 3, 16, 8, 17, 8, 18, 9, 19, 10, 20, 1, 21, 54, 0, 32, 0, 23, 22, -1, 15, 4, 1, 5, 2, 6, 2, 7, 3, 8, 4, 9, 5, 10, 6, 24, 8, 25, 55, 26, 13, 27, 3, 28, 4, 29, 5, 30, 2, 31, 5, 0, 33, 0, 32, 32, -1, 9, 4, 1, 5, 2, 6, 2, 7, 3, 8, 4, 9, 5, 10, 6, 33, 9, 34, 22, 0, 0, 0, 49, 48, -1, 29, 4, 1, 5, 2, 6, 2, 7, 3, 50, 56, 51, 57, 52, 58, 53, 59, 54, 60, 55, 60, 56, 60, 57, 60, 58, 1, 59, 1, 60, 61, 61, 2, 62, 5, 63, 62, 64, 2, 65, 62, 66, 5, 67, 3, 68, 3, 69, 63, 70, 9, 71, 9, 72, 3, 73, 3, 74, 64, 0 + -1, -1, 0, 0, -1, 2, 1, 0, 2, 1, 0, 0, 0, 4, 3, -1, 20, 1, 0, 5, 2, 6, 3, 7, 3, 8, 4, 9, 5, 10, 6, 11, 7, 12, 2, 13, 8, 14, 2, 15, 4, 16, 9, 17, 9, 18, 10, 19, 10, 20, 7, 21, 11, 22, 2, 23, 12, 0, 1, 0, 25, 24, -1, 18, 1, 0, 5, 2, 6, 3, 7, 3, 8, 4, 9, 5, 10, 6, 11, 7, 12, 2, 26, 10, 27, 13, 28, 14, 29, 9, 30, 10, 31, 4, 32, 5, 33, 3, 34, 5, 0, 2, 0, 35, 35, -1, 12, 1, 0, 5, 2, 6, 3, 7, 3, 8, 4, 9, 5, 10, 6, 11, 7, 12, 2, 36, 7, 37, 15, 38, 9, 0, 0, 0, 4, 39, -1, 20, 1, 0, 5, 2, 6, 3, 7, 3, 8, 16, 9, 5, 10, 6, 11, 7, 12, 2, 13, 8, 14, 2, 15, 4, 16, 9, 17, 9, 18, 10, 19, 10, 20, 7, 21, 11, 22, 2, 23, 17, 0, 4, 0, 25, 24, -1, 18, 1, 0, 5, 2, 6, 3, 7, 3, 8, 4, 9, 5, 10, 6, 11, 7, 12, 2, 26, 10, 27, 18, 28, 14, 29, 9, 30, 10, 31, 4, 32, 5, 33, 3, 34, 5, 0, 5, 0, 35, 35, -1, 12, 1, 0, 5, 2, 6, 3, 7, 3, 8, 4, 9, 5, 10, 6, 11, 7, 12, 2, 36, 7, 37, 19, 38, 9, 0, 0, 0, 4, 40, -1, 20, 1, 0, 5, 2, 6, 3, 7, 3, 8, 20, 9, 5, 10, 6, 11, 7, 12, 2, 13, 8, 14, 2, 15, 4, 16, 9, 17, 9, 18, 10, 19, 10, 20, 7, 21, 11, 22, 2, 23, 21, 0, 7, 0, 25, 24, -1, 18, 1, 0, 5, 2, 6, 3, 7, 3, 8, 4, 9, 5, 10, 6, 11, 7, 12, 2, 26, 10, 27, 22, 28, 14, 29, 9, 30, 10, 31, 4, 32, 5, 33, 3, 34, 5, 0, 8, 0, 35, 35, -1, 12, 1, 0, 5, 2, 6, 3, 7, 3, 8, 4, 9, 5, 10, 6, 11, 7, 12, 2, 36, 7, 37, 23, 38, 9, 0, 0, 0, 4, 41, -1, 20, 1, 0, 5, 2, 6, 3, 7, 3, 8, 24, 9, 5, 10, 6, 11, 7, 12, 2, 13, 8, 14, 2, 15, 4, 16, 9, 17, 9, 18, 10, 19, 10, 20, 7, 21, 11, 22, 2, 23, 25, 0, 10, 0, 25, 24, -1, 18, 1, 0, 5, 2, 6, 3, 7, 3, 8, 4, 9, 5, 10, 6, 11, 7, 12, 2, 26, 10, 27, 26, 28, 14, 29, 9, 30, 10, 31, 4, 32, 5, 33, 3, 34, 5, 0, 11, 0, 35, 35, -1, 12, 1, 0, 5, 2, 6, 3, 7, 3, 8, 4, 9, 5, 10, 6, 11, 7, 12, 2, 36, 7, 37, 27, 38, 9, 0, 0, 0, 4, 42, -1, 20, 1, 0, 5, 2, 6, 3, 7, 3, 8, 28, 9, 5, 10, 6, 11, 7, 12, 2, 13, 8, 14, 2, 15, 4, 16, 9, 17, 9, 18, 10, 19, 10, 20, 7, 21, 11, 22, 2, 23, 29, 0, 13, 0, 25, 24, -1, 18, 1, 0, 5, 2, 6, 3, 7, 3, 8, 4, 9, 5, 10, 6, 11, 7, 12, 2, 26, 10, 27, 30, 28, 14, 29, 9, 30, 10, 31, 4, 32, 5, 33, 3, 34, 5, 0, 14, 0, 35, 35, -1, 12, 1, 0, 5, 2, 6, 3, 7, 3, 8, 4, 9, 5, 10, 6, 11, 7, 12, 2, 36, 7, 37, 31, 38, 9, 0, 0, 0, 4, 43, -1, 20, 1, 0, 5, 2, 6, 3, 7, 3, 8, 32, 9, 5, 10, 6, 11, 7, 12, 2, 13, 8, 14, 2, 15, 4, 16, 9, 17, 9, 18, 10, 19, 10, 20, 7, 21, 11, 22, 2, 23, 33, 0, 16, 0, 25, 24, -1, 18, 1, 0, 5, 2, 6, 3, 7, 3, 8, 4, 9, 5, 10, 6, 11, 7, 12, 2, 26, 10, 27, 34, 28, 14, 29, 9, 30, 10, 31, 4, 32, 5, 33, 3, 34, 5, 0, 17, 0, 35, 35, -1, 12, 1, 0, 5, 2, 6, 3, 7, 3, 8, 4, 9, 5, 10, 6, 11, 7, 12, 2, 36, 7, 37, 35, 38, 9, 0, 0, 0, 4, 44, -1, 20, 1, 0, 5, 2, 6, 3, 7, 3, 8, 36, 9, 5, 10, 6, 11, 7, 12, 2, 13, 8, 14, 2, 15, 4, 16, 9, 17, 9, 18, 10, 19, 10, 20, 7, 21, 11, 22, 2, 23, 37, 0, 19, 0, 25, 24, -1, 18, 1, 0, 5, 2, 6, 3, 7, 3, 8, 4, 9, 5, 10, 6, 11, 7, 12, 2, 26, 10, 27, 38, 28, 14, 29, 9, 30, 10, 31, 4, 32, 5, 33, 3, 34, 5, 0, 20, 0, 35, 35, -1, 12, 1, 0, 5, 2, 6, 3, 7, 3, 8, 4, 9, 5, 10, 6, 11, 7, 12, 2, 36, 7, 37, 35, 38, 9, 0, 0, 0, 4, 45, -1, 20, 1, 0, 5, 2, 6, 3, 7, 3, 8, 39, 9, 5, 10, 6, 11, 7, 12, 2, 13, 8, 14, 2, 15, 4, 16, 9, 17, 9, 18, 10, 19, 10, 20, 7, 21, 11, 22, 2, 23, 40, 0, 0, 0, 4, 46, -1, 20, 1, 0, 5, 2, 6, 3, 7, 3, 8, 41, 9, 5, 10, 6, 11, 7, 12, 2, 13, 8, 14, 2, 15, 4, 16, 9, 17, 9, 18, 10, 19, 10, 20, 7, 21, 11, 22, 2, 23, 42, 0, 0, 0, 4, 47, -1, 20, 1, 0, 5, 2, 6, 3, 7, 3, 8, 43, 9, 5, 10, 6, 11, 7, 12, 2, 13, 8, 14, 2, 15, 4, 16, 9, 17, 9, 18, 10, 19, 10, 20, 7, 21, 11, 22, 2, 23, 44, 0, 0, 0, 4, 48, -1, 20, 1, 0, 5, 2, 6, 3, 7, 3, 8, 45, 9, 5, 10, 6, 11, 7, 12, 2, 13, 8, 14, 2, 15, 4, 16, 9, 17, 9, 18, 10, 19, 10, 20, 7, 21, 11, 22, 2, 23, 46, 0, 0, 0, 4, 49, -1, 20, 1, 0, 5, 2, 6, 3, 7, 3, 8, 47, 9, 5, 10, 6, 11, 7, 12, 2, 13, 8, 14, 2, 15, 4, 16, 9, 17, 9, 18, 10, 19, 10, 20, 7, 21, 11, 22, 2, 23, 48, 0, 26, 0, 25, 24, -1, 18, 1, 0, 5, 2, 6, 3, 7, 3, 8, 4, 9, 5, 10, 6, 11, 7, 12, 2, 26, 10, 27, 49, 28, 14, 29, 9, 30, 10, 31, 4, 32, 5, 33, 3, 34, 5, 0, 27, 0, 35, 35, -1, 12, 1, 0, 5, 2, 6, 3, 7, 3, 8, 4, 9, 5, 10, 6, 11, 7, 12, 2, 36, 7, 37, 50, 38, 9, 0, 0, 0, 4, 50, -1, 20, 1, 0, 5, 2, 6, 3, 7, 3, 8, 51, 9, 5, 10, 6, 11, 7, 12, 2, 13, 8, 14, 2, 15, 4, 16, 9, 17, 9, 18, 10, 19, 10, 20, 7, 21, 11, 22, 2, 23, 52, 0, 29, 0, 25, 24, -1, 18, 1, 0, 5, 2, 6, 3, 7, 3, 8, 4, 9, 5, 10, 6, 11, 7, 12, 2, 26, 10, 27, 53, 28, 14, 29, 9, 30, 10, 31, 4, 32, 5, 33, 3, 34, 5, 0, 30, 0, 35, 35, -1, 12, 1, 0, 5, 2, 6, 3, 7, 3, 8, 4, 9, 5, 10, 6, 11, 7, 12, 2, 36, 7, 37, 54, 38, 9, 0, 0, 0, 4, 51, -1, 20, 1, 0, 5, 2, 6, 3, 7, 3, 8, 55, 9, 5, 10, 6, 11, 7, 12, 2, 13, 8, 14, 2, 15, 4, 16, 9, 17, 9, 18, 10, 19, 10, 20, 7, 21, 11, 22, 2, 23, 56, 0, 32, 0, 25, 24, -1, 18, 1, 0, 5, 2, 6, 3, 7, 3, 8, 4, 9, 5, 10, 6, 11, 7, 12, 2, 26, 10, 27, 57, 28, 14, 29, 9, 30, 10, 31, 4, 32, 5, 33, 3, 34, 5, 0, 33, 0, 35, 35, -1, 12, 1, 0, 5, 2, 6, 3, 7, 3, 8, 4, 9, 5, 10, 6, 11, 7, 12, 2, 36, 7, 37, 23, 38, 9, 0, 0, 0, 53, 52, -1, 25, 1, 0, 5, 2, 6, 3, 7, 3, 54, 0, 55, 0, 56, 0, 57, 0, 58, 2, 59, 2, 60, 58, 61, 3, 62, 5, 63, 3, 64, 3, 65, 3, 66, 5, 67, 9, 68, 9, 69, 59, 70, 7, 71, 7, 72, 9, 73, 9, 74, 60, 0, 0, 0, 4, 75, -1, 20, 1, 0, 5, 2, 6, 3, 7, 3, 8, 61, 9, 5, 10, 6, 11, 7, 12, 2, 13, 8, 14, 2, 15, 4, 16, 9, 17, 9, 18, 10, 19, 10, 20, 7, 21, 11, 22, 2, 23, 62, 0, 36, 0, 25, 24, -1, 18, 1, 0, 5, 2, 6, 3, 7, 3, 8, 4, 9, 5, 10, 6, 11, 7, 12, 2, 26, 10, 27, 63, 28, 14, 29, 9, 30, 10, 31, 4, 32, 5, 33, 3, 34, 5, 0, 37, 0, 35, 35, -1, 12, 1, 0, 5, 2, 6, 3, 7, 3, 8, 4, 9, 5, 10, 6, 11, 7, 12, 2, 36, 7, 37, 64, 38, 9, 0, 0, 0, 4, 76, -1, 20, 1, 0, 5, 2, 6, 3, 7, 3, 8, 65, 9, 5, 10, 6, 11, 7, 12, 2, 13, 8, 14, 2, 15, 4, 16, 9, 17, 9, 18, 10, 19, 10, 20, 7, 21, 11, 22, 2, 23, 66, 0, 39, 0, 25, 24, -1, 18, 1, 0, 5, 2, 6, 3, 7, 3, 8, 4, 9, 5, 10, 6, 11, 7, 12, 2, 26, 10, 27, 67, 28, 14, 29, 9, 30, 10, 31, 4, 32, 5, 33, 3, 34, 5, 0, 40, 0, 35, 35, -1, 12, 1, 0, 5, 2, 6, 3, 7, 3, 8, 4, 9, 5, 10, 6, 11, 7, 12, 2, 36, 7, 37, 68, 38, 9, 0 "conns" diff --git a/scene/2d/tile_map.cpp b/scene/2d/tile_map.cpp index 9fcf34cee63..06c97027f09 100644 --- a/scene/2d/tile_map.cpp +++ b/scene/2d/tile_map.cpp @@ -28,7 +28,7 @@ /*************************************************************************/ #include "tile_map.h" #include "io/marshalls.h" -#include "servers/physics_2d_server.h" + void TileMap::_notification(int p_what) { switch(p_what) { @@ -62,7 +62,7 @@ void TileMap::_update_quadrant_space(const RID& p_space) { for (Map::Element *E=quadrant_map.front();E;E=E->next()) { Quadrant &q=E->get(); - Physics2DServer::get_singleton()->body_set_space(q.static_body,p_space); + Physics2DServer::get_singleton()->body_set_space(q.body,p_space); } } @@ -79,7 +79,7 @@ void TileMap::_update_quadrant_transform() { Matrix32 xform; xform.set_origin( q.pos ); xform = global_transform * xform; - Physics2DServer::get_singleton()->body_set_state(q.static_body,Physics2DServer::BODY_STATE_TRANSFORM,xform); + Physics2DServer::get_singleton()->body_set_state(q.body,Physics2DServer::BODY_STATE_TRANSFORM,xform); } } @@ -178,7 +178,7 @@ void TileMap::_update_dirty_quadrants() { Quadrant &q = *dirty_quadrant_list.first()->self(); vs->canvas_item_clear(q.canvas_item); - ps->body_clear_shapes(q.static_body); + ps->body_clear_shapes(q.body); int shape_idx=0; for(int i=0;ibody_add_shape(q.static_body,shape->get_rid(),xform); - ps->body_set_shape_metadata(q.static_body,shape_idx++,Vector2(E->key().x,E->key().y)); + ps->body_add_shape(q.body,shape->get_rid(),xform); + ps->body_set_shape_metadata(q.body,shape_idx++,Vector2(E->key().x,E->key().y)); } } @@ -339,19 +339,19 @@ Map::Element *TileMap::_create_quadrant(const q.canvas_item = VisualServer::get_singleton()->canvas_item_create(); VisualServer::get_singleton()->canvas_item_set_parent( q.canvas_item, get_canvas_item() ); VisualServer::get_singleton()->canvas_item_set_transform( q.canvas_item, xform ); - q.static_body=Physics2DServer::get_singleton()->body_create(Physics2DServer::BODY_MODE_STATIC); - Physics2DServer::get_singleton()->body_attach_object_instance_ID(q.static_body,get_instance_ID()); - Physics2DServer::get_singleton()->body_set_layer_mask(q.static_body,collision_layer); - Physics2DServer::get_singleton()->body_set_param(q.static_body,Physics2DServer::BODY_PARAM_FRICTION,friction); - Physics2DServer::get_singleton()->body_set_param(q.static_body,Physics2DServer::BODY_PARAM_BOUNCE,bounce); + q.body=Physics2DServer::get_singleton()->body_create(body_mode); + Physics2DServer::get_singleton()->body_attach_object_instance_ID(q.body,get_instance_ID()); + Physics2DServer::get_singleton()->body_set_layer_mask(q.body,collision_layer); + Physics2DServer::get_singleton()->body_set_param(q.body,Physics2DServer::BODY_PARAM_FRICTION,friction); + Physics2DServer::get_singleton()->body_set_param(q.body,Physics2DServer::BODY_PARAM_BOUNCE,bounce); if (is_inside_tree()) { xform = get_global_transform() * xform; RID space = get_world_2d()->get_space(); - Physics2DServer::get_singleton()->body_set_space(q.static_body,space); + Physics2DServer::get_singleton()->body_set_space(q.body,space); } - Physics2DServer::get_singleton()->body_set_state(q.static_body,Physics2DServer::BODY_STATE_TRANSFORM,xform); + Physics2DServer::get_singleton()->body_set_state(q.body,Physics2DServer::BODY_STATE_TRANSFORM,xform); rect_cache_dirty=true; quadrant_order_dirty=true; @@ -361,7 +361,7 @@ Map::Element *TileMap::_create_quadrant(const void TileMap::_erase_quadrant(Map::Element *Q) { Quadrant &q=Q->get(); - Physics2DServer::get_singleton()->free(q.static_body); + Physics2DServer::get_singleton()->free(q.body); VisualServer::get_singleton()->free(q.canvas_item); if (q.dirty_list.in_list()) dirty_quadrant_list.remove(&q.dirty_list); @@ -586,17 +586,29 @@ void TileMap::set_collision_layer_mask(uint32_t p_layer) { for (Map::Element *E=quadrant_map.front();E;E=E->next()) { Quadrant &q=E->get(); - Physics2DServer::get_singleton()->body_set_layer_mask(q.static_body,collision_layer); + Physics2DServer::get_singleton()->body_set_layer_mask(q.body,collision_layer); } } +Physics2DServer::BodyMode TileMap::get_collision_body_mode() const{ + + return body_mode; +} + +void TileMap::set_collision_body_mode(Physics2DServer::BodyMode p_body_mode) { + + _clear_quadrants(); + body_mode=p_body_mode; + _recreate_quadrants(); +} + void TileMap::set_collision_friction(float p_friction) { friction=p_friction; for (Map::Element *E=quadrant_map.front();E;E=E->next()) { Quadrant &q=E->get(); - Physics2DServer::get_singleton()->body_set_param(q.static_body,Physics2DServer::BODY_PARAM_FRICTION,p_friction); + Physics2DServer::get_singleton()->body_set_param(q.body,Physics2DServer::BODY_PARAM_FRICTION,p_friction); } } @@ -612,7 +624,7 @@ void TileMap::set_collision_bounce(float p_bounce){ for (Map::Element *E=quadrant_map.front();E;E=E->next()) { Quadrant &q=E->get(); - Physics2DServer::get_singleton()->body_set_param(q.static_body,Physics2DServer::BODY_PARAM_BOUNCE,p_bounce); + Physics2DServer::get_singleton()->body_set_param(q.body,Physics2DServer::BODY_PARAM_BOUNCE,p_bounce); } } @@ -807,6 +819,9 @@ void TileMap::_bind_methods() { ObjectTypeDB::bind_method(_MD("set_collision_layer_mask","mask"),&TileMap::set_collision_layer_mask); ObjectTypeDB::bind_method(_MD("get_collision_layer_mask"),&TileMap::get_collision_layer_mask); + ObjectTypeDB::bind_method(_MD("set_collision_body_mode","body_mode"),&TileMap::set_collision_body_mode); + ObjectTypeDB::bind_method(_MD("get_collision_body_mode"),&TileMap::get_collision_body_mode); + ObjectTypeDB::bind_method(_MD("set_collision_friction","value"),&TileMap::set_collision_friction); ObjectTypeDB::bind_method(_MD("get_collision_friction"),&TileMap::get_collision_friction); @@ -837,6 +852,7 @@ void TileMap::_bind_methods() { ADD_PROPERTY( PropertyInfo(Variant::INT,"cell/quadrant_size",PROPERTY_HINT_RANGE,"1,128,1"),_SCS("set_quadrant_size"),_SCS("get_quadrant_size")); ADD_PROPERTY( PropertyInfo(Variant::MATRIX32,"cell/custom_transform"),_SCS("set_custom_transform"),_SCS("get_custom_transform")); ADD_PROPERTY( PropertyInfo(Variant::INT,"cell/half_offset",PROPERTY_HINT_ENUM,"Offset X,Offset Y,Disabled"),_SCS("set_half_offset"),_SCS("get_half_offset")); + ADD_PROPERTY( PropertyInfo(Variant::INT,"collision/body_mode",PROPERTY_HINT_ENUM,"Static,Kinematic"),_SCS("set_collision_body_mode"),_SCS("get_collision_body_mode")); ADD_PROPERTY( PropertyInfo(Variant::REAL,"collision/friction",PROPERTY_HINT_RANGE,"0,1,0.01"),_SCS("set_collision_friction"),_SCS("get_collision_friction")); ADD_PROPERTY( PropertyInfo(Variant::REAL,"collision/bounce",PROPERTY_HINT_RANGE,"0,1,0.01"),_SCS("set_collision_bounce"),_SCS("get_collision_bounce")); ADD_PROPERTY( PropertyInfo(Variant::INT,"collision/layers",PROPERTY_HINT_ALL_FLAGS),_SCS("set_collision_layer_mask"),_SCS("get_collision_layer_mask")); @@ -870,6 +886,7 @@ TileMap::TileMap() { bounce=0; mode=MODE_SQUARE; half_offset=HALF_OFFSET_DISABLED; + body_mode=Physics2DServer::BODY_MODE_STATIC; fp_adjust=0.01; fp_adjust=0.01; diff --git a/scene/2d/tile_map.h b/scene/2d/tile_map.h index 4e9e2e7e979..52e8eae306c 100644 --- a/scene/2d/tile_map.h +++ b/scene/2d/tile_map.h @@ -33,6 +33,7 @@ #include "scene/resources/tile_set.h" #include "self_list.h" #include "vset.h" +#include "servers/physics_2d_server.h" class TileMap : public Node2D { @@ -60,6 +61,7 @@ private: Mode mode; Matrix32 custom_transform; HalfOffset half_offset; + Physics2DServer::BodyMode body_mode; union PosKey { @@ -97,14 +99,14 @@ private: Vector2 pos; RID canvas_item; - RID static_body; + RID body; SelfList dirty_list; VSet cells; - void operator=(const Quadrant& q) { pos=q.pos; canvas_item=q.canvas_item; static_body=q.static_body; cells=q.cells; } - Quadrant(const Quadrant& q) : dirty_list(this) { pos=q.pos; canvas_item=q.canvas_item; static_body=q.static_body; cells=q.cells;} + void operator=(const Quadrant& q) { pos=q.pos; canvas_item=q.canvas_item; body=q.body; cells=q.cells; } + Quadrant(const Quadrant& q) : dirty_list(this) { pos=q.pos; canvas_item=q.canvas_item; body=q.body; cells=q.cells;} Quadrant() : dirty_list(this) {} }; @@ -177,6 +179,9 @@ public: void set_collision_layer_mask(uint32_t p_layer); uint32_t get_collision_layer_mask() const; + void set_collision_body_mode(Physics2DServer::BodyMode p_body_mode); + Physics2DServer::BodyMode get_collision_body_mode() const; + void set_collision_friction(float p_friction); float get_collision_friction() const; diff --git a/tools/editor/plugins/collision_polygon_editor_plugin.cpp b/tools/editor/plugins/collision_polygon_editor_plugin.cpp index b92acb60f95..a6f2085a191 100644 --- a/tools/editor/plugins/collision_polygon_editor_plugin.cpp +++ b/tools/editor/plugins/collision_polygon_editor_plugin.cpp @@ -31,6 +31,8 @@ #include "os/file_access.h" #include "tools/editor/editor_settings.h" #include "scene/3d/camera.h" +#include "canvas_item_editor_plugin.h" + void CollisionPolygonEditor::_notification(int p_what) { switch(p_what) { @@ -71,14 +73,14 @@ void CollisionPolygonEditor::_node_removed(Node *p_node) { Vector2 CollisionPolygonEditor::snap_point(const Vector2& p_point) const { return p_point; - /* - if (canvas_item_editor->is_snap_active()) { + + if (CanvasItemEditor::get_singleton()->is_snap_active()) { - return p_point.snapped(Vector2(1,1)*canvas_item_editor->get_snap()); + return p_point.snapped(Vector2(1,1)*CanvasItemEditor::get_singleton()->get_snap()); } else { return p_point; - } ??? */ + } } void CollisionPolygonEditor::_menu_option(int p_option) { @@ -148,7 +150,7 @@ bool CollisionPolygonEditor::forward_spatial_input_event(Camera* p_camera,const Vector2 cpoint(spoint.x,spoint.y); - //cpoint=snap_point(cpoint); snap? + cpoint=snap_point(cpoint); Vector poly = node->get_polygon(); @@ -362,7 +364,7 @@ bool CollisionPolygonEditor::forward_spatial_input_event(Camera* p_camera,const Vector2 cpoint(spoint.x,spoint.y); - //cpoint=snap_point(cpoint); + cpoint=snap_point(cpoint); edited_point_pos = cpoint; _polygon_draw(); From 8bb1e19d7355ac92ec5cfe39fbb6db73d6c0fffe Mon Sep 17 00:00:00 2001 From: Carl Olsson Date: Sat, 14 Feb 2015 06:43:50 +1000 Subject: [PATCH 2/2] Replace body_mode property with use_kinematic flag. Revert 2D Platformer demo's moving platforms to sprite plus body. --- demos/2d/platformer/moving_platform.png | Bin 0 -> 2143 bytes demos/2d/platformer/moving_platform.xml | 119 ++++++++++++------------ scene/2d/tile_map.cpp | 21 +++-- scene/2d/tile_map.h | 7 +- 4 files changed, 75 insertions(+), 72 deletions(-) create mode 100644 demos/2d/platformer/moving_platform.png diff --git a/demos/2d/platformer/moving_platform.png b/demos/2d/platformer/moving_platform.png new file mode 100644 index 0000000000000000000000000000000000000000..f01c6ea37fc5535d28d704004a6c36deb0587890 GIT binary patch literal 2143 zcmV-l2%z_gP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iye- z1PU`=_Loio00-YmL_t(|+U=dqZxvM-#-G7TDaC4AkhGQrB1jNPNlXaQbb(b96XSxI zxYCvG`~!?87&pd^J9oM;x-u~?)Sxlck2D~`4XA{m7)WUND)c7A(iVYnaqn9?Z|B@| z&diyQOP}ASxijbMJ!g8J=bX7SH$uh4aa>5b+ddzU0pRafC!(dtpZMhYM7lp;{~>6- zcW!(|+m3e)7x6_j-iYop8TLlun zQ&-&?W-pLVAga0nL+|Vc01Ry2005XdH|>=T{kzS|M%>^JP`kQ0eq}Tl-A$7v&J>00B`QSHolYyXG2NQ+rb4ej zD&x@nJb4tk#Hi=dKz4cnJigQo0{Dg9Lg)ZI*!l5u z0DwyuF2w+_acpzj8P!DSbfL-(b-b*2^Ty>{f7Sg{R=>;V%ai8-09OzE9&rzV5VEoz zz~FnkQk9>OdlBsfuD$yQ_W%eX)zDR!hWM`e3F$=TuiJG^2S5lNKz*<|fzZ41S!d?5 z^ZCYQ%NMGgQ1Mnh4rN_$b%PFo5ITVR&^X)t?t8!IjIDQ9P5I@#khLDuXKBCb`wWZi z+p-~7e1hrjiO#Rv2kGZlJFNZLO6TjSB){$Z9kz739eKye)E~Nj*Ku{NM~^!l03oC@ zYV$0Bo*@@!W>IR#q0a7T{i$=;@962|8sm6fDlp{wYdv$_f0vC z#Ed!CI{wj)DFDFu7q?qVlgvN(VRPmkL{h0lxv+RVT?wJ`NqLR^>Gd=W=@yj`(`}Ve z$6-=_jZL97ws`L<`*dnOrgHTfTE{Ca?}ubR;aK{3+WOHp4yN%kjkhV@<=0VqJ$gLf zJT(FUm~?!@6&(N}WaaGvyz$~b0Km7Sjl>>+W_E5NQ~4YFdYsZ7es&H3@bsZ%`pehn z+BymwyGN4BWm0z2`QuYFsfuKCFd7|~Yd=W*%bi90cKF6`>IWUa4LweJ{7vI*!W6%a z-k$E%4*t{ z4uB9kfa-X-Z*3{cR+R#WRwQ4g_KiREZh6&v6`kV1=l}>I+yjtZf8X8HqITg;<<@1b zxzghA)bTgn&7uP!gwO%_I)SRci5GgUTo=V-{9)s-tMbzU5JKwb0Oa|9d5&6U(5z1b z%F}3BaeW%CsI_ulrDOcn#Q*PqcT%rwIsifl9e{A<`i46R0;uF4VJOi3YyJat#<&j^^nHa+nW(u3KnSUi0~p=3zLI*iGMBxJ zP6e-)vc{hdfDl3l;ELS$FKQRnv?iD1p_IV)elr!Yoc=3o{7u(29RMMO4xlQf6HIS) z4W*1(6)Uvzx!#2^rK`#r6s`D0k3aVS2qAO;zQkz$RLbPJ>DXs4An*NlQ3U&LD66zE3CSjbGOOa$VB_5JKnxe4W6y!QMY01V?+!!& zFn#?-TV>nOw>B|jOZu#9W>;l2<;%Oa*YQX{Tvq*HN@we@yvl6rpV0AV82{AkO4nm* z=h~h%iR+pUfDl3lAe=aVHSu}-@L*!b{A+IBYi+6(-!#KJC}8T^QPOE8vE4;*br7z~ zr~AVcmrd!WJ=41?Y1TEpt)EQiUE}v1f0H9{9hVXQIxr!G4j?0s4G%^DaQecv)ETzT zTDMRI)SpFBOisn7{I=hlx9x4%+UpuuR$|o-(^}bvDP6p{cQF^cD0bFybxp4wgpOaX z+qy#sKnNW`{n5W7ENij63TDfnLrGJW$k!p5$}L*a1N4vAo`k7ieB%#2uC5NU=wG>} z10aOldk!G$%;`FVU$N}k7S%pih17_mgi`XN;?L@g9O4V=V2U39(2k1^fDlp|{{xVg V;v;u%4f_B9002ovPDHLkV1g7OG=~5H literal 0 HcmV?d00001 diff --git a/demos/2d/platformer/moving_platform.xml b/demos/2d/platformer/moving_platform.xml index f39b11782c2..4d54d6d11c8 100644 --- a/demos/2d/platformer/moving_platform.xml +++ b/demos/2d/platformer/moving_platform.xml @@ -1,56 +1,77 @@ - - - + + + + + 0 + -88, 24, -88, -24, 88, -24, 88, 24 + + "names" - + "moving_platform" "Node2D" - "_import_path" "visibility/visible" "visibility/opacity" "visibility/self_opacity" + "visibility/on_top" "transform/pos" "transform/rot" "transform/scale" - "z/z" - "z/relative" "script/script" "__meta__" "motion" "cycle" "platform" - "TileMap" + "RigidBody2D" + "shape_count" + "shapes/0/shape" + "shapes/0/transform" + "shapes/0/trigger" "mode" - "tile_set" - "cell/size" - "cell/quadrant_size" - "cell/custom_transform" - "cell/half_offset" - "collision/body_mode" - "collision/friction" - "collision/bounce" - "collision/layers" - "tile_data" + "mass" + "friction" + "bounce" + "custom_integrator" + "continuous_cd" + "contacts_reported" + "contact_monitor" + "active" + "can_sleep" + "velocity/linear" + "velocity/angular" + "Sprite" + "texture" + "centered" + "offset" + "flip_h" + "flip_v" + "vframes" + "hframes" + "frame" + "modulate" + "region" + "region_rect" + "CollisionPolygon2D" + "build_mode" + "polygon" "version" 1 "conn_count" 0 "node_count" - 2 + 4 "variants" - "" True 1 0, 0 0 1, 1 - 0 - + "__editor_plugin_states__" @@ -71,22 +92,16 @@ "pixel_snap" False "zoom" - 1.850616 - "use_snap" - True + 1.360373 "ofs" - -406.735, -157.32 - "snap" - 32 + -210.652, -172.81 "3D" - "deflight_rot_y" - 0.628319 "zfar" 500 "fov" - 179 + 400 "viewports" @@ -96,12 +111,10 @@ 0 "y_rot" 0 - "listener" - True - "use_environment" - False "use_orthogonal" False + "use_environment" + False "pos" 0, 0, 0 @@ -112,12 +125,10 @@ 0 "y_rot" 0 - "listener" + "use_orthogonal" False "use_environment" False - "use_orthogonal" - False "pos" 0, 0, 0 @@ -128,12 +139,10 @@ 0 "y_rot" 0 - "listener" + "use_orthogonal" False "use_environment" False - "use_orthogonal" - False "pos" 0, 0, 0 @@ -144,12 +153,10 @@ 0 "y_rot" 0 - "listener" + "use_orthogonal" False "use_environment" False - "use_orthogonal" - False "pos" 0, 0, 0 @@ -158,18 +165,12 @@ 1 "default_light" True - "ambient_light_color" - 0.15, 0.15, 0.15, 1 "show_grid" True "show_origin" True "znear" 0.1 - "default_srgb" - False - "deflight_rot_x" - 0.942478 "__editor_run_settings__" @@ -182,17 +183,19 @@ "__editor_plugin_screen__" "2D" - -96, -32 - - 64, 64 - 16 - 1, 0, 0, 1, 0, 0 - 2 1 - 0, 536870927, 1, 536870926, 2, 15 + + 1, -0, 0, 1, 0, 0 + False + 3 + 0 + + 1, 1, 1, 1 + 0, 0, 0, 0 + -88, -24, 88, -24, 88, 24, -88, 24 "nodes" - -1, -1, 1, 0, -1, 13, 2, 0, 3, 1, 4, 2, 5, 2, 6, 3, 7, 4, 8, 5, 9, 6, 10, 1, 11, 7, 12, 8, 13, 3, 14, 2, 0, 0, 0, 16, 15, -1, 20, 2, 0, 3, 1, 4, 2, 5, 2, 6, 9, 7, 4, 8, 5, 9, 6, 10, 1, 17, 6, 18, 10, 19, 11, 20, 12, 21, 13, 22, 14, 23, 15, 24, 2, 25, 4, 26, 15, 27, 16, 0 + -1, -1, 1, 0, -1, 11, 2, 0, 3, 1, 4, 1, 5, 0, 6, 2, 7, 3, 8, 4, 9, 5, 10, 6, 11, 2, 12, 1, 0, 0, 0, 14, 13, -1, 23, 2, 0, 3, 1, 4, 1, 5, 0, 6, 2, 7, 3, 8, 4, 15, 7, 16, 8, 17, 9, 18, 10, 19, 11, 20, 1, 21, 1, 22, 3, 23, 10, 24, 10, 25, 12, 26, 10, 27, 0, 28, 0, 29, 2, 30, 3, 0, 1, 0, 31, 31, -1, 18, 2, 0, 3, 1, 4, 1, 5, 0, 6, 2, 7, 3, 8, 4, 32, 13, 33, 0, 34, 2, 35, 10, 36, 10, 37, 7, 38, 7, 39, 12, 40, 14, 41, 10, 42, 15, 0, 1, 0, 43, 43, -1, 9, 2, 0, 3, 1, 4, 1, 5, 0, 6, 2, 7, 3, 8, 4, 44, 12, 45, 16, 0 "conns" diff --git a/scene/2d/tile_map.cpp b/scene/2d/tile_map.cpp index 06c97027f09..52f4d274972 100644 --- a/scene/2d/tile_map.cpp +++ b/scene/2d/tile_map.cpp @@ -28,6 +28,7 @@ /*************************************************************************/ #include "tile_map.h" #include "io/marshalls.h" +#include "servers/physics_2d_server.h" void TileMap::_notification(int p_what) { @@ -339,7 +340,7 @@ Map::Element *TileMap::_create_quadrant(const q.canvas_item = VisualServer::get_singleton()->canvas_item_create(); VisualServer::get_singleton()->canvas_item_set_parent( q.canvas_item, get_canvas_item() ); VisualServer::get_singleton()->canvas_item_set_transform( q.canvas_item, xform ); - q.body=Physics2DServer::get_singleton()->body_create(body_mode); + q.body=Physics2DServer::get_singleton()->body_create(use_kinematic?Physics2DServer::BODY_MODE_KINEMATIC:Physics2DServer::BODY_MODE_STATIC); Physics2DServer::get_singleton()->body_attach_object_instance_ID(q.body,get_instance_ID()); Physics2DServer::get_singleton()->body_set_layer_mask(q.body,collision_layer); Physics2DServer::get_singleton()->body_set_param(q.body,Physics2DServer::BODY_PARAM_FRICTION,friction); @@ -590,15 +591,15 @@ void TileMap::set_collision_layer_mask(uint32_t p_layer) { } } -Physics2DServer::BodyMode TileMap::get_collision_body_mode() const{ +bool TileMap::get_collision_use_kinematic() const{ - return body_mode; + return use_kinematic; } -void TileMap::set_collision_body_mode(Physics2DServer::BodyMode p_body_mode) { +void TileMap::set_collision_use_kinematic(bool p_use_kinematic) { _clear_quadrants(); - body_mode=p_body_mode; + use_kinematic=p_use_kinematic; _recreate_quadrants(); } @@ -816,12 +817,12 @@ void TileMap::_bind_methods() { ObjectTypeDB::bind_method(_MD("set_center_y","enable"),&TileMap::set_center_y); ObjectTypeDB::bind_method(_MD("get_center_y"),&TileMap::get_center_y); + ObjectTypeDB::bind_method(_MD("set_collision_use_kinematic","use_kinematic"),&TileMap::set_collision_use_kinematic); + ObjectTypeDB::bind_method(_MD("get_collision_use_kinematic"),&TileMap::get_collision_use_kinematic); + ObjectTypeDB::bind_method(_MD("set_collision_layer_mask","mask"),&TileMap::set_collision_layer_mask); ObjectTypeDB::bind_method(_MD("get_collision_layer_mask"),&TileMap::get_collision_layer_mask); - ObjectTypeDB::bind_method(_MD("set_collision_body_mode","body_mode"),&TileMap::set_collision_body_mode); - ObjectTypeDB::bind_method(_MD("get_collision_body_mode"),&TileMap::get_collision_body_mode); - ObjectTypeDB::bind_method(_MD("set_collision_friction","value"),&TileMap::set_collision_friction); ObjectTypeDB::bind_method(_MD("get_collision_friction"),&TileMap::get_collision_friction); @@ -852,7 +853,7 @@ void TileMap::_bind_methods() { ADD_PROPERTY( PropertyInfo(Variant::INT,"cell/quadrant_size",PROPERTY_HINT_RANGE,"1,128,1"),_SCS("set_quadrant_size"),_SCS("get_quadrant_size")); ADD_PROPERTY( PropertyInfo(Variant::MATRIX32,"cell/custom_transform"),_SCS("set_custom_transform"),_SCS("get_custom_transform")); ADD_PROPERTY( PropertyInfo(Variant::INT,"cell/half_offset",PROPERTY_HINT_ENUM,"Offset X,Offset Y,Disabled"),_SCS("set_half_offset"),_SCS("get_half_offset")); - ADD_PROPERTY( PropertyInfo(Variant::INT,"collision/body_mode",PROPERTY_HINT_ENUM,"Static,Kinematic"),_SCS("set_collision_body_mode"),_SCS("get_collision_body_mode")); + ADD_PROPERTY( PropertyInfo(Variant::BOOL,"collision/use_kinematic",PROPERTY_HINT_NONE,""),_SCS("set_collision_use_kinematic"),_SCS("get_collision_use_kinematic")); ADD_PROPERTY( PropertyInfo(Variant::REAL,"collision/friction",PROPERTY_HINT_RANGE,"0,1,0.01"),_SCS("set_collision_friction"),_SCS("get_collision_friction")); ADD_PROPERTY( PropertyInfo(Variant::REAL,"collision/bounce",PROPERTY_HINT_RANGE,"0,1,0.01"),_SCS("set_collision_bounce"),_SCS("get_collision_bounce")); ADD_PROPERTY( PropertyInfo(Variant::INT,"collision/layers",PROPERTY_HINT_ALL_FLAGS),_SCS("set_collision_layer_mask"),_SCS("get_collision_layer_mask")); @@ -886,7 +887,7 @@ TileMap::TileMap() { bounce=0; mode=MODE_SQUARE; half_offset=HALF_OFFSET_DISABLED; - body_mode=Physics2DServer::BODY_MODE_STATIC; + use_kinematic=false; fp_adjust=0.01; fp_adjust=0.01; diff --git a/scene/2d/tile_map.h b/scene/2d/tile_map.h index 52e8eae306c..c8708e1bed0 100644 --- a/scene/2d/tile_map.h +++ b/scene/2d/tile_map.h @@ -33,7 +33,6 @@ #include "scene/resources/tile_set.h" #include "self_list.h" #include "vset.h" -#include "servers/physics_2d_server.h" class TileMap : public Node2D { @@ -61,7 +60,7 @@ private: Mode mode; Matrix32 custom_transform; HalfOffset half_offset; - Physics2DServer::BodyMode body_mode; + bool use_kinematic; union PosKey { @@ -179,8 +178,8 @@ public: void set_collision_layer_mask(uint32_t p_layer); uint32_t get_collision_layer_mask() const; - void set_collision_body_mode(Physics2DServer::BodyMode p_body_mode); - Physics2DServer::BodyMode get_collision_body_mode() const; + void set_collision_use_kinematic(bool p_use_kinematic); + bool get_collision_use_kinematic() const; void set_collision_friction(float p_friction); float get_collision_friction() const;