blueloveTH 2 лет назад
Родитель
Сommit
17fa4add9a
3 измененных файлов с 29 добавлено и 30 удалено
  1. 21 22
      3rd/box2d/include/box2d_bindings.hpp
  2. 4 4
      3rd/box2d/src/box2d_Body.cpp
  3. 4 4
      3rd/box2d/src/box2d_World.cpp

+ 21 - 22
3rd/box2d/include/box2d_bindings.hpp

@@ -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);
-    }
+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;
+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

+ 4 - 4
3rd/box2d/src/box2d_Body.cpp

@@ -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

+ 4 - 4
3rd/box2d/src/box2d_World.cpp

@@ -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