Procházet zdrojové kódy

Added tilemap collisions example

Björn Ritzl před 5 roky
rodič
revize
ebcec1bb54

binární
assets/images/enemyFloating_1.png


binární
assets/images/tilesheet_complete.png


+ 61 - 0
assets/sprites.atlas

@@ -1,118 +1,160 @@
 images {
   image: "/assets/images/logo.png"
+  sprite_trim_mode: SPRITE_TRIM_MODE_OFF
 }
 images {
   image: "/assets/images/grid.png"
+  sprite_trim_mode: SPRITE_TRIM_MODE_OFF
 }
 images {
   image: "/assets/images/spinner.png"
+  sprite_trim_mode: SPRITE_TRIM_MODE_OFF
 }
 images {
   image: "/assets/images/elementStone019.png"
+  sprite_trim_mode: SPRITE_TRIM_MODE_OFF
 }
 images {
   image: "/assets/images/elementStone023.png"
+  sprite_trim_mode: SPRITE_TRIM_MODE_OFF
 }
 images {
   image: "/assets/images/close.png"
+  sprite_trim_mode: SPRITE_TRIM_MODE_OFF
 }
 images {
   image: "/assets/images/header.png"
+  sprite_trim_mode: SPRITE_TRIM_MODE_OFF
 }
 images {
   image: "/assets/images/bunny1_ready.png"
+  sprite_trim_mode: SPRITE_TRIM_MODE_OFF
 }
 images {
   image: "/assets/images/bunny2_ready.png"
+  sprite_trim_mode: SPRITE_TRIM_MODE_OFF
 }
 images {
   image: "/assets/images/carrot.png"
+  sprite_trim_mode: SPRITE_TRIM_MODE_OFF
 }
 images {
   image: "/assets/images/red_button12.png"
+  sprite_trim_mode: SPRITE_TRIM_MODE_OFF
 }
 images {
   image: "/assets/images/flame.png"
+  sprite_trim_mode: SPRITE_TRIM_MODE_OFF
 }
 images {
   image: "/assets/images/smoke.png"
+  sprite_trim_mode: SPRITE_TRIM_MODE_OFF
 }
 images {
   image: "/assets/images/rainbow.png"
+  sprite_trim_mode: SPRITE_TRIM_MODE_OFF
+}
+images {
+  image: "/assets/images/enemyFloating_1.png"
+  sprite_trim_mode: SPRITE_TRIM_MODE_OFF
 }
 animations {
   id: "bee"
   images {
     image: "/assets/images/Bee01.png"
+    sprite_trim_mode: SPRITE_TRIM_MODE_OFF
   }
   images {
     image: "/assets/images/Bee02.png"
+    sprite_trim_mode: SPRITE_TRIM_MODE_OFF
   }
   images {
     image: "/assets/images/Bee03.png"
+    sprite_trim_mode: SPRITE_TRIM_MODE_OFF
   }
   images {
     image: "/assets/images/Bee04.png"
+    sprite_trim_mode: SPRITE_TRIM_MODE_OFF
   }
   images {
     image: "/assets/images/Bee05.png"
+    sprite_trim_mode: SPRITE_TRIM_MODE_OFF
   }
   images {
     image: "/assets/images/Bee06.png"
+    sprite_trim_mode: SPRITE_TRIM_MODE_OFF
   }
   images {
     image: "/assets/images/Bee07.png"
+    sprite_trim_mode: SPRITE_TRIM_MODE_OFF
   }
   images {
     image: "/assets/images/Bee08.png"
+    sprite_trim_mode: SPRITE_TRIM_MODE_OFF
   }
   images {
     image: "/assets/images/Bee09.png"
+    sprite_trim_mode: SPRITE_TRIM_MODE_OFF
   }
   images {
     image: "/assets/images/Bee10.png"
+    sprite_trim_mode: SPRITE_TRIM_MODE_OFF
   }
   images {
     image: "/assets/images/Bee11.png"
+    sprite_trim_mode: SPRITE_TRIM_MODE_OFF
   }
   images {
     image: "/assets/images/Bee12.png"
+    sprite_trim_mode: SPRITE_TRIM_MODE_OFF
   }
   images {
     image: "/assets/images/Bee13.png"
+    sprite_trim_mode: SPRITE_TRIM_MODE_OFF
   }
   images {
     image: "/assets/images/Bee14.png"
+    sprite_trim_mode: SPRITE_TRIM_MODE_OFF
   }
   images {
     image: "/assets/images/Bee15.png"
+    sprite_trim_mode: SPRITE_TRIM_MODE_OFF
   }
   images {
     image: "/assets/images/Bee16.png"
+    sprite_trim_mode: SPRITE_TRIM_MODE_OFF
   }
   images {
     image: "/assets/images/Bee17.png"
+    sprite_trim_mode: SPRITE_TRIM_MODE_OFF
   }
   images {
     image: "/assets/images/Bee18.png"
+    sprite_trim_mode: SPRITE_TRIM_MODE_OFF
   }
   images {
     image: "/assets/images/Bee19.png"
+    sprite_trim_mode: SPRITE_TRIM_MODE_OFF
   }
   images {
     image: "/assets/images/Bee20.png"
+    sprite_trim_mode: SPRITE_TRIM_MODE_OFF
   }
   images {
     image: "/assets/images/Bee21.png"
+    sprite_trim_mode: SPRITE_TRIM_MODE_OFF
   }
   images {
     image: "/assets/images/Bee22.png"
+    sprite_trim_mode: SPRITE_TRIM_MODE_OFF
   }
   images {
     image: "/assets/images/Bee23.png"
+    sprite_trim_mode: SPRITE_TRIM_MODE_OFF
   }
   images {
     image: "/assets/images/Bee24.png"
+    sprite_trim_mode: SPRITE_TRIM_MODE_OFF
   }
   playback: PLAYBACK_LOOP_FORWARD
   fps: 30
@@ -123,33 +165,43 @@ animations {
   id: "bee_shot"
   images {
     image: "/assets/images/Bee_shot01.png"
+    sprite_trim_mode: SPRITE_TRIM_MODE_OFF
   }
   images {
     image: "/assets/images/Bee_shot02.png"
+    sprite_trim_mode: SPRITE_TRIM_MODE_OFF
   }
   images {
     image: "/assets/images/Bee_shot03.png"
+    sprite_trim_mode: SPRITE_TRIM_MODE_OFF
   }
   images {
     image: "/assets/images/Bee_shot04.png"
+    sprite_trim_mode: SPRITE_TRIM_MODE_OFF
   }
   images {
     image: "/assets/images/Bee_shot05.png"
+    sprite_trim_mode: SPRITE_TRIM_MODE_OFF
   }
   images {
     image: "/assets/images/Bee_shot06.png"
+    sprite_trim_mode: SPRITE_TRIM_MODE_OFF
   }
   images {
     image: "/assets/images/Bee_shot07.png"
+    sprite_trim_mode: SPRITE_TRIM_MODE_OFF
   }
   images {
     image: "/assets/images/Bee_shot08.png"
+    sprite_trim_mode: SPRITE_TRIM_MODE_OFF
   }
   images {
     image: "/assets/images/Bee_shot09.png"
+    sprite_trim_mode: SPRITE_TRIM_MODE_OFF
   }
   images {
     image: "/assets/images/Bee_shot10.png"
+    sprite_trim_mode: SPRITE_TRIM_MODE_OFF
   }
   playback: PLAYBACK_ONCE_FORWARD
   fps: 30
@@ -160,30 +212,39 @@ animations {
   id: "stinger"
   images {
     image: "/assets/images/Sting01.png"
+    sprite_trim_mode: SPRITE_TRIM_MODE_OFF
   }
   images {
     image: "/assets/images/Sting02.png"
+    sprite_trim_mode: SPRITE_TRIM_MODE_OFF
   }
   images {
     image: "/assets/images/Sting03.png"
+    sprite_trim_mode: SPRITE_TRIM_MODE_OFF
   }
   images {
     image: "/assets/images/Sting04.png"
+    sprite_trim_mode: SPRITE_TRIM_MODE_OFF
   }
   images {
     image: "/assets/images/Sting05.png"
+    sprite_trim_mode: SPRITE_TRIM_MODE_OFF
   }
   images {
     image: "/assets/images/Sting06.png"
+    sprite_trim_mode: SPRITE_TRIM_MODE_OFF
   }
   images {
     image: "/assets/images/Sting07.png"
+    sprite_trim_mode: SPRITE_TRIM_MODE_OFF
   }
   images {
     image: "/assets/images/Sting08.png"
+    sprite_trim_mode: SPRITE_TRIM_MODE_OFF
   }
   images {
     image: "/assets/images/Sting09.png"
+    sprite_trim_mode: SPRITE_TRIM_MODE_OFF
   }
   playback: PLAYBACK_LOOP_FORWARD
   fps: 30

+ 18 - 0
examples/_main/loader.go

@@ -586,3 +586,21 @@ embedded_components {
     w: 1.0
   }
 }
+embedded_components {
+  id: "tilemap/collisions"
+  type: "collectionproxy"
+  data: "collection: \"/examples/tilemap/collisions/collisions.collection\"\n"
+  "exclude: false\n"
+  ""
+  position {
+    x: 0.0
+    y: 0.0
+    z: 0.0
+  }
+  rotation {
+    x: 0.0
+    y: 0.0
+    z: 0.0
+    w: 1.0
+  }
+}

+ 11 - 2
examples/_main/menu.gui_script

@@ -99,7 +99,8 @@ local function show_category(self, category)
 end
 
 function init(self)
-	self.index = { "basics", "physics", "animation", "gui", "input", "particles", "sound", "render", "debug", "collection", "sprite", "file" }
+	self.index = { "basics", "physics", "animation", "gui", "input", "particles", "sound", "render", "debug", "collection", "sprite", "file", "tilemap" }
+	self.index = {}
 	self.index["basics"] = { "simple_move", "message_passing", "follow", "parent_child", "spawn", "z_order" }
 	self.index["physics"] = { "dynamic", "kinematic", "raycast", "trigger" }
 	self.index["animation"] = { "spinner", "flipbook", "tween", "spine" }
@@ -112,7 +113,15 @@ function init(self)
 	self.index["collection"] = { "proxy" }
 	self.index["sprite"] = { "size" }
 	self.index["file"] = { "sys_save_load" }
-
+	self.index["tilemap"] = { "collisions" }
+	local categories = {}
+	for k,_ in pairs(self.index) do
+		categories[#categories + 1] = k
+	end
+	for _,category in ipairs(categories) do
+		self.index[#self.index + 1] = category
+	end
+	
 	self.examples = {}
 	self.categories = {}
 

binární
examples/tilemap/collisions/collection.png


+ 96 - 0
examples/tilemap/collisions/collisions.collection

@@ -0,0 +1,96 @@
+name: "game"
+scale_along_z: 0
+embedded_instances {
+  id: "level"
+  data: "components {\n"
+  "  id: \"level\"\n"
+  "  component: \"/examples/tilemap/collisions/level.tilemap\"\n"
+  "  position {\n"
+  "    x: 0.0\n"
+  "    y: 0.0\n"
+  "    z: 0.0\n"
+  "  }\n"
+  "  rotation {\n"
+  "    x: 0.0\n"
+  "    y: 0.0\n"
+  "    z: 0.0\n"
+  "    w: 1.0\n"
+  "  }\n"
+  "}\n"
+  "components {\n"
+  "  id: \"collisions\"\n"
+  "  component: \"/examples/tilemap/collisions/collisions.script\"\n"
+  "  position {\n"
+  "    x: 0.0\n"
+  "    y: 0.0\n"
+  "    z: 0.0\n"
+  "  }\n"
+  "  rotation {\n"
+  "    x: 0.0\n"
+  "    y: 0.0\n"
+  "    z: 0.0\n"
+  "    w: 1.0\n"
+  "  }\n"
+  "}\n"
+  "embedded_components {\n"
+  "  id: \"collisionobject\"\n"
+  "  type: \"collisionobject\"\n"
+  "  data: \"collision_shape: \\\"/examples/tilemap/collisions/level.tilemap\\\"\\n"
+  "type: COLLISION_OBJECT_TYPE_STATIC\\n"
+  "mass: 0.0\\n"
+  "friction: 0.1\\n"
+  "restitution: 0.5\\n"
+  "group: \\\"\\\"\\n"
+  "mask: \\\"enemy\\\"\\n"
+  "linear_damping: 0.0\\n"
+  "angular_damping: 0.0\\n"
+  "locked_rotation: false\\n"
+  "\"\n"
+  "  position {\n"
+  "    x: 0.0\n"
+  "    y: 0.0\n"
+  "    z: 0.0\n"
+  "  }\n"
+  "  rotation {\n"
+  "    x: 0.0\n"
+  "    y: 0.0\n"
+  "    z: 0.0\n"
+  "    w: 1.0\n"
+  "  }\n"
+  "}\n"
+  "embedded_components {\n"
+  "  id: \"enemyfactory\"\n"
+  "  type: \"factory\"\n"
+  "  data: \"prototype: \\\"/examples/tilemap/collisions/enemy.go\\\"\\n"
+  "load_dynamically: false\\n"
+  "\"\n"
+  "  position {\n"
+  "    x: 0.0\n"
+  "    y: 0.0\n"
+  "    z: 0.0\n"
+  "  }\n"
+  "  rotation {\n"
+  "    x: 0.0\n"
+  "    y: 0.0\n"
+  "    z: 0.0\n"
+  "    w: 1.0\n"
+  "  }\n"
+  "}\n"
+  ""
+  position {
+    x: -25.0
+    y: -25.0
+    z: 0.0
+  }
+  rotation {
+    x: 0.0
+    y: 0.0
+    z: 0.0
+    w: 1.0
+  }
+  scale3 {
+    x: 1.0
+    y: 1.0
+    z: 1.0
+  }
+}

+ 21 - 0
examples/tilemap/collisions/collisions.md

@@ -0,0 +1,21 @@
+---
+title: Tilemap collisions
+brief: This example shows how to detect collisions on tilemaps
+scripts: collisions.script
+---
+
+This example uses a tilesource with two collision groups: "ground" and "danger". The tilesource uses the `tilesheet_complete.png` image for the tiles and the collision shapes (traced as outlines around the transparent pixels of each tile).
+
+The tiles belonging to the two groups have been "painted" as can be seen by the outline around each tile. The tiles belonging to the "danger" group are purple and the tiles belonging to the "ground" group are green. Tiles with a white outline does not belong to a collision group.
+
+![tilesource](tilesource.png)
+
+The example uses the tilesource to create a tilemap component:
+
+![tilemap](tilemap.png)
+
+The tilemap is added to the example together with a collision object which uses the tilemap itself as collision shape. Note that there is no need to specify any collsion groups on the collision object itself. The groups defined in the tilesource (ie "ground" and "danger") will be used:
+
+![collection](collection.png)
+
+Click/tap on the screen to spawn game objects that will fall and interact with the tilemap.

+ 31 - 0
examples/tilemap/collisions/collisions.script

@@ -0,0 +1,31 @@
+function init(self)
+	msg.post(".", "acquire_input_focus") -- <1>
+	for i=1,10 do
+		factory.create("#enemyfactory", vmath.vector3(math.random(100, 700), 600, 1))  -- <2>
+	end
+end
+
+
+function on_input(self, action_id, action)
+	if action.pressed then
+		factory.create("#enemyfactory", vmath.vector3(action.x, action.y, 1))  -- <3>
+	end
+end
+
+
+function on_message(self, message_id, message, sender)
+	if message_id == hash("collision_response") then  -- <4>
+		if message.own_group == hash("danger") then  -- <5>
+			go.delete(message.other_id)  -- <6>
+		end
+	end
+end
+
+--[[
+1. Acquire input for the script
+2. Spawn 10 game objects at random positions near the top of the screen
+3. Spawn a game object when any key or mouse button (or touch) is pressed
+4. Something collided with the tilemap if the received message was a `collision_response`
+5. Check if something collided with a tile belonging to the collision group "danger"
+6. Delete the game object that collided with the tilemap
+--]]

+ 135 - 0
examples/tilemap/collisions/enemy.go

@@ -0,0 +1,135 @@
+embedded_components {
+  id: "sprite"
+  type: "sprite"
+  data: "tile_set: \"/assets/sprites.atlas\"\n"
+  "default_animation: \"enemyFloating_1\"\n"
+  "material: \"/builtins/materials/sprite.material\"\n"
+  "blend_mode: BLEND_MODE_ALPHA\n"
+  ""
+  position {
+    x: 0.0
+    y: 0.0
+    z: 0.0
+  }
+  rotation {
+    x: 0.0
+    y: 0.0
+    z: 0.0
+    w: 1.0
+  }
+}
+embedded_components {
+  id: "collisionobject"
+  type: "collisionobject"
+  data: "collision_shape: \"\"\n"
+  "type: COLLISION_OBJECT_TYPE_DYNAMIC\n"
+  "mass: 1.0\n"
+  "friction: 0.1\n"
+  "restitution: 0.5\n"
+  "group: \"enemy\"\n"
+  "mask: \"ground\"\n"
+  "mask: \"danger\"\n"
+  "mask: \"enemy\"\n"
+  "embedded_collision_shape {\n"
+  "  shapes {\n"
+  "    shape_type: TYPE_SPHERE\n"
+  "    position {\n"
+  "      x: 0.0\n"
+  "      y: 0.0\n"
+  "      z: 0.0\n"
+  "    }\n"
+  "    rotation {\n"
+  "      x: 0.0\n"
+  "      y: 0.0\n"
+  "      z: 0.0\n"
+  "      w: 1.0\n"
+  "    }\n"
+  "    index: 0\n"
+  "    count: 1\n"
+  "  }\n"
+  "  shapes {\n"
+  "    shape_type: TYPE_SPHERE\n"
+  "    position {\n"
+  "      x: -15.0\n"
+  "      y: 14.0\n"
+  "      z: 0.0\n"
+  "    }\n"
+  "    rotation {\n"
+  "      x: 0.0\n"
+  "      y: 0.0\n"
+  "      z: 0.0\n"
+  "      w: 1.0\n"
+  "    }\n"
+  "    index: 1\n"
+  "    count: 1\n"
+  "  }\n"
+  "  shapes {\n"
+  "    shape_type: TYPE_SPHERE\n"
+  "    position {\n"
+  "      x: 15.0\n"
+  "      y: 14.0\n"
+  "      z: 0.0\n"
+  "    }\n"
+  "    rotation {\n"
+  "      x: 0.0\n"
+  "      y: 0.0\n"
+  "      z: 0.0\n"
+  "      w: 1.0\n"
+  "    }\n"
+  "    index: 2\n"
+  "    count: 1\n"
+  "  }\n"
+  "  shapes {\n"
+  "    shape_type: TYPE_SPHERE\n"
+  "    position {\n"
+  "      x: 15.0\n"
+  "      y: -14.0\n"
+  "      z: 0.0\n"
+  "    }\n"
+  "    rotation {\n"
+  "      x: 0.0\n"
+  "      y: 0.0\n"
+  "      z: 0.0\n"
+  "      w: 1.0\n"
+  "    }\n"
+  "    index: 3\n"
+  "    count: 1\n"
+  "  }\n"
+  "  shapes {\n"
+  "    shape_type: TYPE_SPHERE\n"
+  "    position {\n"
+  "      x: -15.0\n"
+  "      y: -14.0\n"
+  "      z: 0.0\n"
+  "    }\n"
+  "    rotation {\n"
+  "      x: 0.0\n"
+  "      y: 0.0\n"
+  "      z: 0.0\n"
+  "      w: 1.0\n"
+  "    }\n"
+  "    index: 4\n"
+  "    count: 1\n"
+  "  }\n"
+  "  data: 20.0\n"
+  "  data: 6.0\n"
+  "  data: 6.0\n"
+  "  data: 6.0\n"
+  "  data: 6.0\n"
+  "}\n"
+  "linear_damping: 0.0\n"
+  "angular_damping: 0.0\n"
+  "locked_rotation: false\n"
+  ""
+  position {
+    x: 0.0
+    y: 0.0
+    z: 0.0
+  }
+  rotation {
+    x: 0.0
+    y: 0.0
+    z: 0.0
+    w: 1.0
+  }
+}

+ 526 - 0
examples/tilemap/collisions/level.tilemap

@@ -0,0 +1,526 @@
+tile_set: "/examples/tilemap/collisions/tiles.tilesource"
+layers {
+  id: "layer1"
+  z: 0.0
+  is_visible: 1
+  cell {
+    x: 0
+    y: 0
+    tile: 0
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 1
+    y: 0
+    tile: 0
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 2
+    y: 0
+    tile: 0
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 3
+    y: 0
+    tile: 0
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 4
+    y: 0
+    tile: 0
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 5
+    y: 0
+    tile: 44
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 6
+    y: 0
+    tile: 0
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 7
+    y: 0
+    tile: 0
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 8
+    y: 0
+    tile: 0
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 9
+    y: 0
+    tile: 0
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 10
+    y: 0
+    tile: 0
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 11
+    y: 0
+    tile: 0
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 0
+    y: 1
+    tile: 28
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 1
+    y: 1
+    tile: 2
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 2
+    y: 1
+    tile: 2
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 3
+    y: 1
+    tile: 2
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 4
+    y: 1
+    tile: 2
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 5
+    y: 1
+    tile: 2
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 6
+    y: 1
+    tile: 2
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 7
+    y: 1
+    tile: 2
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 8
+    y: 1
+    tile: 2
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 9
+    y: 1
+    tile: 2
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 10
+    y: 1
+    tile: 2
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 11
+    y: 1
+    tile: 27
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 0
+    y: 2
+    tile: 0
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 1
+    y: 2
+    tile: 23
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 2
+    y: 2
+    tile: 45
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 3
+    y: 2
+    tile: 0
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 4
+    y: 2
+    tile: 46
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 5
+    y: 2
+    tile: 24
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 7
+    y: 2
+    tile: 210
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 8
+    y: 2
+    tile: 210
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 9
+    y: 2
+    tile: 210
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 11
+    y: 2
+    tile: 0
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 0
+    y: 3
+    tile: 0
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 2
+    y: 3
+    tile: 23
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 3
+    y: 3
+    tile: 2
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 4
+    y: 3
+    tile: 24
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 11
+    y: 3
+    tile: 22
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 0
+    y: 4
+    tile: 0
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 11
+    y: 4
+    tile: 0
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 0
+    y: 5
+    tile: 0
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 2
+    y: 5
+    tile: 8
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 9
+    y: 5
+    tile: 8
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 11
+    y: 5
+    tile: 0
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 0
+    y: 6
+    tile: 22
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 4
+    y: 6
+    tile: 5
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 5
+    y: 6
+    tile: 6
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 6
+    y: 6
+    tile: 7
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 10
+    y: 6
+    tile: 8
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 11
+    y: 6
+    tile: 0
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 0
+    y: 7
+    tile: 0
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 6
+    y: 7
+    tile: 5
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 7
+    y: 7
+    tile: 6
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 8
+    y: 7
+    tile: 7
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 11
+    y: 7
+    tile: 0
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 0
+    y: 8
+    tile: 0
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 11
+    y: 8
+    tile: 0
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 0
+    y: 9
+    tile: 0
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 11
+    y: 9
+    tile: 0
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 0
+    y: 10
+    tile: 0
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 11
+    y: 10
+    tile: 0
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 0
+    y: 11
+    tile: 0
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 1
+    y: 11
+    tile: 0
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 2
+    y: 11
+    tile: 0
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 3
+    y: 11
+    tile: 0
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 4
+    y: 11
+    tile: 0
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 5
+    y: 11
+    tile: 44
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 6
+    y: 11
+    tile: 0
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 7
+    y: 11
+    tile: 0
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 8
+    y: 11
+    tile: 22
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 9
+    y: 11
+    tile: 0
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 10
+    y: 11
+    tile: 0
+    h_flip: 0
+    v_flip: 0
+  }
+  cell {
+    x: 11
+    y: 11
+    tile: 0
+    h_flip: 0
+    v_flip: 0
+  }
+}
+material: "/builtins/materials/tile_map.material"
+blend_mode: BLEND_MODE_ALPHA

binární
examples/tilemap/collisions/tilemap.png


+ 1332 - 0
examples/tilemap/collisions/tiles.tilesource

@@ -0,0 +1,1332 @@
+image: "/assets/images/tilesheet_complete.png"
+tile_width: 64
+tile_height: 64
+tile_margin: 0
+tile_spacing: 0
+collision: "/assets/images/tilesheet_complete.png"
+material_tag: "tile"
+convex_hulls {
+  index: 0
+  count: 4
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 4
+  count: 7
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 11
+  count: 4
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 15
+  count: 7
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 22
+  count: 10
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 32
+  count: 9
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 41
+  count: 6
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 47
+  count: 9
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 56
+  count: 12
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 68
+  count: 7
+  collision_group: ""
+}
+convex_hulls {
+  index: 75
+  count: 12
+  collision_group: ""
+}
+convex_hulls {
+  index: 87
+  count: 14
+  collision_group: ""
+}
+convex_hulls {
+  index: 101
+  count: 8
+  collision_group: ""
+}
+convex_hulls {
+  index: 109
+  count: 8
+  collision_group: ""
+}
+convex_hulls {
+  index: 117
+  count: 8
+  collision_group: ""
+}
+convex_hulls {
+  index: 125
+  count: 8
+  collision_group: ""
+}
+convex_hulls {
+  index: 133
+  count: 8
+  collision_group: ""
+}
+convex_hulls {
+  index: 141
+  count: 6
+  collision_group: ""
+}
+convex_hulls {
+  index: 147
+  count: 6
+  collision_group: ""
+}
+convex_hulls {
+  index: 153
+  count: 4
+  collision_group: ""
+}
+convex_hulls {
+  index: 157
+  count: 4
+  collision_group: ""
+}
+convex_hulls {
+  index: 161
+  count: 4
+  collision_group: ""
+}
+convex_hulls {
+  index: 165
+  count: 4
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 169
+  count: 3
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 172
+  count: 3
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 175
+  count: 3
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 178
+  count: 3
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 181
+  count: 4
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 185
+  count: 4
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 189
+  count: 10
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 199
+  count: 10
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 209
+  count: 9
+  collision_group: ""
+}
+convex_hulls {
+  index: 218
+  count: 10
+  collision_group: ""
+}
+convex_hulls {
+  index: 228
+  count: 11
+  collision_group: ""
+}
+convex_hulls {
+  index: 239
+  count: 16
+  collision_group: ""
+}
+convex_hulls {
+  index: 255
+  count: 14
+  collision_group: ""
+}
+convex_hulls {
+  index: 269
+  count: 14
+  collision_group: ""
+}
+convex_hulls {
+  index: 283
+  count: 14
+  collision_group: ""
+}
+convex_hulls {
+  index: 297
+  count: 14
+  collision_group: ""
+}
+convex_hulls {
+  index: 311
+  count: 12
+  collision_group: ""
+}
+convex_hulls {
+  index: 323
+  count: 15
+  collision_group: ""
+}
+convex_hulls {
+  index: 338
+  count: 15
+  collision_group: ""
+}
+convex_hulls {
+  index: 353
+  count: 15
+  collision_group: ""
+}
+convex_hulls {
+  index: 368
+  count: 8
+  collision_group: ""
+}
+convex_hulls {
+  index: 376
+  count: 4
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 380
+  count: 4
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 384
+  count: 4
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 388
+  count: 4
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 392
+  count: 4
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 396
+  count: 4
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 400
+  count: 4
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 404
+  count: 8
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 412
+  count: 8
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 420
+  count: 5
+  collision_group: ""
+}
+convex_hulls {
+  index: 425
+  count: 10
+  collision_group: ""
+}
+convex_hulls {
+  index: 435
+  count: 10
+  collision_group: ""
+}
+convex_hulls {
+  index: 445
+  count: 14
+  collision_group: ""
+}
+convex_hulls {
+  index: 459
+  count: 15
+  collision_group: ""
+}
+convex_hulls {
+  index: 474
+  count: 15
+  collision_group: ""
+}
+convex_hulls {
+  index: 489
+  count: 15
+  collision_group: ""
+}
+convex_hulls {
+  index: 504
+  count: 15
+  collision_group: ""
+}
+convex_hulls {
+  index: 519
+  count: 8
+  collision_group: ""
+}
+convex_hulls {
+  index: 527
+  count: 12
+  collision_group: ""
+}
+convex_hulls {
+  index: 539
+  count: 8
+  collision_group: ""
+}
+convex_hulls {
+  index: 547
+  count: 8
+  collision_group: ""
+}
+convex_hulls {
+  index: 555
+  count: 6
+  collision_group: ""
+}
+convex_hulls {
+  index: 561
+  count: 4
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 565
+  count: 7
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 572
+  count: 4
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 576
+  count: 7
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 583
+  count: 10
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 593
+  count: 9
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 602
+  count: 6
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 608
+  count: 9
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 617
+  count: 12
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 629
+  count: 10
+  collision_group: ""
+}
+convex_hulls {
+  index: 639
+  count: 10
+  collision_group: ""
+}
+convex_hulls {
+  index: 649
+  count: 14
+  collision_group: ""
+}
+convex_hulls {
+  index: 663
+  count: 10
+  collision_group: ""
+}
+convex_hulls {
+  index: 673
+  count: 14
+  collision_group: ""
+}
+convex_hulls {
+  index: 687
+  count: 9
+  collision_group: ""
+}
+convex_hulls {
+  index: 696
+  count: 16
+  collision_group: ""
+}
+convex_hulls {
+  index: 712
+  count: 16
+  collision_group: ""
+}
+convex_hulls {
+  index: 728
+  count: 6
+  collision_group: ""
+}
+convex_hulls {
+  index: 734
+  count: 8
+  collision_group: ""
+}
+convex_hulls {
+  index: 742
+  count: 6
+  collision_group: ""
+}
+convex_hulls {
+  index: 748
+  count: 4
+  collision_group: ""
+}
+convex_hulls {
+  index: 752
+  count: 8
+  collision_group: ""
+}
+convex_hulls {
+  index: 760
+  count: 4
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 764
+  count: 3
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 767
+  count: 3
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 770
+  count: 3
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 773
+  count: 3
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 776
+  count: 4
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 780
+  count: 4
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 784
+  count: 10
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 794
+  count: 10
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 804
+  count: 10
+  collision_group: ""
+}
+convex_hulls {
+  index: 814
+  count: 10
+  collision_group: ""
+}
+convex_hulls {
+  index: 824
+  count: 11
+  collision_group: ""
+}
+convex_hulls {
+  index: 835
+  count: 16
+  collision_group: ""
+}
+convex_hulls {
+  index: 851
+  count: 14
+  collision_group: ""
+}
+convex_hulls {
+  index: 865
+  count: 9
+  collision_group: ""
+}
+convex_hulls {
+  index: 874
+  count: 16
+  collision_group: ""
+}
+convex_hulls {
+  index: 890
+  count: 16
+  collision_group: ""
+}
+convex_hulls {
+  index: 906
+  count: 8
+  collision_group: ""
+}
+convex_hulls {
+  index: 914
+  count: 4
+  collision_group: ""
+}
+convex_hulls {
+  index: 918
+  count: 8
+  collision_group: ""
+}
+convex_hulls {
+  index: 926
+  count: 0
+  collision_group: ""
+}
+convex_hulls {
+  index: 926
+  count: 8
+  collision_group: ""
+}
+convex_hulls {
+  index: 934
+  count: 4
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 938
+  count: 4
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 942
+  count: 4
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 946
+  count: 4
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 950
+  count: 4
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 954
+  count: 4
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 958
+  count: 4
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 962
+  count: 8
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 970
+  count: 8
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 978
+  count: 13
+  collision_group: ""
+}
+convex_hulls {
+  index: 991
+  count: 12
+  collision_group: ""
+}
+convex_hulls {
+  index: 1003
+  count: 8
+  collision_group: ""
+}
+convex_hulls {
+  index: 1011
+  count: 8
+  collision_group: ""
+}
+convex_hulls {
+  index: 1019
+  count: 9
+  collision_group: ""
+}
+convex_hulls {
+  index: 1028
+  count: 9
+  collision_group: ""
+}
+convex_hulls {
+  index: 1037
+  count: 10
+  collision_group: ""
+}
+convex_hulls {
+  index: 1047
+  count: 4
+  collision_group: ""
+}
+convex_hulls {
+  index: 1051
+  count: 4
+  collision_group: ""
+}
+convex_hulls {
+  index: 1055
+  count: 14
+  collision_group: ""
+}
+convex_hulls {
+  index: 1069
+  count: 10
+  collision_group: ""
+}
+convex_hulls {
+  index: 1079
+  count: 10
+  collision_group: ""
+}
+convex_hulls {
+  index: 1089
+  count: 10
+  collision_group: ""
+}
+convex_hulls {
+  index: 1099
+  count: 4
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 1103
+  count: 7
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 1110
+  count: 4
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 1114
+  count: 7
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 1121
+  count: 10
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 1131
+  count: 10
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 1141
+  count: 7
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 1148
+  count: 10
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 1158
+  count: 13
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 1171
+  count: 12
+  collision_group: ""
+}
+convex_hulls {
+  index: 1183
+  count: 10
+  collision_group: ""
+}
+convex_hulls {
+  index: 1193
+  count: 8
+  collision_group: ""
+}
+convex_hulls {
+  index: 1201
+  count: 9
+  collision_group: ""
+}
+convex_hulls {
+  index: 1210
+  count: 8
+  collision_group: ""
+}
+convex_hulls {
+  index: 1218
+  count: 9
+  collision_group: ""
+}
+convex_hulls {
+  index: 1227
+  count: 10
+  collision_group: ""
+}
+convex_hulls {
+  index: 1237
+  count: 4
+  collision_group: ""
+}
+convex_hulls {
+  index: 1241
+  count: 4
+  collision_group: ""
+}
+convex_hulls {
+  index: 1245
+  count: 14
+  collision_group: ""
+}
+convex_hulls {
+  index: 1259
+  count: 4
+  collision_group: ""
+}
+convex_hulls {
+  index: 1263
+  count: 4
+  collision_group: ""
+}
+convex_hulls {
+  index: 1267
+  count: 4
+  collision_group: ""
+}
+convex_hulls {
+  index: 1271
+  count: 4
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 1275
+  count: 3
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 1278
+  count: 3
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 1281
+  count: 3
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 1284
+  count: 3
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 1287
+  count: 4
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 1291
+  count: 4
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 1295
+  count: 10
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 1305
+  count: 10
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 1315
+  count: 8
+  collision_group: ""
+}
+convex_hulls {
+  index: 1323
+  count: 10
+  collision_group: ""
+}
+convex_hulls {
+  index: 1333
+  count: 6
+  collision_group: ""
+}
+convex_hulls {
+  index: 1339
+  count: 10
+  collision_group: ""
+}
+convex_hulls {
+  index: 1349
+  count: 8
+  collision_group: ""
+}
+convex_hulls {
+  index: 1357
+  count: 10
+  collision_group: ""
+}
+convex_hulls {
+  index: 1367
+  count: 8
+  collision_group: ""
+}
+convex_hulls {
+  index: 1375
+  count: 8
+  collision_group: ""
+}
+convex_hulls {
+  index: 1383
+  count: 8
+  collision_group: ""
+}
+convex_hulls {
+  index: 1391
+  count: 8
+  collision_group: ""
+}
+convex_hulls {
+  index: 1399
+  count: 8
+  collision_group: ""
+}
+convex_hulls {
+  index: 1407
+  count: 4
+  collision_group: ""
+}
+convex_hulls {
+  index: 1411
+  count: 4
+  collision_group: ""
+}
+convex_hulls {
+  index: 1415
+  count: 4
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 1419
+  count: 4
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 1423
+  count: 4
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 1427
+  count: 4
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 1431
+  count: 4
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 1435
+  count: 4
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 1439
+  count: 4
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 1443
+  count: 9
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 1452
+  count: 9
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 1461
+  count: 6
+  collision_group: ""
+}
+convex_hulls {
+  index: 1467
+  count: 6
+  collision_group: ""
+}
+convex_hulls {
+  index: 1473
+  count: 6
+  collision_group: ""
+}
+convex_hulls {
+  index: 1479
+  count: 9
+  collision_group: ""
+}
+convex_hulls {
+  index: 1488
+  count: 9
+  collision_group: ""
+}
+convex_hulls {
+  index: 1497
+  count: 9
+  collision_group: ""
+}
+convex_hulls {
+  index: 1506
+  count: 9
+  collision_group: ""
+}
+convex_hulls {
+  index: 1515
+  count: 14
+  collision_group: ""
+}
+convex_hulls {
+  index: 1529
+  count: 12
+  collision_group: ""
+}
+convex_hulls {
+  index: 1541
+  count: 12
+  collision_group: ""
+}
+convex_hulls {
+  index: 1553
+  count: 12
+  collision_group: ""
+}
+convex_hulls {
+  index: 1565
+  count: 12
+  collision_group: ""
+}
+convex_hulls {
+  index: 1577
+  count: 14
+  collision_group: ""
+}
+convex_hulls {
+  index: 1591
+  count: 4
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 1595
+  count: 7
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 1602
+  count: 4
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 1606
+  count: 7
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 1613
+  count: 10
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 1623
+  count: 9
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 1632
+  count: 6
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 1638
+  count: 9
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 1647
+  count: 12
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 1659
+  count: 8
+  collision_group: ""
+}
+convex_hulls {
+  index: 1667
+  count: 8
+  collision_group: ""
+}
+convex_hulls {
+  index: 1675
+  count: 8
+  collision_group: ""
+}
+convex_hulls {
+  index: 1683
+  count: 6
+  collision_group: "danger"
+}
+convex_hulls {
+  index: 1689
+  count: 6
+  collision_group: "danger"
+}
+convex_hulls {
+  index: 1695
+  count: 8
+  collision_group: ""
+}
+convex_hulls {
+  index: 1703
+  count: 6
+  collision_group: ""
+}
+convex_hulls {
+  index: 1709
+  count: 14
+  collision_group: ""
+}
+convex_hulls {
+  index: 1723
+  count: 12
+  collision_group: ""
+}
+convex_hulls {
+  index: 1735
+  count: 12
+  collision_group: ""
+}
+convex_hulls {
+  index: 1747
+  count: 12
+  collision_group: ""
+}
+convex_hulls {
+  index: 1759
+  count: 12
+  collision_group: ""
+}
+convex_hulls {
+  index: 1771
+  count: 14
+  collision_group: ""
+}
+convex_hulls {
+  index: 1785
+  count: 4
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 1789
+  count: 3
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 1792
+  count: 3
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 1795
+  count: 3
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 1798
+  count: 3
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 1801
+  count: 4
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 1805
+  count: 4
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 1809
+  count: 10
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 1819
+  count: 10
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 1829
+  count: 9
+  collision_group: ""
+}
+convex_hulls {
+  index: 1838
+  count: 8
+  collision_group: ""
+}
+convex_hulls {
+  index: 1846
+  count: 9
+  collision_group: ""
+}
+convex_hulls {
+  index: 1855
+  count: 6
+  collision_group: ""
+}
+convex_hulls {
+  index: 1861
+  count: 6
+  collision_group: ""
+}
+convex_hulls {
+  index: 1867
+  count: 6
+  collision_group: ""
+}
+convex_hulls {
+  index: 1873
+  count: 6
+  collision_group: ""
+}
+convex_hulls {
+  index: 1879
+  count: 12
+  collision_group: ""
+}
+convex_hulls {
+  index: 1891
+  count: 9
+  collision_group: ""
+}
+convex_hulls {
+  index: 1900
+  count: 9
+  collision_group: ""
+}
+convex_hulls {
+  index: 1909
+  count: 10
+  collision_group: ""
+}
+convex_hulls {
+  index: 1919
+  count: 6
+  collision_group: ""
+}
+convex_hulls {
+  index: 1925
+  count: 12
+  collision_group: ""
+}
+convex_hulls {
+  index: 1937
+  count: 4
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 1941
+  count: 4
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 1945
+  count: 4
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 1949
+  count: 4
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 1953
+  count: 4
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 1957
+  count: 4
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 1961
+  count: 4
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 1965
+  count: 9
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 1974
+  count: 9
+  collision_group: "ground"
+}
+convex_hulls {
+  index: 1983
+  count: 9
+  collision_group: ""
+}
+convex_hulls {
+  index: 1992
+  count: 8
+  collision_group: ""
+}
+convex_hulls {
+  index: 2000
+  count: 9
+  collision_group: ""
+}
+convex_hulls {
+  index: 2009
+  count: 4
+  collision_group: ""
+}
+convex_hulls {
+  index: 2013
+  count: 4
+  collision_group: ""
+}
+convex_hulls {
+  index: 2017
+  count: 4
+  collision_group: ""
+}
+convex_hulls {
+  index: 2021
+  count: 4
+  collision_group: ""
+}
+convex_hulls {
+  index: 2025
+  count: 11
+  collision_group: ""
+}
+convex_hulls {
+  index: 2036
+  count: 8
+  collision_group: ""
+}
+convex_hulls {
+  index: 2044
+  count: 8
+  collision_group: ""
+}
+convex_hulls {
+  index: 2052
+  count: 8
+  collision_group: ""
+}
+convex_hulls {
+  index: 2060
+  count: 9
+  collision_group: ""
+}
+convex_hulls {
+  index: 2069
+  count: 10
+  collision_group: ""
+}
+collision_groups: "danger"
+collision_groups: "ground"
+extrude_borders: 1
+inner_padding: 0
+sprite_trim_mode: SPRITE_TRIM_MODE_OFF

binární
examples/tilemap/collisions/tilesource.png