From 174a3c6871d4f0dc5159d9b9b2fe20a023e744c1 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Wed, 27 Aug 2025 19:34:58 +0300 Subject: [PATCH] add pathfinding.set_jump_height --- res/scripts/components/pathfinding.lua | 6 +++++- src/logic/scripting/lua/libs/libpathfinding.cpp | 8 ++++++++ src/voxels/Pathfinding.cpp | 2 +- src/voxels/Pathfinding.hpp | 8 ++++---- 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/res/scripts/components/pathfinding.lua b/res/scripts/components/pathfinding.lua index 31d6d780..eeeb4f21 100644 --- a/res/scripts/components/pathfinding.lua +++ b/res/scripts/components/pathfinding.lua @@ -5,12 +5,16 @@ local started local tsf = entity.transform agent = pathfinding.create_agent() -pathfinding.set_max_visited(agent, 100000) +pathfinding.set_max_visited(agent, 1e5) function set_target(new_target) target = new_target end +function set_jump_height(height) + pathfinding.set_jump_height(agent, height) +end + function get_target() return target end diff --git a/src/logic/scripting/lua/libs/libpathfinding.cpp b/src/logic/scripting/lua/libs/libpathfinding.cpp index 0370e3a2..ffe46fa4 100644 --- a/src/logic/scripting/lua/libs/libpathfinding.cpp +++ b/src/logic/scripting/lua/libs/libpathfinding.cpp @@ -91,6 +91,13 @@ static int l_set_max_visited_blocks(lua::State* L) { return 0; } +static int l_set_jump_height(lua::State* L) { + if (auto agent = get_agent(L)) { + agent->jumpHeight = lua::tointeger(L, 2); + } + return 0; +} + const luaL_Reg pathfindinglib[] = { {"create_agent", lua::wrap}, {"remove_agent", lua::wrap}, @@ -100,5 +107,6 @@ const luaL_Reg pathfindinglib[] = { {"make_route_async", lua::wrap}, {"pull_route", lua::wrap}, {"set_max_visited", lua::wrap}, + {"set_jump_height", lua::wrap}, {NULL, NULL} }; diff --git a/src/voxels/Pathfinding.cpp b/src/voxels/Pathfinding.cpp index 1a34a8b2..c4b37696 100644 --- a/src/voxels/Pathfinding.cpp +++ b/src/voxels/Pathfinding.cpp @@ -156,7 +156,7 @@ Route Pathfinding::perform(Agent& agent, int maxVisited) { continue; } - if (is_obstacle_at(chunks, pos.x, pos.y + agent.height / 2, pos.z)) { + if (is_obstacle_at(chunks, pos.x, pos.y + agent.jumpHeight, pos.z)) { continue; } if (!check_passability(agent, chunks, node, offset, i >= 4)) { diff --git a/src/voxels/Pathfinding.hpp b/src/voxels/Pathfinding.hpp index f7b3b0c4..a82e01d1 100644 --- a/src/voxels/Pathfinding.hpp +++ b/src/voxels/Pathfinding.hpp @@ -2,14 +2,13 @@ #define GLM_ENABLE_EXPERIMENTAL #include - -#include -#include -#include #include #include +#include +#include #include #include +#include class Level; class GlobalChunks; @@ -50,6 +49,7 @@ namespace voxels { bool enabled = false; bool mayBeIncomplete = true; int height = 2; + int jumpHeight = 1; int maxVisitedBlocks = 1e3; glm::ivec3 start; glm::ivec3 target;