#pragma once #include #include #include #include #include #include "sets/tileset.hpp" namespace silly::editor { struct Tile { std::shared_ptr tile; sf::Vector2i position; float rotation; }; struct TileLayer { std::vector tiles; TilesetTileType type; }; class TileFloor { public: TileFloor(int width, int height) : width(width), height(height) { // creating vectors for every tile type for (int i = 0; i < 2; i++) { this->layers.push_back({{}, (TilesetTileType)i}); } } ~TileFloor() = default; void render(sf::RenderWindow &window) const; void place_tile(std::shared_ptr &tile, const sf::Vector2i &position, const float &rotation); void remove_tile(TilesetTileType type, const sf::Vector2i &position); const int get_width() const; const int get_height() const; const int get_tile_count() const; private: int width, height; int activeLayerIndex = 0; std::vector layers; }; class TileLevel { public: TileLevel(const std::string &name) : name(name) {} ~TileLevel() = default; void add_floor(TileFloor floor); void move_to_floor(int floor_id); TileFloor &get_current_floor(); const int &get_current_floor_index() const; const std::vector &get_floors() const; const std::string &get_name() const; private: const std::string name; int current_floor = 0; std::vector floors; }; }