A library for parsing Tiled maps.
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

set tileset when looking up a tile

this avoids creating a copy of the tileset on every tile beforehand, but
makes a shallow copy when looking up a tile.

this is a breaking change as we now return the Tile and Tileset in a
result struct instead of the Tile itself...which typing that out I don't
know if I like

+22 -19
+8 -2
src/Map.zig
··· 100 100 self.properties.deinit(allocator); 101 101 } 102 102 103 - pub fn getTile(self: Map, gid: u32) ?Tile { 103 + pub const TileResult = struct { 104 + tile: Tile, 105 + tileset: Tileset, 106 + }; 107 + 108 + pub fn getTile(self: Map, gid: u32) ?TileResult { 104 109 if (gid == 0) return null; 105 110 106 111 var i = self.tilesets.items.len; ··· 108 113 i -= 1; 109 114 const tileset = self.tilesets.items[i]; 110 115 if (tileset.first_gid <= gid) { 111 - return tileset.tiles.get(gid - tileset.first_gid); 116 + const tile = tileset.tiles.get(gid - tileset.first_gid) orelse return null; 117 + return .{ .tile = tile, .tileset = tileset }; 112 118 } 113 119 } 114 120 return null;
-5
src/tileset.zig
··· 78 78 .id = tile_id, 79 79 .x = tile_x, 80 80 .y = tile_y, 81 - 82 - .tileset = tileset, 83 81 }; 84 82 } 85 83 }; ··· 161 159 width: u32 = 0, 162 160 height: u32 = 0, 163 161 animation: ?[]const Frame = null, 164 - tileset: Tileset, 165 162 166 163 pub const JsonTile = struct { 167 164 id: u32, ··· 180 177 .width = json_tile.width orelse tileset.tile_width, 181 178 .height = json_tile.height orelse tileset.tile_height, 182 179 .animation = if (json_tile.animation) |animation| try allocator.dupe(Frame, animation) else null, 183 - .tileset = tileset, 184 180 }; 185 181 } 186 182 ··· 192 188 return .{ 193 189 .id = try innerParseFromValue(u32, allocator, source.object.get("id").?, options), 194 190 .animation = if (source.object.get("animation")) |animation| try innerParseFromValue([]const Frame, allocator, animation, options) else null, 195 - .tileset = undefined, 196 191 }; 197 192 } 198 193 };
+14 -12
test/maps.zig
··· 116 116 try expectEqual(null, bad_tile); 117 117 118 118 const foo = map.getTile(2).?; 119 - try expectEqual(2 - tileset.first_gid, foo.id); 120 - try expectEqual(16, foo.x); 121 - try expectEqual(0, foo.y); 119 + try expectEqual(2 - tileset.first_gid, foo.tile.id); 120 + try expectEqual(16, foo.tile.x); 121 + try expectEqual(0, foo.tile.y); 122 122 123 - const tile = map.getTile(4).?; 124 - try expectEqual(3, tile.id); 125 - try expectEqual(16, tile.x); 126 - try expectEqual(16, tile.y); 127 - try expectEqual(16, tile.width); 128 - try expectEqual(16, tile.height); 123 + const result = map.getTile(4).?; 124 + try expectEqual(3, result.tile.id); 125 + try expectEqual(16, result.tile.x); 126 + try expectEqual(16, result.tile.y); 127 + try expectEqual(16, result.tile.width); 128 + try expectEqual(16, result.tile.height); 129 129 130 - try expectEqual(tileset.first_gid, tile.tileset.first_gid); 130 + try expectEqual(tileset.first_gid, result.tileset.first_gid); 131 131 132 132 try expectEqual(480, map.pixelWidth()); 133 133 try expectEqual(480, map.pixelHeight()); ··· 179 179 try expectEqual(null, map.getTile(0)); 180 180 181 181 const tile_from_first = map.getTile(2).?; 182 - try expectEqual(1, tile_from_first.id); 182 + try expectEqual(1, tile_from_first.tile.id); 183 + try expectEqual(1, tile_from_first.tileset.first_gid); 183 184 184 185 const tile_from_second = map.getTile(5).?; 185 - try expectEqual(0, tile_from_second.id); 186 + try expectEqual(0, tile_from_second.tile.id); 187 + try expectEqual(5, tile_from_second.tileset.first_gid); 186 188 187 189 try expectEqual(null, map.getTile(9999)); 188 190 }