From 368cabc0a70696c1dd45c4b302d0a15ca732555e Mon Sep 17 00:00:00 2001 From: heinezen Date: Sat, 24 Feb 2024 01:36:49 +0100 Subject: [PATCH] path: Change goal with right mouse button. --- libopenage/pathfinding/demo/demo_0.cpp | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/libopenage/pathfinding/demo/demo_0.cpp b/libopenage/pathfinding/demo/demo_0.cpp index 20ab91345f..0b101a7266 100644 --- a/libopenage/pathfinding/demo/demo_0.cpp +++ b/libopenage/pathfinding/demo/demo_0.cpp @@ -3,6 +3,7 @@ #include "demo_0.h" #include +#include #include "pathfinding/cost_field.h" #include "pathfinding/flow_field.h" @@ -596,6 +597,27 @@ void path_demo_0(const util::Path &path) { auto flow_field = std::make_shared(10); flow_field->build(integration_field); + window.add_mouse_button_callback([&](const QMouseEvent &ev) { + if (ev.type() == QEvent::MouseButtonRelease) { + if (ev.button() == Qt::RightButton) { + auto grid_plane_normal = Eigen::Vector3f{0, 1, 0}; + auto grid_plane_point = Eigen::Vector3f{0, 0, 0}; + auto camera_direction = renderer::camera::cam_direction; + auto camera_position = camera->get_input_pos( + coord::input{ev.position().x(), ev.position().y()}); + + Eigen::Vector3f intersect = camera_position + camera_direction * (grid_plane_point - camera_position).dot(grid_plane_normal) / camera_direction.dot(grid_plane_normal); + auto grid_x = static_cast(-1 * intersect[2]); + auto grid_y = static_cast(intersect[0]); + + if (grid_x >= 0 && grid_x < 10 && grid_y >= 0 && grid_y < 10) { + integration_field->integrate(cost_field, grid_x, grid_y); + flow_field->build(integration_field); + } + } + } + }); + // Create object for the cost field // this will be shown at the start Eigen::Matrix4f model = Eigen::Matrix4f::Identity();