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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
1 module tilemap;
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
2
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
3 import tango.math.Math;
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
4
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
5 import dsfml.window.all;
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
6 import dsfml.system.all;
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
7 import dsfml.graphics.all;
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
8
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
9 import tileset;
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
10
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
11 typedef Sprite[] SpriteArray;
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
12
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
13 class Tilemap {
1
f193d0c14685 layer support
fred@reichbier.de
parents: 0
diff changeset
14 public int[int][int][int] map; // Layer: x: y: Tile-ID
3
a9af6ec19195 working map and tileset loading
fred@reichbier.de
parents: 1
diff changeset
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
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
17 public int width, height, tilewidth, tileheight;
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
18
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
19 this(Tileset tileset, int width, int height, int tilewidth, int tileheight) {
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
20 this.tileset = tileset;
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
21 this.width = width;
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
22 this.height = height;
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
23 this.tilewidth = tilewidth;
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
24 this.tileheight = tileheight;
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
25 }
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
26
3
a9af6ec19195 working map and tileset loading
fred@reichbier.de
parents: 1
diff changeset
27 Vector2i real_to_tile(int layer, int real_x, int real_y) {
a9af6ec19195 working map and tileset loading
fred@reichbier.de
parents: 1
diff changeset
28 return Vector2i(rndint(floor(real_x / this.layer_tsizes[layer].x)), rndint(floor(real_y / this.layer_tsizes[layer].y)));
0
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
29 }
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
30
3
a9af6ec19195 working map and tileset loading
fred@reichbier.de
parents: 1
diff changeset
31 Vector2i tile_to_real(int layer, int tile_x, int tile_y) {
a9af6ec19195 working map and tileset loading
fred@reichbier.de
parents: 1
diff changeset
32 return Vector2i(tile_x*this.layer_tsizes[layer].x, tile_y*this.layer_tsizes[layer].y);
0
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
33 }
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
34
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
35 SpriteArray get_sprites() {
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
36 SpriteArray sprites;
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
37 Sprite sprite;
3
a9af6ec19195 working map and tileset loading
fred@reichbier.de
parents: 1
diff changeset
38 int layer_id=0;
a9af6ec19195 working map and tileset loading
fred@reichbier.de
parents: 1
diff changeset
39 Vector2i pos;
1
f193d0c14685 layer support
fred@reichbier.de
parents: 0
diff changeset
40 foreach(int[int][int] layer; map) {
f193d0c14685 layer support
fred@reichbier.de
parents: 0
diff changeset
41 for(int x=0; x<width; x++) {
f193d0c14685 layer support
fred@reichbier.de
parents: 0
diff changeset
42 if(x in layer) {
f193d0c14685 layer support
fred@reichbier.de
parents: 0
diff changeset
43 for(int y=0; y<height; y++) {
f193d0c14685 layer support
fred@reichbier.de
parents: 0
diff changeset
44 if(y in layer[x]) {
f193d0c14685 layer support
fred@reichbier.de
parents: 0
diff changeset
45 sprite = new Sprite;
3
a9af6ec19195 working map and tileset loading
fred@reichbier.de
parents: 1
diff changeset
46 pos = tile_to_real(layer_id, x, y);
a9af6ec19195 working map and tileset loading
fred@reichbier.de
parents: 1
diff changeset
47 sprite.setX(pos.x);
a9af6ec19195 working map and tileset loading
fred@reichbier.de
parents: 1
diff changeset
48 sprite.setY(pos.y);
1
f193d0c14685 layer support
fred@reichbier.de
parents: 0
diff changeset
49 sprite.setImage(this.tileset.tiles[layer[x][y]]);
f193d0c14685 layer support
fred@reichbier.de
parents: 0
diff changeset
50 sprites ~= sprite;
f193d0c14685 layer support
fred@reichbier.de
parents: 0
diff changeset
51 }
0
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
52 }
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
53 }
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
54 }
3
a9af6ec19195 working map and tileset loading
fred@reichbier.de
parents: 1
diff changeset
55 layer_id++;
0
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
56 }
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
57 return sprites;
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
58 }
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
59 }