Mercurial > projects > myrrdin
annotate src/tilemap.d @ 4:292df259cc85
view + sprite consumers, animated sprite working
author | fred@reichbier.de |
---|---|
date | Fri, 18 Jul 2008 16:12:41 +0200 |
parents | a9af6ec19195 |
children |
rev | line source |
---|---|
0 | 1 module tilemap; |
2 | |
3 import tango.math.Math; | |
4 | |
5 import dsfml.window.all; | |
6 import dsfml.system.all; | |
7 import dsfml.graphics.all; | |
8 | |
9 import tileset; | |
10 | |
11 typedef Sprite[] SpriteArray; | |
12 | |
13 class Tilemap { | |
1 | 14 public int[int][int][int] map; // Layer: x: y: Tile-ID |
3 | 15 public Vector2i[int] layer_tsizes; // Layer: Tile size |
4
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
3
diff
changeset
|
16 public Tileset tileset; |
0 | 17 public int width, height, tilewidth, tileheight; |
18 | |
19 this(Tileset tileset, int width, int height, int tilewidth, int tileheight) { | |
20 this.tileset = tileset; | |
21 this.width = width; | |
22 this.height = height; | |
23 this.tilewidth = tilewidth; | |
24 this.tileheight = tileheight; | |
25 } | |
26 | |
3 | 27 Vector2i real_to_tile(int layer, int real_x, int real_y) { |
28 return Vector2i(rndint(floor(real_x / this.layer_tsizes[layer].x)), rndint(floor(real_y / this.layer_tsizes[layer].y))); | |
0 | 29 } |
30 | |
3 | 31 Vector2i tile_to_real(int layer, int tile_x, int tile_y) { |
32 return Vector2i(tile_x*this.layer_tsizes[layer].x, tile_y*this.layer_tsizes[layer].y); | |
0 | 33 } |
34 | |
35 SpriteArray get_sprites() { | |
36 SpriteArray sprites; | |
37 Sprite sprite; | |
3 | 38 int layer_id=0; |
39 Vector2i pos; | |
1 | 40 foreach(int[int][int] layer; map) { |
41 for(int x=0; x<width; x++) { | |
42 if(x in layer) { | |
43 for(int y=0; y<height; y++) { | |
44 if(y in layer[x]) { | |
45 sprite = new Sprite; | |
3 | 46 pos = tile_to_real(layer_id, x, y); |
47 sprite.setX(pos.x); | |
48 sprite.setY(pos.y); | |
1 | 49 sprite.setImage(this.tileset.tiles[layer[x][y]]); |
50 sprites ~= sprite; | |
51 } | |
0 | 52 } |
53 } | |
54 } | |
3 | 55 layer_id++; |
0 | 56 } |
57 return sprites; | |
58 } | |
59 } |