This commit is contained in:
blueloveTH 2023-08-05 16:35:58 +08:00
parent 65087068b2
commit 17fa4add9a
3 changed files with 30 additions and 31 deletions

View File

@ -2,9 +2,11 @@
#include "box2d/b2_world.h" #include "box2d/b2_world.h"
#include "box2d/box2d.h" #include "box2d/box2d.h"
#include "pocketpy/common.h"
#include "pocketpy/pocketpy.h" #include "pocketpy/pocketpy.h"
namespace pkpy{ namespace pkpy{
template<> template<>
inline b2Vec2 py_cast<b2Vec2>(VM* vm, PyObject* obj){ inline b2Vec2 py_cast<b2Vec2>(VM* vm, PyObject* obj){
Vec2 v = py_cast<Vec2>(vm, obj); Vec2 v = py_cast<Vec2>(vm, obj);
@ -20,9 +22,6 @@ namespace pkpy{
inline PyObject* py_var(VM* vm, b2Vec2 v){ inline PyObject* py_var(VM* vm, b2Vec2 v){
return py_var(vm, Vec2(v.x, v.y)); return py_var(vm, Vec2(v.x, v.y));
} }
}
using namespace pkpy;
namespace imbox2d{ namespace imbox2d{
@ -99,7 +98,7 @@ struct PyBody{
b2Fixture* fixture; b2Fixture* fixture;
PyObject* node_like; PyObject* node_like;
PyBody() = default; PyBody(): body(nullptr), fixture(nullptr), node_like(nullptr){}
void _gc_mark() { void _gc_mark() {
PK_OBJ_MARK(node_like); PK_OBJ_MARK(node_like);
@ -151,10 +150,10 @@ struct PyWorld {
} // namespace imbox2d } // namespace imbox2d
namespace pkpy{
inline void add_module_box2d(VM* vm){ inline void add_module_box2d(VM* vm){
PyObject* mod = vm->new_module("box2d"); PyObject* mod = vm->new_module("box2d");
imbox2d::PyBody::register_class(vm, mod); imbox2d::PyBody::register_class(vm, mod);
imbox2d::PyWorld::register_class(vm, mod); imbox2d::PyWorld::register_class(vm, mod);
} }
} } // namespace pkpy

View File

@ -3,8 +3,7 @@
#include "box2d_bindings.hpp" #include "box2d_bindings.hpp"
#include "pocketpy/bindings.h" #include "pocketpy/bindings.h"
using namespace pkpy; namespace pkpy{
namespace imbox2d{ namespace imbox2d{
void PyBody::_register(VM* vm, PyObject* mod, PyObject* type){ void PyBody::_register(VM* vm, PyObject* mod, PyObject* type){
@ -12,7 +11,7 @@ void PyBody::_register(VM* vm, PyObject* mod, PyObject* type){
[](VM* vm, ArgsView args){ [](VM* vm, ArgsView args){
PyWorld& world = CAST(PyWorld&, args[1]); PyWorld& world = CAST(PyWorld&, args[1]);
PyObject* node = args[2]; PyObject* node = args[2];
PyObject* obj = VAR_T(PyBody, PyBody()); PyObject* obj = vm->heap.gcnew<PyBody>(PyBody::_type(vm));
PyBody& body = _CAST(PyBody&, obj); PyBody& body = _CAST(PyBody&, obj);
b2BodyDef def; b2BodyDef def;
def.type = b2_dynamicBody; def.type = b2_dynamicBody;
@ -86,3 +85,4 @@ void PyBody::_register(VM* vm, PyObject* mod, PyObject* type){
} }
} // namespace imbox2d } // namespace imbox2d
} // namespace pkpy

View File

@ -2,8 +2,7 @@
#include "box2d/b2_world_callbacks.h" #include "box2d/b2_world_callbacks.h"
#include "box2d_bindings.hpp" #include "box2d_bindings.hpp"
using namespace pkpy; namespace pkpy{
namespace imbox2d{ namespace imbox2d{
struct MyRayCastCallback: b2RayCastCallback{ struct MyRayCastCallback: b2RayCastCallback{
@ -44,7 +43,7 @@ PyWorld::PyWorld(VM* vm): world(b2Vec2(0, 0)), _contact_listener(vm), _debug_dra
void PyWorld::_register(VM* vm, PyObject* mod, PyObject* type){ void PyWorld::_register(VM* vm, PyObject* mod, PyObject* type){
vm->bind(type, "__new__(cls)", [](VM* vm, ArgsView args){ vm->bind(type, "__new__(cls)", [](VM* vm, ArgsView args){
return VAR_T(PyWorld, PyWorld(vm)); return vm->heap.gcnew<PyWorld>(PyWorld::_type(vm), vm);
}); });
// gravity // gravity
@ -131,3 +130,4 @@ void PyWorld::_register(VM* vm, PyObject* mod, PyObject* type){
} }
} // namespace imbox2d } // namespace imbox2d
} // namespace pkpy