diff --git a/src/noggit/MapView.cpp b/src/noggit/MapView.cpp index 1a09e888..362dee2d 100644 --- a/src/noggit/MapView.cpp +++ b/src/noggit/MapView.cpp @@ -39,7 +39,7 @@ #include #include #include -#include +#include #include #include #include @@ -838,7 +838,7 @@ void MapView::setupLightEditorUi() void MapView::setupChunkManipulatorUi() { - _chunk_manipulator = new Noggit::Ui::Tools::ChunkManipulator(this, this); + _chunk_manipulator = new Noggit::Ui::Tools::ChunkManipulator::ChunkManipulatorPanel(this, this); _tool_panel_dock->registerTool("Chunk Manipulator", _chunk_manipulator); } diff --git a/src/noggit/MapView.h b/src/noggit/MapView.h index a75fd489..f7d79322 100644 --- a/src/noggit/MapView.h +++ b/src/noggit/MapView.h @@ -61,7 +61,11 @@ namespace Noggit { class BrushStack; class LightEditor; - class ChunkManipulator; + + namespace ChunkManipulator + { + class ChunkManipulatorPanel; + } } namespace Scripting @@ -394,7 +398,7 @@ private: Noggit::Ui::MinimapCreator* minimapTool; Noggit::Ui::Tools::BrushStack* stampTool; Noggit::Ui::Tools::LightEditor* lightEditor; - Noggit::Ui::Tools::ChunkManipulator* _chunk_manipulator; + Noggit::Ui::Tools::ChunkManipulator::ChunkManipulatorPanel* _chunk_manipulator; Noggit::Scripting::scripting_tool* scriptingTool; OpenGL::texture* const _texBrush; diff --git a/src/noggit/TileIndex.hpp b/src/noggit/TileIndex.hpp index e1bb34f3..fdb15552 100644 --- a/src/noggit/TileIndex.hpp +++ b/src/noggit/TileIndex.hpp @@ -13,6 +13,11 @@ struct TileIndex return std::tie (lhs.x, lhs.z) == std::tie (rhs.x, rhs.z); } + friend bool operator< (TileIndex const& lhs, TileIndex const& rhs) + { + return std::tie (lhs.x, lhs.z) < std::tie (rhs.x, rhs.z); + } + bool is_valid() const { // x and z are unsigned so negative signed int value are positive and > 63 diff --git a/src/noggit/texture_set.hpp b/src/noggit/texture_set.hpp index d524ea47..832ff773 100644 --- a/src/noggit/texture_set.hpp +++ b/src/noggit/texture_set.hpp @@ -5,6 +5,7 @@ #include #include #include +#include #include #include diff --git a/src/noggit/ui/tools/ChunkManipulator/ChunkClipboard.cpp b/src/noggit/ui/tools/ChunkManipulator/ChunkClipboard.cpp index 2e9f7a8f..0b913669 100644 --- a/src/noggit/ui/tools/ChunkManipulator/ChunkClipboard.cpp +++ b/src/noggit/ui/tools/ChunkManipulator/ChunkClipboard.cpp @@ -4,6 +4,7 @@ #include "ChunkClipboard.hpp" #include +#include #include @@ -23,19 +24,22 @@ void ChunkClipboard::selectRange(glm::vec3 const& cursor_pos, float radius, Chun { case ChunkSelectionMode::SELECT: { - _world->for_all_chunks_in_range(cursor_pos, radius, [this](MapChunk* chunk) + _world->for_all_chunks_in_range(cursor_pos, radius, [this](MapChunk* chunk) -> bool { _selected_chunks.emplace(SelectedChunkIndex{TileIndex{glm::vec3{chunk->xbase, 0.f, chunk->zbase}}, static_cast(chunk->px), static_cast(chunk->py)}); - }); + return true; + } + ); break; } case ChunkSelectionMode::DESELECT: { - _world->for_all_chunks_in_range(cursor_pos, radius, [this](MapChunk* chunk) + _world->for_all_chunks_in_range(cursor_pos, radius, [this](MapChunk* chunk) -> bool { _selected_chunks.erase(SelectedChunkIndex{TileIndex{glm::vec3{chunk->xbase, 0.f, chunk->zbase}}, static_cast(chunk->px), static_cast(chunk->py)}); + return true; }); break; } @@ -52,19 +56,21 @@ void ChunkClipboard::selectChunk(glm::vec3 const& pos, ChunkSelectionMode mode) { case ChunkSelectionMode::SELECT: { - _world->for_chunk_at(pos, [this](MapChunk* chunk) + _world->for_chunk_at(pos, [this](MapChunk* chunk) -> bool { _selected_chunks.emplace(SelectedChunkIndex{TileIndex{glm::vec3{chunk->xbase, 0.f, chunk->zbase}}, static_cast(chunk->px), static_cast(chunk->py)}); + return true; }); break; } case ChunkSelectionMode::DESELECT: { - _world->for_chunk_at(pos, [this](MapChunk* chunk) + _world->for_chunk_at(pos, [this](MapChunk* chunk) -> bool { _selected_chunks.erase(SelectedChunkIndex{TileIndex{glm::vec3{chunk->xbase, 0.f, chunk->zbase}}, static_cast(chunk->px), static_cast(chunk->py)}); + return true; }); break; } diff --git a/src/noggit/ui/tools/ChunkManipulator/ChunkClipboard.hpp b/src/noggit/ui/tools/ChunkManipulator/ChunkClipboard.hpp index a32e41a4..a7e8ceac 100644 --- a/src/noggit/ui/tools/ChunkManipulator/ChunkClipboard.hpp +++ b/src/noggit/ui/tools/ChunkManipulator/ChunkClipboard.hpp @@ -11,6 +11,7 @@ #include #include #include +#include #include #include @@ -81,7 +82,12 @@ namespace Noggit::Ui::Tools::ChunkManipulator unsigned x; unsigned z; - SelectedChunkIndex(TileIndex tile_index_, unsigned x_, unsigned z_) : tile_index(tile_index_), x(x_), z(z_) {} + SelectedChunkIndex(TileIndex tile_index_, unsigned x_, unsigned z_) : tile_index(tile_index_), x(x_), z(z_) {}; + + friend bool operator<(SelectedChunkIndex const& lhs, SelectedChunkIndex const& rhs) + { + return std::tie(lhs.tile_index, lhs.x, lhs.z) < std::tie(rhs.tile_index, rhs.x, rhs.z); + } }; struct ChunkCache diff --git a/src/noggit/ui/tools/ChunkManipulator/ChunkManipulator.cpp b/src/noggit/ui/tools/ChunkManipulator/ChunkManipulator.cpp deleted file mode 100644 index 19180a94..00000000 --- a/src/noggit/ui/tools/ChunkManipulator/ChunkManipulator.cpp +++ /dev/null @@ -1,12 +0,0 @@ - -// This file is part of Noggit3, licensed under GNU General Public License (version 3). - -#include "ChunkManipulator.hpp" - -using namespace Noggit::Ui::Tools; - -ChunkManipulator::ChunkManipulator(MapView* map_view, QWidget* parent) -: QWidget(parent) -, _map_view(map_view) -{ -} diff --git a/src/noggit/ui/tools/ChunkManipulator/ChunkManipulator.hpp b/src/noggit/ui/tools/ChunkManipulator/ChunkManipulator.hpp deleted file mode 100644 index ef27fc0d..00000000 --- a/src/noggit/ui/tools/ChunkManipulator/ChunkManipulator.hpp +++ /dev/null @@ -1,25 +0,0 @@ -// This file is part of Noggit3, licensed under GNU General Public License (version 3). - - -#ifndef NOGGIT_CHUNKMANIPULATOR_HPP -#define NOGGIT_CHUNKMANIPULATOR_HPP - -#include - -class MapView; - -namespace Noggit::Ui::Tools -{ - class ChunkManipulator : public QWidget - { - public: - ChunkManipulator(MapView* map_view, QWidget* parent = nullptr); - - private: - MapView* _map_view; - - }; - -} - -#endif //NOGGIT_CHUNKMANIPULATOR_HPP diff --git a/src/noggit/ui/tools/ChunkManipulator/ChunkManipulatorPanel.cpp b/src/noggit/ui/tools/ChunkManipulator/ChunkManipulatorPanel.cpp new file mode 100644 index 00000000..f4a78320 --- /dev/null +++ b/src/noggit/ui/tools/ChunkManipulator/ChunkManipulatorPanel.cpp @@ -0,0 +1,12 @@ + +// This file is part of Noggit3, licensed under GNU General Public License (version 3). + +#include "ChunkManipulatorPanel.hpp" + +using namespace Noggit::Ui::Tools::ChunkManipulator; + +ChunkManipulatorPanel::ChunkManipulatorPanel(MapView* map_view, QWidget* parent) +: QWidget(parent) +, _map_view(map_view) +{ +} diff --git a/src/noggit/ui/tools/ChunkManipulator/ChunkManipulatorPanel.hpp b/src/noggit/ui/tools/ChunkManipulator/ChunkManipulatorPanel.hpp new file mode 100644 index 00000000..04be5de9 --- /dev/null +++ b/src/noggit/ui/tools/ChunkManipulator/ChunkManipulatorPanel.hpp @@ -0,0 +1,25 @@ +// This file is part of Noggit3, licensed under GNU General Public License (version 3). + + +#ifndef NOGGIT_CHUNKMANIPULATORPANEL_HPP +#define NOGGIT_CHUNKMANIPULATORPANEL_HPP + +#include + +class MapView; + +namespace Noggit::Ui::Tools::ChunkManipulator +{ + class ChunkManipulatorPanel : public QWidget + { + public: + ChunkManipulatorPanel(MapView* map_view, QWidget* parent = nullptr); + + private: + MapView* _map_view; + + }; + +} + +#endif //NOGGIT_CHUNKMANIPULATORPANEL_HPP