#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() {} virtual void visit( const SDLPP::RenderObject &obj ) override; virtual void setFromId( uint64_t /*UNUSED*/ ) override {} virtual uint64_t getFromId() override { return 0; } uint64_t getFlags() { return select_flags; } bool foundEditBox() { return edit_box; } const SDLPP::Vec2D< int > &getEditBoxIndexes() { return edit_box_location; } bool foundToolBox() { return tool_box; } const SDLPP::Vec2D< int > &getToolBoxIndexes() { return tool_box_location; } virtual void setVisitorType( uint64_t type ) override { _type = type; } virtual uint64_t getVisitorType() override { return _type; } uint64_t getToolType() { 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(){}; virtual void visit( const SDLPP::RenderObject &obj ) override; virtual void setFromId( uint64_t id ) override { source_id = id; } virtual uint64_t getFromId() override { return source_id; } virtual void setVisitorType( uint64_t type ) override { _type = type; } virtual uint64_t getVisitorType() override { return _type; } void setSourceType(LandType::Value type) { source_type = type; } bool addBlock(); bool removeBlock(); private: bool remove_block = false; bool add_block = true; uint64_t source_id = 0; uint64_t _type = 0; LandType::Value source_type; }; #endif