summary refs log tree commit diff stats
path: root/src/level.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/level.h')
-rw-r--r--src/level.h64
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
10class Level { 11class Level {
11public: 12public:
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:
42private: 78private:
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 */