From dfc656000be12f3200e689afe12c53edf79bd87b Mon Sep 17 00:00:00 2001 From: blueloveTH Date: Sat, 11 Nov 2023 03:18:15 +0800 Subject: [PATCH] add `point_cast` for `box2d` --- 3rd/box2d/src/box2d_World.cpp | 11 +++++++++++ include/typings/box2d.pyi | 3 +++ 2 files changed, 14 insertions(+) diff --git a/3rd/box2d/src/box2d_World.cpp b/3rd/box2d/src/box2d_World.cpp index 325f69e6..c4c5d04f 100644 --- a/3rd/box2d/src/box2d_World.cpp +++ b/3rd/box2d/src/box2d_World.cpp @@ -98,6 +98,17 @@ void PyWorld::_register(VM* vm, PyObject* mod, PyObject* type){ return VAR(std::move(callback.result)); }); + vm->bind(type, "point_cast(self, point: vec2) -> list[Body]", [](VM* vm, ArgsView args){ + auto _lock = vm->heap.gc_scope_lock(); + PyWorld& self = _CAST(PyWorld&, args[0]); + b2AABB aabb; + aabb.lowerBound = CAST(b2Vec2, args[1]); + aabb.upperBound = CAST(b2Vec2, args[1]); + MyBoxCastCallback callback(vm); + self.world.QueryAABB(&callback, aabb); + return VAR(std::move(callback.result)); + }); + vm->bind(type, "step(self, dt: float, velocity_iterations: int, position_iterations: int)", [](VM* vm, ArgsView args){ // disable gc during step for safety diff --git a/include/typings/box2d.pyi b/include/typings/box2d.pyi index 00885377..efedf9bd 100644 --- a/include/typings/box2d.pyi +++ b/include/typings/box2d.pyi @@ -28,6 +28,9 @@ class World: def box_cast(self, lower: vec2, upper: vec2) -> list['Body']: """query bodies in the AABB region.""" + def point_cast(self, point: vec2) -> list['Body']: + """query bodies that contain the point.""" + def step(self, dt: float, velocity_iterations: int, position_iterations: int) -> None: """step the simulation, e.g. world.step(1/60, 8, 3)"""