#ifndef LEVEL_H_678CFCCF #define LEVEL_H_678CFCCF #include #include "renderer.h" #include "vector.h" #include "consts.h" #include "tileset.h" #include "enums.h" class Level { public: Level( SDL_Renderer* ren) : mapTileset_(ren, "map.png"), trackTileset_(ren, "track.png"), objectTileset_(ren, "object.png") { size_ = MAP_SIZE; mapTiles_.resize(size_.w() * size_.h()); trackTiles_.resize(size_.w() * size_.h()); objectTiles_.resize(size_.w() * size_.h()); } const vec2s& getSize() const { return size_; } size_t at(vec2s pos, Layer layer = Layer::map) const { return at(pos.x(), pos.y(), layer); } size_t& at(vec2s pos, Layer layer = Layer::map) { return at(pos.x(), pos.y(), layer); } size_t at(size_t x, size_t y, Layer layer = Layer::map) const { size_t index = x + size_.w() * y; switch (layer) { case Layer::map: return mapTiles_.at(index); case Layer::track: return trackTiles_.at(index); case Layer::object: return objectTiles_.at(index); } } size_t& at(size_t x, size_t y, Layer layer = Layer::map) { size_t index = x + size_.w() * y; switch (layer) { case Layer::map: return mapTiles_.at(index); case Layer::track: return trackTiles_.at(index); case Layer::object: return objectTiles_.at(index); } } const Tileset& getTileset(Layer layer) const { switch (layer) { case Layer::map: return mapTileset_; case Layer::track: return trackTileset_; case Layer::object: return objectTileset_; } } texture_ptr render(SDL_Renderer* ren, Layer layer) const; private: vec2s size_; std::vector mapTiles_; std::vector trackTiles_; std::vector objectTiles_; Tileset mapTileset_; Tileset trackTileset_; Tileset objectTileset_; }; #endif /* end of include guard: LEVEL_H_678CFCCF */