From bc9d1725c5cca89f43c8e314e6bb8088f75acf27 Mon Sep 17 00:00:00 2001 From: ilotterytea Date: Sun, 2 Feb 2025 15:08:42 +0500 Subject: feat: a base class for sets --- src/sets/entryset.hpp | 24 ++++++++++++++++++++++++ src/sets/tileset.hpp | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 src/sets/entryset.hpp create mode 100644 src/sets/tileset.hpp (limited to 'src/sets') diff --git a/src/sets/entryset.hpp b/src/sets/entryset.hpp new file mode 100644 index 0000000..aa24b74 --- /dev/null +++ b/src/sets/entryset.hpp @@ -0,0 +1,24 @@ +#pragma once + +#include +#include +#include + +namespace silly::editor { + template + class EntrySet { + public: + EntrySet() = default; + ~EntrySet() = default; + + virtual void add_entry(const std::string &path, Type type) = 0; + virtual void remove_entry(const EntryType &entry) = 0; + + const std::vector> &get_entries() const { + return this->entries; + } + + protected: + std::vector> entries; + }; +} \ No newline at end of file diff --git a/src/sets/tileset.hpp b/src/sets/tileset.hpp new file mode 100644 index 0000000..09799ce --- /dev/null +++ b/src/sets/tileset.hpp @@ -0,0 +1,41 @@ +#pragma once +#include + +#include "entryset.hpp" + +#define TILE_WIDTH 16 +#define TILE_HEIGHT 16 + +namespace silly::editor { + enum TilesetTileType { TILE_FLOOR = 0, TILE_WALL }; + struct TilesetTile { + int id; + sf::Texture texture; + TilesetTileType type; + }; + + class TileSet : public EntrySet { + public: + void add_entry(const std::string &path, TilesetTileType type) override { + TilesetTile tile; + tile.type = type; + tile.id = this->entries.size(); + + if (!tile.texture.loadFromFile(path)) { + // TODO: add logging here + return; + } + + this->entries.push_back(std::make_shared(tile)); + } + + void remove_entry(const TilesetTile &entry) override { + this->entries.resize(std::distance( + this->entries.begin(), + std::remove_if(this->entries.begin(), this->entries.end(), + [&entry](const std::shared_ptr &t) { + return t.get()->id == entry.id; + }))); + } + }; +} \ No newline at end of file -- cgit v1.2.3