summaryrefslogtreecommitdiff
path: root/src/level.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/level.hpp')
-rw-r--r--src/level.hpp67
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