#pragma once #include #include #include #include #include #include #include #include "package.hpp" #include "sets/tileset.hpp" namespace silly::editor { struct NewTileState { std::string path; sf::Texture texture; TilesetTileType type; }; struct NewPackageState { char name[256]; }; struct NewLevelState { char name[256]; }; struct NewFloorState { int width = 10, height = 10; }; struct SavePackageState { std::string path; LevelPackageFormat format; }; class Editor { public: Editor(LevelPackage &package) : package(package) {} void update(sf::RenderWindow &window); void update(const sf::Event &event, sf::RenderWindow &window); void render(sf::RenderWindow &window); const float get_zoom() const; private: void createNewPackage(const sf::RenderWindow &window); void createNewLevel(const sf::RenderWindow &window); void createNewFloor(const sf::RenderWindow &window); void createSavePackageWindow(const sf::RenderWindow &window); void drawHeaderBar(sf::RenderWindow &window); LevelPackage &package; float rotation; // need for world movement and zoom sf::Vector2f lastMousePosition; float zoom = 1.0f; bool isDragging = false; std::optional> selectedTile; std::optional newTileState; std::optional newLevelState; std::optional newFloorState; std::optional savePackageState; std::optional newPackageState; }; }