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 {
|
|
14 public int[int][int] map;
|
|
15 private Tileset tileset;
|
|
16 public int width, height, tilewidth, tileheight;
|
|
17
|
|
18 this(Tileset tileset, int width, int height, int tilewidth, int tileheight) {
|
|
19 this.tileset = tileset;
|
|
20 this.width = width;
|
|
21 this.height = height;
|
|
22 this.tilewidth = tilewidth;
|
|
23 this.tileheight = tileheight;
|
|
24 }
|
|
25
|
|
26 void real_to_tile(int real_x, int real_y, inout int tile_x, inout int tile_y) {
|
|
27 tile_x = rndint(floor(real_x / this.tilewidth));
|
|
28 tile_y = rndint(floor(real_y / this.tileheight));
|
|
29 }
|
|
30
|
|
31 void tile_to_real(int tile_x, int tile_y, inout int real_x, inout int real_y) {
|
|
32 real_x = tile_x*this.tilewidth;
|
|
33 real_y = tile_y*this.tileheight;
|
|
34 }
|
|
35
|
|
36 SpriteArray get_sprites() {
|
|
37 SpriteArray sprites;
|
|
38 Sprite sprite;
|
|
39 int real_x, real_y;
|
|
40 for(int x=0; x<width; x++) {
|
|
41 if(x in this.map) {
|
|
42 for(int y=0; y<height; y++) {
|
|
43 if(y in this.map[x]) {
|
|
44 sprite = new Sprite;
|
|
45 tile_to_real(x, y, real_x, real_y);
|
|
46 sprite.setX(real_x);
|
|
47 sprite.setY(real_y);
|
|
48 sprite.setImage(this.tileset.tiles[this.map[x][y]]);
|
|
49 sprites ~= sprite;
|
|
50 }
|
|
51 }
|
|
52 }
|
|
53 }
|
|
54 return sprites;
|
|
55 }
|
|
56 }
|