diff --git a/src/noggit/MapView.cpp b/src/noggit/MapView.cpp index 6ddc2157..d2c45984 100644 --- a/src/noggit/MapView.cpp +++ b/src/noggit/MapView.cpp @@ -3972,7 +3972,11 @@ void MapView::mousePressEvent(QMouseEvent* event) activeTool()->onMousePress({ .button = event->button(), .mouse_position = event->pos(), + .mod_shift_down = _mod_shift_down, .mod_ctrl_down = _mod_ctrl_down, + .mod_alt_down = _mod_alt_down, + .mod_num_down = _mod_num_down, + .mod_space_down = _mod_space_down, }); switch (event->button()) diff --git a/src/noggit/Tool.hpp b/src/noggit/Tool.hpp index 268230c4..6ad49667 100644 --- a/src/noggit/Tool.hpp +++ b/src/noggit/Tool.hpp @@ -56,7 +56,11 @@ namespace Noggit { Qt::MouseButton button = Qt::MouseButton::NoButton; QPoint mouse_position; + bool mod_shift_down = false; bool mod_ctrl_down = false; + bool mod_alt_down = false; + bool mod_num_down = false; + bool mod_space_down = false; }; struct MouseReleaseParameters diff --git a/src/noggit/tools/AreaTool.cpp b/src/noggit/tools/AreaTool.cpp index 939c0337..13480ec1 100644 --- a/src/noggit/tools/AreaTool.cpp +++ b/src/noggit/tools/AreaTool.cpp @@ -85,33 +85,6 @@ namespace Noggit mapView()->getWorld()->renderer()->getTerrainParamsUniformBlock()->draw_areaid_overlay = false; } - void AreaTool::onTick(float deltaTime, TickParameters const& params) - { - if (!mapView()->getWorld()->has_selection() || params.underMap || !params.left_mouse) - { - return; - } - - if (params.mod_shift_down) - { - NOGGIT_ACTION_MGR->beginAction(mapView(), Noggit::ActionFlags::eCHUNKS_AREAID, - Noggit::ActionModalityControllers::eSHIFT - | Noggit::ActionModalityControllers::eLMB); - // draw the selected AreaId on current selected chunk - mapView()->getWorld()->setAreaID(mapView()->cursorPosition(), _selectedAreaId, false, _areaTool->brushRadius()); - } - else if (params.mod_ctrl_down) - { - for (auto&& selection : mapView()->getWorld()->current_selection()) - { - MapChunk* chnk(std::get(selection).chunk); - int newID = chnk->getAreaID(); - _selectedAreaId = newID; - _areaTool->setZoneID(newID); - } - } - } - void AreaTool::onMouseMove(MouseMoveParameters const& params) { if (params.left_mouse && params.mod_alt_down && !params.mod_shift_down && !params.mod_ctrl_down) @@ -119,4 +92,34 @@ namespace Noggit _areaTool->changeRadius(params.relative_movement.dx() / XSENS); } } + + void AreaTool::onMousePress(MousePressParameters const& params) + { + if (params.button != Qt::LeftButton) + { + return; + } + + if (params.mod_shift_down) + { + NOGGIT_ACTION_MGR->beginAction(mapView(), Noggit::ActionFlags::eCHUNKS_AREAID, + Noggit::ActionModalityControllers::eSHIFT + | Noggit::ActionModalityControllers::eLMB); + // draw the selected AreaId on current selected chunk + mapView()->getWorld()->setAreaID(mapView()->cursorPosition(), _selectedAreaId, false, _areaTool->brushRadius()); + } + else if(params.mod_ctrl_down) + { + mapView()->doSelection(true); + + for (auto&& selection : mapView()->getWorld()->current_selection()) + { + MapChunk* chnk(std::get(selection).chunk); + int newID = chnk->getAreaID(); + _selectedAreaId = newID; + _areaTool->setZoneID(newID); + } + return; + } + } } diff --git a/src/noggit/tools/AreaTool.hpp b/src/noggit/tools/AreaTool.hpp index 64dedd3b..f9f2c4a2 100644 --- a/src/noggit/tools/AreaTool.hpp +++ b/src/noggit/tools/AreaTool.hpp @@ -37,12 +37,12 @@ namespace Noggit virtual void onDeselected(); - void onTick(float deltaTime, TickParameters const& params) override; - void onMouseMove(MouseMoveParameters const& params) override; + void onMousePress(MousePressParameters const& params) override; + private: Ui::zone_id_browser* _areaTool = nullptr; int _selectedAreaId = -1; }; -} \ No newline at end of file +}