summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorilotterytea <iltsu@alright.party>2025-02-02 15:08:42 +0500
committerilotterytea <iltsu@alright.party>2025-02-02 15:08:57 +0500
commitbc9d1725c5cca89f43c8e314e6bb8088f75acf27 (patch)
tree26acb17b7232bd2fb7d065299b2c2e0927247eeb
parent34f081520c754cc20c2ec929be7798fe3f3806e1 (diff)
feat: a base class for sets
-rw-r--r--src/editor.cpp8
-rw-r--r--src/editor.hpp2
-rw-r--r--src/level.cpp2
-rw-r--r--src/level.hpp2
-rw-r--r--src/package.cpp2
-rw-r--r--src/package.hpp6
-rw-r--r--src/sets/entryset.hpp24
-rw-r--r--src/sets/tileset.hpp41
-rw-r--r--src/tileset.cpp31
-rw-r--r--src/tileset.hpp31
10 files changed, 76 insertions, 73 deletions
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 <string>
#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 <iterator>
#include <string>
-#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 <string>
#include <vector>
-#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 <algorithm>
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 <vector>
#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<TileLevel> 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 <memory>
+#include <string>
+#include <vector>
+
+namespace silly::editor {
+ template <typename EntryType, typename Type>
+ 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<std::shared_ptr<EntryType>> &get_entries() const {
+ return this->entries;
+ }
+
+ protected:
+ std::vector<std::shared_ptr<EntryType>> 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 <SFML/Graphics/Texture.hpp>
+
+#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<TilesetTile, TilesetTileType> {
+ 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<TilesetTile>(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<TilesetTile> &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 <memory>
-
-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<TilesetTile>(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<TilesetTile> &t) {
- return t.get()->id == tile.id;
- })));
- }
-
- const std::vector<std::shared_ptr<TilesetTile>> &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 <SFML/Graphics/Texture.hpp>
-#include <memory>
-#include <string>
-#include <vector>
-
-#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<std::shared_ptr<TilesetTile>> &get_tiles() const;
-
- private:
- std::vector<std::shared_ptr<TilesetTile>> tiles;
- };
-} \ No newline at end of file