From 5a6537c89d65f459f73feb5cd7efe1319587c7b9 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Sun, 3 Aug 2025 02:48:52 +0300 Subject: [PATCH] add pathfinding.remove_agent --- src/logic/scripting/lua/libs/libpathfinding.cpp | 6 ++++++ src/voxels/Pathfinding.cpp | 9 +++++++++ src/voxels/Pathfinding.hpp | 2 ++ 3 files changed, 17 insertions(+) diff --git a/src/logic/scripting/lua/libs/libpathfinding.cpp b/src/logic/scripting/lua/libs/libpathfinding.cpp index 4d2374a1..0370e3a2 100644 --- a/src/logic/scripting/lua/libs/libpathfinding.cpp +++ b/src/logic/scripting/lua/libs/libpathfinding.cpp @@ -13,6 +13,11 @@ static int l_create_agent(lua::State* L) { return lua::pushinteger(L, level->pathfinding->createAgent()); } +static int l_remove_agent(lua::State* L) { + int id = lua::tointeger(L, 1); + return lua::pushboolean(L, level->pathfinding->removeAgent(id)); +} + static int l_set_enabled(lua::State* L) { if (auto agent = get_agent(L)) { agent->enabled = lua::toboolean(L, 2); @@ -88,6 +93,7 @@ static int l_set_max_visited_blocks(lua::State* L) { const luaL_Reg pathfindinglib[] = { {"create_agent", lua::wrap}, + {"remove_agent", lua::wrap}, {"set_enabled", lua::wrap}, {"is_enabled", lua::wrap}, {"make_route", lua::wrap}, diff --git a/src/voxels/Pathfinding.cpp b/src/voxels/Pathfinding.cpp index b39fe99e..51079f61 100644 --- a/src/voxels/Pathfinding.cpp +++ b/src/voxels/Pathfinding.cpp @@ -63,6 +63,15 @@ int Pathfinding::createAgent() { return id; } +bool Pathfinding::removeAgent(int id) { + auto found = agents.find(id); + if (found != agents.end()) { + agents.erase(found); + return true; + } + return false; +} + void Pathfinding::performAllAsync(int stepsPerAgent) { for (auto& [id, agent] : agents) { if (agent.state.finished) { diff --git a/src/voxels/Pathfinding.hpp b/src/voxels/Pathfinding.hpp index c89841e5..f7b3b0c4 100644 --- a/src/voxels/Pathfinding.hpp +++ b/src/voxels/Pathfinding.hpp @@ -63,6 +63,8 @@ namespace voxels { int createAgent(); + bool removeAgent(int id); + void performAllAsync(int stepsPerAgent); Route perform(Agent& agent, int maxVisited = -1);