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

View File

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