annotate src/tilemap.d @ 1:f193d0c14685

layer support
author fred@reichbier.de
date Thu, 17 Jul 2008 20:19:24 +0200
parents a2d653eb9e99
children a9af6ec19195
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
0
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
15 private Tileset tileset;
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
16 public int width, height, tilewidth, tileheight;
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
17
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
18 this(Tileset tileset, int width, int height, int tilewidth, int tileheight) {
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
19 this.tileset = tileset;
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
20 this.width = width;
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
21 this.height = height;
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
22 this.tilewidth = tilewidth;
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
23 this.tileheight = tileheight;
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
24 }
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
25
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
26 void real_to_tile(int real_x, int real_y, inout int tile_x, inout int tile_y) {
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
27 tile_x = rndint(floor(real_x / this.tilewidth));
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
28 tile_y = rndint(floor(real_y / this.tileheight));
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
29 }
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
30
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
31 void tile_to_real(int tile_x, int tile_y, inout int real_x, inout int real_y) {
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
32 real_x = tile_x*this.tilewidth;
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
33 real_y = tile_y*this.tileheight;
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
34 }
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
35
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
36 SpriteArray get_sprites() {
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
37 SpriteArray sprites;
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
38 Sprite sprite;
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
39 int real_x, real_y;
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;
f193d0c14685 layer support
fred@reichbier.de
parents: 0
diff changeset
46 tile_to_real(x, y, real_x, real_y);
f193d0c14685 layer support
fred@reichbier.de
parents: 0
diff changeset
47 sprite.setX(real_x);
f193d0c14685 layer support
fred@reichbier.de
parents: 0
diff changeset
48 sprite.setY(real_y);
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 }
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
55 }
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
56 return sprites;
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
57 }
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
58 }