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/editor.cpp | 8 ++++---- src/editor.hpp | 2 +- src/level.cpp | 2 +- src/level.hpp | 2 +- src/package.cpp | 2 +- src/package.hpp | 6 +++--- src/sets/entryset.hpp | 24 ++++++++++++++++++++++++ src/sets/tileset.hpp | 41 +++++++++++++++++++++++++++++++++++++++++ src/tileset.cpp | 31 ------------------------------- src/tileset.hpp | 31 ------------------------------- 10 files changed, 76 insertions(+), 73 deletions(-) create mode 100644 src/sets/entryset.hpp create mode 100644 src/sets/tileset.hpp delete mode 100644 src/tileset.cpp delete mode 100644 src/tileset.hpp diff --git a/src/editor.cpp b/src/editor.cpp index 74326bf..c97f375 100644 --- a/src/editor.cpp +++ b/src/editor.cpp @@ -19,7 +19,7 @@ #include "nfd.h" #include "nfd.hpp" #include "package.hpp" -#include "tileset.hpp" +#include "sets/tileset.hpp" namespace silly::editor { void Editor::update(const sf::Event &event, sf::RenderWindow &window) { @@ -331,8 +331,8 @@ namespace silly::editor { int columns = ImGui::GetContentRegionAvail().x / (imageSize + padding); int count = 0; - for (auto it = this->package.get_tileset().get_tiles().begin(); - it != this->package.get_tileset().get_tiles().end(); ++it) { + for (auto it = this->package.get_tileset().get_entries().begin(); + it != this->package.get_tileset().get_entries().end(); ++it) { if (ImGui::ImageButton(std::to_string(it->get()->id).c_str(), it->get()->texture, sf::Vector2f(imageSize, imageSize))) { @@ -414,7 +414,7 @@ namespace silly::editor { // -- Tile creation -- if (ImGui::Button("Create a new tile")) { - this->package.get_tileset().add_tile(state.path, state.type); + this->package.get_tileset().add_entry(state.path, state.type); ImGui::SetWindowCollapsed(true); } diff --git a/src/editor.hpp b/src/editor.hpp index 02e7d22..a92a6ca 100644 --- a/src/editor.hpp +++ b/src/editor.hpp @@ -9,7 +9,7 @@ #include #include "package.hpp" -#include "tileset.hpp" +#include "sets/tileset.hpp" namespace silly::editor { struct NewTileState { diff --git a/src/level.cpp b/src/level.cpp index 4fc7d2c..39ac4e9 100644 --- a/src/level.cpp +++ b/src/level.cpp @@ -10,7 +10,7 @@ #include #include -#include "tileset.hpp" +#include "sets/tileset.hpp" namespace silly::editor { void TileFloor::render(sf::RenderWindow &window) const { diff --git a/src/level.hpp b/src/level.hpp index 5fbb19b..711a884 100644 --- a/src/level.hpp +++ b/src/level.hpp @@ -6,7 +6,7 @@ #include #include -#include "tileset.hpp" +#include "sets/tileset.hpp" namespace silly::editor { struct Tile { diff --git a/src/package.cpp b/src/package.cpp index a9d51b8..379aaeb 100644 --- a/src/package.cpp +++ b/src/package.cpp @@ -3,7 +3,7 @@ #include namespace silly::editor { - Tileset &LevelPackage::get_tileset() { return this->tileset; } + TileSet &LevelPackage::get_tileset() { return this->tileset; } void LevelPackage::add_level(TileLevel level) { this->levels.push_back(level); diff --git a/src/package.hpp b/src/package.hpp index 0ac25e3..5fa957c 100644 --- a/src/package.hpp +++ b/src/package.hpp @@ -4,7 +4,7 @@ #include #include "level.hpp" -#include "tileset.hpp" +#include "sets/tileset.hpp" namespace silly::editor { class LevelPackage { @@ -12,7 +12,7 @@ namespace silly::editor { LevelPackage(const std::string &name) : name(name) {} ~LevelPackage() = default; - Tileset &get_tileset(); + TileSet &get_tileset(); void add_level(TileLevel level); TileLevel &get_current_level(); @@ -27,7 +27,7 @@ namespace silly::editor { private: const std::string name; - Tileset tileset; + TileSet tileset; std::vector levels; int currentLevelIndex = 0; 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 diff --git a/src/tileset.cpp b/src/tileset.cpp deleted file mode 100644 index 5e5b47a..0000000 --- a/src/tileset.cpp +++ /dev/null @@ -1,31 +0,0 @@ -#include "tileset.hpp" - -#include - -namespace silly::editor { - void Tileset::add_tile(const std::string &path, TilesetTileType type) { - TilesetTile tile; - tile.type = type; - tile.id = this->tiles.size(); - - if (!tile.texture.loadFromFile(path)) { - // TODO: add logging here - return; - } - - this->tiles.push_back(std::make_shared(tile)); - } - - void Tileset::remove_tile(const TilesetTile &tile) { - this->tiles.resize(std::distance( - this->tiles.begin(), - std::remove_if(this->tiles.begin(), this->tiles.end(), - [&tile](const std::shared_ptr &t) { - return t.get()->id == tile.id; - }))); - } - - const std::vector> &Tileset::get_tiles() const { - return this->tiles; - } -} \ No newline at end of file diff --git a/src/tileset.hpp b/src/tileset.hpp deleted file mode 100644 index 58f5bec..0000000 --- a/src/tileset.hpp +++ /dev/null @@ -1,31 +0,0 @@ -#pragma once - -#include -#include -#include -#include - -#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: - Tileset() = default; - ~Tileset() = default; - - void add_tile(const std::string &path, TilesetTileType type); - void remove_tile(const TilesetTile &tile); - const std::vector> &get_tiles() const; - - private: - std::vector> tiles; - }; -} \ No newline at end of file -- cgit v1.2.3