diff options
Diffstat (limited to 'src/level.hpp')
| -rw-r--r-- | src/level.hpp | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/src/level.hpp b/src/level.hpp new file mode 100644 index 0000000..2364413 --- /dev/null +++ b/src/level.hpp @@ -0,0 +1,67 @@ +#pragma once + +#include <SFML/Graphics/RenderWindow.hpp> +#include <SFML/System/Vector2.hpp> +#include <memory> +#include <string> +#include <vector> + +#include "tileset.hpp" + +namespace silly::editor { + struct Tile { + std::shared_ptr<TilesetTile> tile; + sf::Vector2i position; + float rotation; + }; + + struct TileLayer { + std::vector<Tile> 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<TilesetTile> &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; + + private: + int width, height; + int activeLayerIndex; + std::vector<TileLayer> 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 std::vector<TileFloor> &get_floors() const; + + const std::string &get_name() const; + + private: + const std::string name; + + int current_floor; + std::vector<TileFloor> floors; + }; +}
\ No newline at end of file |
