From 57fe8f3c4124819b95164547333a33f4c45eac8d Mon Sep 17 00:00:00 2001 From: Kelly Rauchenberger Date: Sun, 10 Mar 2019 12:07:40 -0400 Subject: Editor now allows tile placement You can scroll through the three layers (map, track, object) with Z/X. You can swap between focusing on the map and the tileset with TAB. You can place tiles with enter or space. Pretty rudimentary, but it's a start. --- src/level.h | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 53 insertions(+), 11 deletions(-) (limited to 'src/level.h') 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 @@ #include "vector.h" #include "consts.h" #include "tileset.h" +#include "enums.h" class Level { public: - Level() + Level( + SDL_Renderer* ren) : + mapTileset_(ren, "map.png"), + trackTileset_(ren, "track.png"), + objectTileset_(ren, "object.png") { - size_ = LEVEL_SIZE; + size_ = MAP_SIZE; - tiles_.resize(size_.w() * size_.h()); + mapTiles_.resize(size_.w() * size_.h()); + trackTiles_.resize(size_.w() * size_.h()); + objectTiles_.resize(size_.w() * size_.h()); } const vec2s& getSize() const @@ -22,19 +29,48 @@ public: return size_; } - size_t at(vec2s pos) const + size_t at(vec2s pos, Layer layer = Layer::map) const { - return at(pos.x(), pos.y()); + return at(pos.x(), pos.y(), layer); } - size_t at(size_t x, size_t y) const + size_t& at(vec2s pos, Layer layer = Layer::map) { - return tiles_.at(x + size_.w() * y); + return at(pos.x(), pos.y(), layer); } - const Tileset& getTileset() const + size_t at(size_t x, size_t y, Layer layer = Layer::map) const { - return tileset_; + 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; @@ -42,8 +78,14 @@ public: private: vec2s size_; - std::vector tiles_; - Tileset tileset_; + + std::vector mapTiles_; + std::vector trackTiles_; + std::vector objectTiles_; + + Tileset mapTileset_; + Tileset trackTileset_; + Tileset objectTileset_; }; #endif /* end of include guard: LEVEL_H_678CFCCF */ -- cgit 1.4.1