#ifndef EDITOR_VISITOR_H #define EDITOR_VISITOR_H #include "../sdlpp/sdlpp_visitor.hpp" #include "../sdlpp/sdlpp_geometry.hpp" #include "blocks.hpp" #include struct VisitorType { enum Value { Terrain = 0xE001, Modifier = 0xE002, }; }; class MouseVisitor : public SDLPP::Visitor { public: MouseVisitor() = default; void visit( const SDLPP::RenderObject &obj ) override; void setFromId( uint64_t /*UNUSED*/ ) override {} uint64_t getFromId() const override { return 0; } uint64_t getFlags() const { return select_flags; } bool foundEditBox() const { return edit_box; } const SDLPP::Vec2D< int > &getEditBoxIndexes() const { return edit_box_location; } bool foundToolBox() const { return tool_box; } const SDLPP::Vec2D< int > &getToolBoxIndexes() const { return tool_box_location; } void setVisitorType( uint64_t type ) override { _type = type; } uint64_t getVisitorType() const override { return _type; } uint64_t getToolType() const { return tool_box_type; } static bool moveMapLeft( uint64_t flags ); static bool moveMapRight( uint64_t flags ); static bool moveToolsLeft( uint64_t flags ); static bool moveToolsRight( uint64_t flags ); static bool moveModsLeft( uint64_t flags ); static bool moveModsRight( uint64_t flags ); static bool moveCharactersLeft( uint64_t flags ); static bool moveCharactersRight( uint64_t flags ); private: uint64_t select_flags = 0; bool edit_box = false; bool tool_box = false; SDLPP::Vec2D< int > edit_box_location = { -1, -1 }; SDLPP::Vec2D< int > tool_box_location = { -1, -1 }; uint64_t _type{}; uint64_t tool_box_type = 0; }; class ToolVisitor : public SDLPP::Visitor { public: ToolVisitor() = default; void visit( const SDLPP::RenderObject &obj ) override; void setFromId( uint64_t id ) override { source_id = id; } uint64_t getFromId() const override { return source_id; } void setVisitorType( uint64_t type ) override { _type = type; } uint64_t getVisitorType() const override { return _type; } void setSourceType(LandType::Value type) { source_type = type; } void setSourceData(const uint64_t &data) { _data = data; } bool addBlock() const; bool removeBlock() const; private: bool remove_block = false; bool add_block = true; uint64_t source_id = 0; uint64_t _type = 0; uint64_t _data = 0; LandType::Value source_type{}; }; #endif