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 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 E02CoKhX4Qo diff --git a/demos/2d/platformer/moving_platform.xml b/demos/2d/platformer/moving_platform.xml index 4d54d6d11c..f39b11782c 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 e2943d8fcf..35517f747d 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 zcmeAS@N?(olHy`uVBq!ia0y~yU}9ikU}WH6V_;x7I^kS81A_vCr;B4q#hkZy^Vh_N z&%FQf{ziSXzV&b8ezV=y(QL& zR@Fb(Y`*qy|M$rI=V!m(eEwec`qFPVkH4<`b}O5|?eM}`U)Js4SFPdsT7QkK$0dFH zzkA)j$M2BK|MN0nl3skA@q{I&ukGUVS&y%oxBuT^cedU)8`5Gk{ohsf^zVQ6FL&|R zcc-4W-Yj{~{yp@Q{DDiSpRd+XyY=m?w3g=cX!|;wm!GqIZ;LW8Fr1Zs^XE{U=cQxi z`LbS@R-a$%^0hwkP)sA60EeEafk%4K_3DIMAKbjR23wd?bLU--T8 zEB93CXur_cU!VSH-}AosxADYBkG|ek^*nuix{BxiKi$sFp08u;Z|8Yl`l#OLbLU)K z{O07#SH7;9bKP(Mq{#bmyPy7j@%g@w)u!%H6XpvgN92P{lpR1(sFJ?n_x`)4Q|66gfa_01W`+XjFw#TlRv#M|Z`a8F-&))d>{b`w+ALs21 zr~H|?Q=h3^x%Bb6{Pn%N_w`5j?Y^Vi?{lDJA&Hdh<|UNZoAKclC!xn%13S zNZ7V>;)6rI*SAGTo1C4_x#7fp^Q`+v+@6H$_TOEfUwt}3Vs|v7va2zJulpZGS7RoK ztDfCj$1p4KTa?W&-ETjlS>8&&m9N&dE33R`$h5Dh>GplA`6WxjL#`{;%E#NTmeMv@ zeS(33VZwqtk`0R%FLwT}Ev~yfqxST)=&xm^y;ke3K0W_&eRFJh-~Q^eH5WI>-P_Gr z^ZvNozsmPYJF?sk&ey-WHP47K|I&1h{VO8#<0Cs=6UOF zepi2cQE~3?$9U;hxm)wsir?!0eQR6!>zU=Y+vO_L*LDB3x$}4T>(*O>xBBz1*dMR| zRkgY9Pj1PcvkWiNn3CMzw<~?!^ZkAMk89s;iy01xLTq_ZUjKpJ`K0{KofG?|J=eGy zoGV+%aVorTeN6n%W8wVUWA}afyiNbgyc<=bYyIDpE&Sv((e`-#w*LLL+y}mk*x$eW z&8e&J-Fm6d3_jnFf3K-{WW%t0PCCOIogZ8FZd&}|^}e?M)A|2uynN3r$-uxMWOC!1 zeBQY)40k;q{!@3e-N2q7J@ZGMM$+fK`+rL>-tYcy_MUmaZ^hp4U2>;t*KhNUg26BT zZW4@qQ`dFv_}72`cg9Wna>9S!nJ*RM`?s_|j$iO^bJ3sP>bLt>Wk1V}Z7x@?pUwVY z`uu-!i@(0Gif2<;zwG_?^;*WzobXkTA^yp8F4v58%HMta{@l6#u4-Y?-Ru?oSw(yA zKIOl+>`j$_%qbo7)vx2X{#~(r_gnk^Y4c^>m%PhK3T zuXMcaIw@v@W3dd83k?}km21EMo*#bk{eI3=HVI}128Kz-H@^Rytu4tKwQc$I>0f!) z?{mA=7x4S;yqvqX$>vOVwi@h`|G$3U8dv$E_>F?L({%Lvx)EbA2q-4|NDFKwQA^PCay~ zbU&?@I$po6Z@;zhg2>(#$JgKGxOZ=V-JUz&_qjgV*VFJmuQ@>N;I_?y|HIA)s4+Y( zdHTmZG?gXDnT>&=frZtW!T0NzHSFOf^&15vL!X9itqZ;LSMN-CFn?ct)bab};tjJo z3+|UISKQaAGhg&Q_j$Egqi*^3&DZypEts)Q`ENw&-2a>Vco-NMIA@){efYHW%BOD| zLv5pWy_L(kESPckY4M-WFMoYBH?y)ck#CR=tTtxd_mf#^`{!QHj`u_hjdcbbbvf+2Qy;ytozOb0G|GwS1^`R5%GyeNN{t;gNXMObp zG0#h%0h=l9lGe*SfU_qy1v`uN-V7XOqt9=~tIcueWf_dk!e zsJy%|H=6CzRG)*T{CA9IY`M4j{e45N2iJZ!s@(lD^?BQ*FSF}E^{aZC|9!K4(vq{Y z&Ali2>F?L@wEF5_p1RHW{m)ku7pmC)cHixOy1q_t_x_JX(dTp9H&!Y8UA|u*ZT~)) zLsB~cn&!i=ZauSUqTjuu({62{-MRlYm)lu0+g{o9mfy8b=6}|guRq#vY_0R0nf*7f z4OXJ{3k=emnF+K6>ii`MU0UvG)H@XH~E9yFQVT zfkDBs^*vL@?&Htj*}pekyz2Y?EdjqzyVX^Gzi-l4zxDY2^4vSUU+jN13r||IUM_0h zuDH-Oao_KMJa^{b{_5-N&Q$%b{}H6-{BX7Us=({t_rLsXQQB(F;Ng7x|HY$Pv$fb8 zuCQ1$RQ_i^QQf;)=XQMTf5wo%@(Ho?-Q)i)emDC{|9iG4PkYv3t4B{Xl7N>PJ_*ZF|<8U%2w||6kJ6-Tp^d*V@h&yfE)s`PsfgwF8mo zr^(Bwvu&}k-x}lgw>((m(f!TYg$kbgEex&dQkCnED1z(Rtn&;dxgz`gFAK)Msq+0^ zvHG9PuWNO|-#?Z=*Vrz3de{qHni*S3B0)_v`8wtcv6oBjK(_ZQjz+w*oi zhlNRa`E?^^yNz$p|1R0Is_(zDedVT0zn|ou`!{>v&(8~0bnBnpW%jHpdc7j9+^)uE z^FPb8{ylHdtcaP2A?Zee&);B|0#L)^=^6AY@rWNj2pa0)p_orgznc(2(^{*hM$Iew%eyPfL_dK0;mM3KG z>bK{mf3{DP-rhcM`|-GvTH)QX9k>^-Tb~@X0poP#k`Fx zSpqv(o&Ue<#vaD9>kjez@5e$4Zqa?*3)XdPfAKF_`O&U#pnT~(vHsqtS6wlyyJTu4 zn{NDM>&f4HqhonansV9S8-^mKzi&NGUv%yBS&kRKo&~3$4q;~vt^GH<_VMpucYps) zJ~}TwbngF^kaWlP`(FL$D;`VVdTd{_$#(y~ZS{$DMSK6hvbJB95>ji1e|IgktUr5I_Te_!#_h5Px8MCIaDVIOb>Dls`wTnww%r%6U9G=s>AKJM z-)_~vxxujA#{ARwon@a*XO`{x@G0B*<*Vg_%OJT=s^-su+^Ki`XWr7N3BP{peIKJm z;kQuFvuAnv_e8#tXsDbk?Q!-lZ^3)^?;n4MGv2zt_S^A)|0Y9z|A({Nm63U-s?3$*uUa@9n`23z0JnQ{KKb`D(K7!kxFSU$_2!9=AUxYd^!U z>VLCC>i_$!dfWf^uR1u#K3lbGTHvDIr`4)9(N3zSV*_ThIp@2&f1 zze(SRni}#$uVGh}jqCUM+ucLH{+lg!yH2V8%FDy`-#Qnn=<4sYny}>P)83ia_y76w z{nqN3-d{!k%(wnucJW_U-T#x|W^n@Bg17Vh)~s4L^~ki_rg^sIIlGoEos}>x@<{#J zKHr&7#eS~Wt53?*@VstYaN1##UBJbE_rLG_>+Bf?tNBvm-ru#Y+V%3%Z8u}Ce{YiS z&)6|{r`?AAyUy4DuGQKtU-v(4^WWvik|oO6-lb{$`t1*{q0er;dwAvTHQV_!np`h* zU(cVevbXG)sAsrRU3G5#>P=S19{iYeZ_oeN@AviEZ}n%r#e0fXNsh#}$-gO9F4mEwY zSPR?`4|prtu&@7+j`r7Y$;a+k&F7q(|Lat-v*)kgz5j0Jt9tI=S-S5^p3dV98ma5P z?oQ_GdB4@V>_AM#i!T`S-bi7@9E*2 z1oue4+%33oui3t*t7rB+7T=sK#r5je&-iaq_4nTHzV>ff>E6Hl?$;YJFfgdBC}3Og za_4mC-}$@TZ%qFt{ByC_G){y0RTZ}#CY{Ty)A02Fckf!G%H5wI3Oz4fm$O&)-1Yro zxsT5KGdHKJ>BY}|nQt@w=cn`2m$|(Pcm1*N={bqEMbL!wb?@KXb9ub)Ef)*>3XND+ zV}{W0C7-(9N?t8py8=`wKD-+Ao3(4h3Hxi?T6HHaxqMpRujc+Sp`5*6Z}~j=H*dY1 zq}L@->n6&e?@jK{h1T0s=7}b}kGC~TJbmTY*ROxfSN{7qbKjQx+vD!;{|}Ck3o)VB zi%xy}@@ZQ1w)BXt>$cs06LllPwX~tNIS8YPZjj;ax2IzTI45=^8d> zKWjMlo_`;2no%F~+xctR>6O2~&j**}S~cPhv9|jb{XTzNc~upt#b-a!ewM-d;$Zjd zyJs>AOEEvVSDNr{|KqvAuRmXupEE(F_WQcn;M2SRF0>6k{qg1LpZBl)o9*^{^-pL9 zZjx-+R&BL$)vhq1=)CJYzQ)XW@4k1U*?ozIh~M=;E?xP_SR>gIQEU6(ch&y-W!Z1@ zv(~u0f#ztF@N)k3Z{;Fx+uqoAo8RQ%JGKuW@A3*rF$-+U{86-W=HDNGSBt-W{|%}< zPJD*5|oz4Y7nWxs2oAr|nE$Kmq#*tT!?OZqqH zzg7R_&b6;9W9P-cU!VTT&-(AX`0v#}(BkYMkHgJ*e!>39t6oP1#^0`g_x1G5>+HwQ zhq4Q-U;li+=hyG&m)!by1Dd!p)~(8xOs%%6Jgs}%cuiFJZT~0zdXaXw;L1%=^FZ#Qj?PDV!W{_pjey|L(c)Z_6`YzgOR?zX)}Q#tg=c-OGhn zzu7uz&(kvB_*b1D$g(l(x6lVSdXo zh8fG!zGZ72(ybDAh+O&qU+LDrd1;H*R!stz?o(}f1@4xCdXn4@wXgcV{9dLlxWWJ8 zZegdIWTBkO*!j)xp&nXg%RJ$fhR^&fxA~W>$$wsdbz*+b@7mW}zy1y{Kl0vg@qsj* z94lidaPbGu@oLM~edVd$b*paOU*@l`U;UgPe({8P{%>6-zOz^Dv-kh6obMNL^*yNZ zRAlh77VL18y!;iEm%DS+4&+9Qt9UMte{uax!?M@U>o5Q2uYB|2GPCEd+V}GkMPF~d z`ftmCcl`bP-Sr=$4fCzyQ{3l*qju+auFG~U-D+Uzn^z&oQ}J_-Q(I1rP~Wdw$Agv_*mpu&8ocm6}Io5C)_!I_-_CDdB4BC zo2X)2_v2;fdq~At92$FC>-Ocd(RnxL6<*zS3lzVdzjYdNxuaD)mrsw+S!(y^pXlv# zy&koKyY-p&mVGv5_N;pN^!g&Dn(m&pb8eh*fVFFqZ|A>_sQOuxX8YUb-}}?+eRa&I zO|_q}$W9&-EFWSSO21Zgzq8-w9&`QQ?R)of?I+p?%#Zy2mwW2-?t)suRr-re^P}cz zANu++HoJdr{(&FYif`w?{k>b>ep;k{e%j${{ZCIT>_}#>N#=|J7cv0`%ooc1&BJbH zr&gYRJ8Rz+;TMzl%?aOErFSNMy8Z7zPqKe6JaPT|t?m0_e}CJU{b=D=r-^I!zK_d3 zUoGyK)21x4vE4{IKkNGup3eL&`?T|y9c%{|H?vmnZogf|a<7bk-`j7@A7)>@Z*Ts| zd?Cj@*{ktk8jE^+D`GcZ-*LC&u2S0fbxgup+pEvs7oC0cL$3Jld$Ui;`&8MBfm;+N z-=DDShh4h-IXXJ)_2XR;fwpSD5Aurr^nDc*g+ZjiQTc*^oEm)OZnOgm;^7Pr?Q`R$^ z$7p+2z2~>Lo3f-^-TgY-^}V%U&NQUI`%|X8ICr^aV(<{F1(J-7dm1_|s>k`0Sq zz4|yic;1PW=M`Jl@2-z`NwEFD|8MwW=iG_=H(r1L>-FyTNnc*u*Q6-Ko)noN=`dAn zd+)yO%csR<>{NStrS{+RyY(;ru&Y6upC=etw%onk|MXh%@nzX6p7FnLv|enQEWRu+ zKbi5455uJ|`_8|W_qufI+Gl3ZTf2WhTd1PD_w5~rNqROVR-gZUj;~uax9i%P_s{Fs z9M$ig$GG9$qg#zCu`%VEpQ|3ei*@#_di`@}qsm`Mb7$t&_lMU&?45L;p=4|O{>@K< zPyPE-?&md0Or)Imf~@obi3XF%C-tDVhiCWlcuB8I*~{Z6s^nU&U8s^VAs1vrPik_#Ut7RBl}TygzT+OY7pwY>D#3!x)DPmCE>Zpi-Q&ED_1>r(OejT{X=4pKUw;`h|;UZO3ye`nh9WoL@M z*WNyN>f*H>&$lj)EIWJe-2b=ic@s*W)|4AJe*1S?-F@QzzkNCuPj8jw-`%$Km)Bx5 za1;qhHq3fDcjM{MZ&FWRncAKIeQj}h^}l20{tRi8rC;8D{n%e-Vu|Xd@4DvE;buIl zFL$x$NqSsjf3>zOeQWK%-SL2wi*jMRv=lZ)FjGyc4s#2yf{*sVfUCU+WSpce)CVp zpo?2S-!J`eAj zy7#8){QT2m6>DZKe^VM7D_DQ=@9%T<-G6#}8E;tCxgB`9czJtxerc=p!{5_{e|{GR zXHXY5g#|hO_m%47Tk_xkHe%U0v+=@Kr|v)NPjP76o?QN(`&;6?hMOg?E?j)Ww0nO2 zoZGT!{e%;#mJlBTr;eB6!zwBEH$<>q2GlZ1t>Tg>fAG)(rx%sa8@%2x) zeBX9aUYa{0nc3$}PvafY3;Fvjf9K{jyk_QK@3XfoXP4a1?X~}YEBz1HS$Ul2ZInds z&B`aI?I)Ey-SJDQTv|KeOYIlPXfY_uuh?T-_kC8}&7Q{Hwf8y>ypglL7VZ9ScHR8^ zjGTtMq7Uw=9=Op^S8U8&zoovggf}9PlVR@Vnmb*#!QcMyy8f&D{@(h(?x*sfMt1Y> z+Sls+@BjCpMdju0^0!@D{CC~J73D-mjupRd)rBADl8ARxct7W%%fAUrK)tcQXIVmO z_f6~lQ+uaK?Aht5zuE17+z;*-7yO?CNl%l`Gh7j!ID66cXTDdHS@*oIt^d=1_U85d zzs~Gg@*$Wtwug0wZ@lf6IoW^x-`)-j_FZ-H+fVtb{qKJLjJXnR5iblHm~LQEozJ+! z>!yc&{?1Z&w*I=5J@*&i{QJDNOTn0J+1u>?`4d&{?p}ZUGvk!2UqAmpa`UAzvyv|? zyEMIe^-=t8{Z+|E>wWfG=ZzS@{R%fvQ|7!M%cz&eb42Im>7VgtpUzu9WBvSkxn}51{=S&p*3J*V#(9r(<8J6$LLT#_x98s#j z{lD3L^Ld^PC+y4SF_a&3Sdx1C(2JMFpsIYQ+RrPZAI0zPul~3D`k(v1=P^%OQvcul zzT)AwP*`|0Y^(mY@l>4lndo=T+j~##{oncKH~*^{OSC8Mw{=!1^I=G4ymaZCM8kxA z^Zy?(0qY9*B-s%8-tzj@eXEt~)s;UiIOfm4$FO?3LxxX7FROy^gtl$R8P5Fr$?pRh z(omhx=wN!Mr@@--KwSGg*#~;tC7E+AB^z&E`fA9q`O$-o;)k>qEx|^E%CoDcT>Dq& z=rr{8{kyS;(fyrtI@7V&J7+S=n}15rIgpcC&Es%4$ol_9eVC4}E2hHp*WX#^$`*G1 zuKMQF{ddfNy-s7AVQ8Rxds|i{wc4|34b^<_r98P!>uQO|Ap7qwVkV1sy_lr zGoV^m_T_P{>a_;>J6&&@*3ZBH_mrjQrN#1+d;4m;7Hs_f_8o%}qsHP@@9XdGSFZgz z*J(SXfpIdO;nh3K?VxcS$s^nDr}5N$+4p(o^>1$&T+fMQ-1$D!QeZM_JXd^b7GJD% z==uIXA$LPFkM5PfW4>n5oKHD@XKlXh3)#>lqS3z<&@n_9FqwQgnzJSJa>-Br@&AY!Pa#G2+qto5i zm*y#WYX5)aeE9kL>ZAAnZQN5{8?$xa?1?|GJ&iej^6tO8@%(Gv|CGBCYhYJ)&$jHx z%a=173Ty9uHShPBbj-c>Bm)CGFK8`5Ty0*ef+u(RdnvC=H{JbsmfZXs>nvl$z+mrO^T(^lbNlt3r+ohrvGd!`8_%;Or{4Ir%)J8}-KKvH`)hypb<8vSdWNe?%mSHV#thrv z-wi&g@pIF}y0~eQ8rEtDQU&)*zkIH{{6$&i_Wxh^?*UD%H}|`)m7iUy5jEfQ_4@rA z!d~m2$-H}XYgBRNf}Q5qG7Mx`=Nkbfrj+EY{K*qCxp@oW1Ra=+G}`tMK8*KOxd z8);N-FP}a;AnnlhJLPBZf4|~TJ@5jF1rnC|npEnj~0e?AYh>W8!SZ;Xn_i^g={C~#~{iU_*|*++j$}T_wHFQCH|Mbe!1@X zKKWbwGHmb8lsvu7{9Ccf#`)nZ>hi2>CYHVVe&p`_%-5ftZ$XN}cT664j`QcQOi^=~ ze^@>IkhX8&*Uc<3`wW@i8M8UP-hFzpG26VEJiaU9Hh%5A+rM5mZ*THz!Cx}9zssk$ zpDMo3?|Nn7`KPN4Rpx#AJZd^1cxBof1d?&X;BCLcy5;_%>uAhsZ;@M%$y6bf8 zwzv#CM)O5nxzD>*l9i7ISca~Bu2+70>h_w)>)zX)HO${z^ZWGgx)rqx&mXp)rd0HQ z;nQXB&iC^;K;3M_(5XF(F~jN+f9F|_2$z&{?j7d^KBV&8;kck=I9+y+^?Ot)As3^@B2>2+UuJeKj?l@J8|LG`{EOS?hstKarxe#H$LCH zyZq43r^l`-n;9qFIe*ah-@?DU-~aAgf7|c=r$ul1Q{8Iryl;O0TVDEP`@Z|@0)Bsf zXaD7|I`afGST*x#UHyw7)pEusy(OR0n4E5lPc>ik?PT=-O{=o%Lr=Nws{Fe5Z|cqG z;oqu%-$;DNbKvfpM5dq zYT57PpRXdnedgMFzkJUL258!Pl-V$2RrbVv{u-Co?Ygt+cIe-o+wT5brSxc({rhcw z^_L|l2K?S_md11!Qt(b>^oY4T(KA{wBJ}oj*WaJF?tgV+=h|<-zuhjWy=C|B1f2|X zhAoiM)F%4ak(85_5ys6;t8a>+h^fWy`RCo4@JKx~=kmA+5%Vj1G#q_PuBC z*2m937IyVt^6mJmrjPe+vk!YwJnQQ>WnQR97<@v_F5QeXdKB~N%#7!&UPo!ZUH&(< z<<|Rc=VSN3{g%895=1t<289ckGal2De)&{XTGF)j+vR^YP7~|zz3qOK*#Il0m>ZmC z_5E=Aoo}VI(QWTKjuBBy{? zhvLGUqJakmU0qqEPb}zQ?(1vl5e?Mg>EgP<{zP$6U-ROQu2a7sRxi%Jw&(k^v;VeU zw|lQz`~GlIyvbvLx3(rf_nY4%M1;3f6T0AWQd-kD9X5CB7=f(YKIF$hBd>Q^I=`C z3=swlB5B@7EE#U-G8lMT#JFBV&*2Bohp{DjnN#sh3w(sdU6`)JjJy|%o3RrXF2E{s+=il)M� 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 Re}6%RnWw9t%Q~loCIB+#`6B=T diff --git a/demos/2d/platformer/tileset.xml b/demos/2d/platformer/tileset.xml index 2e4ecc8c04..d8f9a651ee 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 2473656a6a..db289433ab 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 9fcf34cee6..06c97027f0 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 4e9e2e7e97..52e8eae306 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 b92acb60f9..a6f2085a19 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 zcmeAS@N?(olHy`uVBq!ia0y~yU}RumU~u4IV_;zT8oP2I0|NtNage(c!@6@aFBupZ z*pj^6T^Rm@;DWu&Co?cGa29w(7Bet#3xhBt!>l~~l>S-6bjzD@UI zU|_%R>EaktaqI2ev-zT-636Br^wK<<6+L0gG!`Wf0Z&gKj*BIYp~AwCn`Z2|H1*vd z<{mW(^JBf%<+}`a85!zbSzvgj-$dac?~0ZM5*`^pw7#evxg^$DSol8LD*ySN;&W$a z_IuC2zig-R^VhcNRr8+D*=cO|i=Pvwxa+~i?)&9zbC3|J3R@PQ+zdTu^OY86d zXjY+p!Qpo$)AT3!DXiMX==}Z-8v{?yJqCsumgaA#tS|rVz{9Y4dAbsVL{%0y!-Gc? zH+Po&eLOpfA;V`*|FmnDZTIL+j9Y&B>FaMVKX-pzQ8we$MV*rSdC~W;G=>YkESI$t zVs`j)zJ`V22Bw-_2Ghkv(YNyxeV=ZLx9S8wamomO(0%d_qN?#%yiFk|JT*A+3R zH*P(@y>70b_7=mtvpz0!T5qrQ_`)BXN|Bw%HZT2h?N{_$k*DQv&EGC*F<$>S;^lt@ zS%yk_if>C^b$L;;@Dy+9o;4Mpk3Eg9 zzxp>gZ2#%!rzbyWUyMw0ApHMCMmSx@E-|XKRI25m52%X;c zW8F{Amo87&-!AoKci@n9sNG=McwzUa$n9_RpYEBkRqk?n=KhzzdAi@;-lP~_)AaIP=ehN_*B zW3*Ynm?P_$+0^XQ?`QkVm-n6yb*%k;`k95#+YMjav+aL=>(1WYwQpU{(~pr1PA5*4 zGJLXQNIdQm&cmP{7vbUi-um;dXXm5*uYKF`tor8-28IWxZH;G&+%Bnm9e#Fy`nTOj zmtM|Rz4~^G<%$b`L$<$mGX527&XDlv`hB7Q#Wi9L0zr~ncXAhe_qFUj(qnne>fgma zO@;$M#J5L#O+I7)BeD3ItV_^Jmz^6bY+^YVe)6pB{rmE(3C~NhsREaCrv@HR465t( zU1++k;=R`Ik}TV0MPH?&j%(|@Z%?s*81bv()~}0Ze9Jx>^={X^_w;&Tm2H*HeH&9I zh8ZO_hec%>6jPqQW!&@eksZTS{c=aOt)86U%kFAGzCoxcA3 zmKB%uZud#2QiIAa|9l*5ys|5$*g#5ldbYjCpVM<)f0z9@mj8-fc0aGJU)3Mq$2o^Y z_V?bK_wLH$JIo3#7Z^FJ-O5$%-b>`|bNybEeC;&j4z0bfee$*SR~w1A-utonTX$ zUupiWkKAn^mCLTb@OAdF_;rtWIYH9ZM9D3M^`^yBR~PNj3W}W?cWdU>eY=jtPc^>u z_1pT_FFQCJz^Ut1#g6=3%~N4hncBlt;+KBwwf~Y=d9_+}?xO>sjCqH7LTvs0yO$T0 zJ@kEgEp_eAOOM`P`DlLk>>{wAepofG+TST&wKhilX!4)L$Lm*ry38ox^y)dolb`jK zeNkx_*7!4@x||VNSSz)5#nz&@rOAJ;9{K;izC37swiSaDhipT^(_g($8r|7~<~jr# z|8+Gj=GQ!GG<9~kr1RwPmo=x~Uip#xSk~&_E-iad;{A7?=>*TOzbjV;iRiC>^kd)7 zW$U`m|2TXkzWnL?8Jr1AgTJ=MT?=X~U|R7+K2hVs-|To$vZt;#aq*O@F*_%7O27#-bbM{L{|< z<9ppymO-(FZ-LfQVW0d`-laW}qS{+N?Y!4&uypk)Ns+ZbT>I@oIlP2n-;s=eA*Y_~ ze0d{XU*Y}VvOt!u)PQRL2eeyk@3xh%JU$^Mg+ZVQ*876!GT9cg?o@(;+^zLofKYG~5 zg#AtMN`Jk6 c(^Dlf%m-v6>wb%9Jtmn7pnRdRO1r7s+ITrP%A1i-aWc zRCrj@RldtnH`_F0_v|P)6yL2;cCE0~cfD*&U;Mh;yPUzv`R~R3N;=sa_i&}1p6~1# zJoUtN#Tln`qb@Rk>Aya&Wo3NLV}9Fp>-aXkh~K%4S)t`lHJ`%kGcT>0<2Sy!C3e*= zy!A@QqL!dfiyobS)g$wW`&B}h-2V%G-FyuKK~n#jCro>!T%O1K8`OUAboFyt=akR{ E02CoKhX4Qo literal 0 HcmV?d00001 diff --git a/demos/2d/platformer/moving_platform.xml b/demos/2d/platformer/moving_platform.xml index f39b11782c..4d54d6d11c 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 06c97027f0..52f4d27497 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 52e8eae306..c8708e1bed 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;