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 */ |
