Files
noggit-red/src/noggit/tools/AreaTriggerTool.hpp
2025-12-14 08:13:43 -06:00

75 lines
1.8 KiB
C++

// This file is part of Noggit3, licensed under GNU General Public License (version 3).
#pragma once
#include <noggit/area_trigger.hpp>
#include <noggit/Tool.hpp>
#include <noggit/rendering/Primitives.hpp>
#include <map>
namespace Noggit
{
namespace Ui
{
class hole_tool;
namespace Tools
{
class AreaTriggerEditor;
}
}
class AreaTriggerTool final : public Tool
{
public:
AreaTriggerTool(MapView* mapView);
~AreaTriggerTool();
[[nodiscard]]
virtual char const* name() const override;
[[nodiscard]]
virtual editing_mode editingMode() const override;
[[nodiscard]]
virtual Ui::FontNoggit::Icons icon() const override;
void setupUi(Ui::Tools::ToolPanel* toolPanel) override;
[[nodiscard]]
ToolDrawParameters drawParameters() const override;
void onSelected() override;
void onDeselected() override;
void onMouseRelease(MouseReleaseParameters const& params) override;
void postRender() override;
void renderImGui(ImGuizmo::MODE mode, ImGuizmo::OPERATION operation) override;
void saveSettings() override;
void unload() override;
private:
Ui::Tools::AreaTriggerEditor* _editor = nullptr;
Noggit::Rendering::Primitives::WireBox _boxRenderer;
Noggit::Rendering::Primitives::Sphere _sphereRenderer;
uint32_t _selected_area_trigger = std::numeric_limits<uint32_t>::max();
void jump_to_area_trigger(const Noggit::MouseReleaseParameters& params);
void select_area_trigger();
std::optional<area_trigger> get_selected_trigger();
bool manipulate_gizmo(ImGuizmo::MODE mode, ImGuizmo::OPERATION& operation, area_trigger const& trigger, glm::mat4& out_delta_matrix);
void apply_changes(ImGuizmo::MODE mode, ImGuizmo::OPERATION operation, glm::mat4 const& delta_matrix, area_trigger& trigger);
};
}