diff options
Diffstat (limited to 'src/level.h')
-rw-r--r-- | src/level.h | 64 |
1 files changed, 53 insertions, 11 deletions
diff --git a/src/level.h b/src/level.h index bc05837..9b01f64 100644 --- a/src/level.h +++ b/src/level.h | |||
@@ -6,15 +6,22 @@ | |||
6 | #include "vector.h" | 6 | #include "vector.h" |
7 | #include "consts.h" | 7 | #include "consts.h" |
8 | #include "tileset.h" | 8 | #include "tileset.h" |
9 | #include "enums.h" | ||
9 | 10 | ||
10 | class Level { | 11 | class Level { |
11 | public: | 12 | public: |
12 | 13 | ||
13 | Level() | 14 | Level( |
15 | SDL_Renderer* ren) : | ||
16 | mapTileset_(ren, "map.png"), | ||
17 | trackTileset_(ren, "track.png"), | ||
18 | objectTileset_(ren, "object.png") | ||
14 | { | 19 | { |
15 | size_ = LEVEL_SIZE; | 20 | size_ = MAP_SIZE; |
16 | 21 | ||
17 | tiles_.resize(size_.w() * size_.h()); | 22 | mapTiles_.resize(size_.w() * size_.h()); |
23 | trackTiles_.resize(size_.w() * size_.h()); | ||
24 | objectTiles_.resize(size_.w() * size_.h()); | ||
18 | } | 25 | } |
19 | 26 | ||
20 | const vec2s& getSize() const | 27 | const vec2s& getSize() const |
@@ -22,19 +29,48 @@ public: | |||
22 | return size_; | 29 | return size_; |
23 | } | 30 | } |
24 | 31 | ||
25 | size_t at(vec2s pos) const | 32 | size_t at(vec2s pos, Layer layer = Layer::map) const |
26 | { | 33 | { |
27 | return at(pos.x(), pos.y()); | 34 | return at(pos.x(), pos.y(), layer); |
28 | } | 35 | } |
29 | 36 | ||
30 | size_t at(size_t x, size_t y) const | 37 | size_t& at(vec2s pos, Layer layer = Layer::map) |
31 | { | 38 | { |
32 | return tiles_.at(x + size_.w() * y); | 39 | return at(pos.x(), pos.y(), layer); |
33 | } | 40 | } |
34 | 41 | ||
35 | const Tileset& getTileset() const | 42 | size_t at(size_t x, size_t y, Layer layer = Layer::map) const |
36 | { | 43 | { |
37 | return tileset_; | 44 | size_t index = x + size_.w() * y; |
45 | |||
46 | switch (layer) | ||
47 | { | ||
48 | case Layer::map: return mapTiles_.at(index); | ||
49 | case Layer::track: return trackTiles_.at(index); | ||
50 | case Layer::object: return objectTiles_.at(index); | ||
51 | } | ||
52 | } | ||
53 | |||
54 | size_t& at(size_t x, size_t y, Layer layer = Layer::map) | ||
55 | { | ||
56 | size_t index = x + size_.w() * y; | ||
57 | |||
58 | switch (layer) | ||
59 | { | ||
60 | case Layer::map: return mapTiles_.at(index); | ||
61 | case Layer::track: return trackTiles_.at(index); | ||
62 | case Layer::object: return objectTiles_.at(index); | ||
63 | } | ||
64 | } | ||
65 | |||
66 | const Tileset& getTileset(Layer layer) const | ||
67 | { | ||
68 | switch (layer) | ||
69 | { | ||
70 | case Layer::map: return mapTileset_; | ||
71 | case Layer::track: return trackTileset_; | ||
72 | case Layer::object: return objectTileset_; | ||
73 | } | ||
38 | } | 74 | } |
39 | 75 | ||
40 | texture_ptr render(SDL_Renderer* ren, Layer layer) const; | 76 | texture_ptr render(SDL_Renderer* ren, Layer layer) const; |
@@ -42,8 +78,14 @@ public: | |||
42 | private: | 78 | private: |
43 | 79 | ||
44 | vec2s size_; | 80 | vec2s size_; |
45 | std::vector<size_t> tiles_; | 81 | |
46 | Tileset tileset_; | 82 | std::vector<size_t> mapTiles_; |
83 | std::vector<size_t> trackTiles_; | ||
84 | std::vector<size_t> objectTiles_; | ||
85 | |||
86 | Tileset mapTileset_; | ||
87 | Tileset trackTileset_; | ||
88 | Tileset objectTileset_; | ||
47 | }; | 89 | }; |
48 | 90 | ||
49 | #endif /* end of include guard: LEVEL_H_678CFCCF */ | 91 | #endif /* end of include guard: LEVEL_H_678CFCCF */ |