Mercurial > projects > myrrdin
changeset 3:a9af6ec19195
working map and tileset loading
author | fred@reichbier.de |
---|---|
date | Thu, 17 Jul 2008 21:34:53 +0200 |
parents | fc2f936a961c |
children | 292df259cc85 |
files | bin/tileset-example.xml src/test.d src/tilemap.d src/xmlmap.d |
diffstat | 4 files changed, 27 insertions(+), 23 deletions(-) [+] |
line wrap: on
line diff
--- a/bin/tileset-example.xml Thu Jul 17 21:06:43 2008 +0200 +++ b/bin/tileset-example.xml Thu Jul 17 21:34:53 2008 +0200 @@ -1,3 +1,4 @@ <tileset version="1"> <tile id="0" filename="grass.png" /> + <tile id="1" filename="grass-stone-water-l.png" /> </tileset>
--- a/src/test.d Thu Jul 17 21:06:43 2008 +0200 +++ b/src/test.d Thu Jul 17 21:34:53 2008 +0200 @@ -16,22 +16,10 @@ int main(char[][] args) { Cache cache = new Cache("gfx"); Tilemap map = parse_map(cache, read_file_contents("map-example.xml")); -/* - Tileset tileset = new Tileset(cache); - Tilemap map = new Tilemap(tileset, 5, 5, 32, 32); - tileset.add_tile(0, "grass.png"); - tileset.add_tile(1, "grass-stone-water-east.png"); - for(int x=0; x < 5; x++) { - for(int y=0; y < 5; y++) { - map.map[0][x][y] = 0; - } - } - map.map[1][1][1] = 1; - Renderer render = new Renderer("Blubb", 600, 480, 32); TileConsumer consumer = new TileConsumer(render, map); render.add_consumer(consumer); - render.mainloop();*/ + render.mainloop(); return 0; }
--- a/src/tilemap.d Thu Jul 17 21:06:43 2008 +0200 +++ b/src/tilemap.d Thu Jul 17 21:34:53 2008 +0200 @@ -12,6 +12,7 @@ class Tilemap { public int[int][int][int] map; // Layer: x: y: Tile-ID + public Vector2i[int] layer_tsizes; // Layer: Tile size private Tileset tileset; public int width, height, tilewidth, tileheight; @@ -23,35 +24,35 @@ this.tileheight = tileheight; } - void real_to_tile(int real_x, int real_y, inout int tile_x, inout int tile_y) { - tile_x = rndint(floor(real_x / this.tilewidth)); - tile_y = rndint(floor(real_y / this.tileheight)); + Vector2i real_to_tile(int layer, int real_x, int real_y) { + return Vector2i(rndint(floor(real_x / this.layer_tsizes[layer].x)), rndint(floor(real_y / this.layer_tsizes[layer].y))); } - void tile_to_real(int tile_x, int tile_y, inout int real_x, inout int real_y) { - real_x = tile_x*this.tilewidth; - real_y = tile_y*this.tileheight; + Vector2i tile_to_real(int layer, int tile_x, int tile_y) { + return Vector2i(tile_x*this.layer_tsizes[layer].x, tile_y*this.layer_tsizes[layer].y); } SpriteArray get_sprites() { SpriteArray sprites; Sprite sprite; - int real_x, real_y; + int layer_id=0; + Vector2i pos; foreach(int[int][int] layer; map) { for(int x=0; x<width; x++) { if(x in layer) { for(int y=0; y<height; y++) { if(y in layer[x]) { sprite = new Sprite; - tile_to_real(x, y, real_x, real_y); - sprite.setX(real_x); - sprite.setY(real_y); + pos = tile_to_real(layer_id, x, y); + sprite.setX(pos.x); + sprite.setY(pos.y); sprite.setImage(this.tileset.tiles[layer[x][y]]); sprites ~= sprite; } } } } + layer_id++; } return sprites; }
--- a/src/xmlmap.d Thu Jul 17 21:06:43 2008 +0200 +++ b/src/xmlmap.d Thu Jul 17 21:34:53 2008 +0200 @@ -8,6 +8,9 @@ import tango.io.Stdout; // TODO import tools; import imagecache; +import dsfml.system.all; +import Text = tango.text.Util; + alias XmlPath!(char).NodeSet NodeSet; alias Document!(char).Node NodeImpl; @@ -38,9 +41,20 @@ auto tiles_node = root.child.nodes[0]; char[] tileset_file = tiles_node.getAttribute("tileset").value; auto tilemap = new Tilemap(parse_tileset(cache, read_file_contents(tileset_file)), width, height, 32, 32); // TODO: variable tile size + int layer_id=0; foreach(NodeImpl layer_node; tiles_node.query["layer"].nodes) { int tile_width = Integer.parse(layer_node.getAttribute("tilewidth").value); int tile_height = Integer.parse(layer_node.getAttribute("tileheight").value); + tilemap.layer_tsizes[layer_id] = Vector2i(tile_width, tile_height); + char[][] content_ = Text.delimit(Text.trim(layer_node.value), ","); + int i=0; + for(int x=0; x < width; x++) { + for(int y=0; y < height; y++) { + tilemap.map[layer_id][x][y] = Integer.parse(content_[i]); + i++; + } + } + layer_id++; } return tilemap; }