mirror of
https://github.com/pocketpy/pocketpy
synced 2025-10-20 11:30:18 +00:00
...
This commit is contained in:
parent
945407b3e3
commit
9998adcecd
@ -1,8 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#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{
|
||||||
@ -33,30 +31,17 @@ struct PyDebugDraw: b2Draw{
|
|||||||
PK_ALWAYS_PASS_BY_POINTER(PyDebugDraw)
|
PK_ALWAYS_PASS_BY_POINTER(PyDebugDraw)
|
||||||
|
|
||||||
VM* vm;
|
VM* vm;
|
||||||
PyObject* draw_like;
|
PyObject* draw_like; // world will mark this
|
||||||
|
|
||||||
PyDebugDraw(VM* vm): vm(vm){}
|
PyDebugDraw(VM* vm): vm(vm){}
|
||||||
|
|
||||||
void DrawPolygon(const b2Vec2* vertices, int32 vertexCount, const b2Color& color) override{
|
void DrawPolygon(const b2Vec2* vertices, int32 vertexCount, const b2Color& color) override;
|
||||||
}
|
void DrawSolidPolygon(const b2Vec2* vertices, int32 vertexCount, const b2Color& color) override;
|
||||||
|
void DrawCircle(const b2Vec2& center, float radius, const b2Color& color) override;
|
||||||
void DrawSolidPolygon(const b2Vec2* vertices, int32 vertexCount, const b2Color& color) override{
|
void DrawSolidCircle(const b2Vec2& center, float radius, const b2Vec2& axis, const b2Color& color) override;
|
||||||
}
|
void DrawSegment(const b2Vec2& p1, const b2Vec2& p2, const b2Color& color) override;
|
||||||
|
void DrawTransform(const b2Transform& xf) override;
|
||||||
void DrawCircle(const b2Vec2& center, float radius, const b2Color& color) override{
|
void DrawPoint(const b2Vec2& p, float size, const b2Color& color) override;
|
||||||
}
|
|
||||||
|
|
||||||
void DrawSolidCircle(const b2Vec2& center, float radius, const b2Vec2& axis, const b2Color& color) override{
|
|
||||||
}
|
|
||||||
|
|
||||||
void DrawSegment(const b2Vec2& p1, const b2Vec2& p2, const b2Color& color) override{
|
|
||||||
}
|
|
||||||
|
|
||||||
void DrawTransform(const b2Transform& xf) override{
|
|
||||||
}
|
|
||||||
|
|
||||||
void DrawPoint(const b2Vec2& p, float size, const b2Color& color) override{
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct PyContactListener: b2ContactListener{
|
struct PyContactListener: b2ContactListener{
|
||||||
@ -64,18 +49,7 @@ struct PyContactListener: b2ContactListener{
|
|||||||
VM* vm;
|
VM* vm;
|
||||||
PyContactListener(VM* vm): vm(vm){}
|
PyContactListener(VM* vm): vm(vm){}
|
||||||
|
|
||||||
void _contact_f(b2Contact* contact, StrName name){
|
void _contact_f(b2Contact* contact, StrName name);
|
||||||
b2Body* bodyA = contact->GetFixtureA()->GetBody();
|
|
||||||
b2Body* bodyB = contact->GetFixtureB()->GetBody();
|
|
||||||
PyObject* a = get_body_object(bodyA);
|
|
||||||
PyObject* b = get_body_object(bodyB);
|
|
||||||
PyObject* self;
|
|
||||||
PyObject* f;
|
|
||||||
f = vm->get_unbound_method(a, name, &self, false);
|
|
||||||
if(f != nullptr) vm->call_method(self, f, b);
|
|
||||||
f = vm->get_unbound_method(b, name, &self, false);
|
|
||||||
if(f != nullptr) vm->call_method(self, f, a);
|
|
||||||
}
|
|
||||||
|
|
||||||
void BeginContact(b2Contact* contact) override {
|
void BeginContact(b2Contact* contact) override {
|
||||||
DEF_SNAME(on_contact_begin);
|
DEF_SNAME(on_contact_begin);
|
||||||
|
@ -1,7 +1,4 @@
|
|||||||
#include "box2d/b2_world.h"
|
|
||||||
#include "box2d/b2_world_callbacks.h"
|
|
||||||
#include "box2d_bindings.hpp"
|
#include "box2d_bindings.hpp"
|
||||||
#include "pocketpy/bindings.h"
|
|
||||||
|
|
||||||
namespace pkpy{
|
namespace pkpy{
|
||||||
|
|
||||||
|
33
3rd/box2d/src/box2d_DebugDraw.cpp
Normal file
33
3rd/box2d/src/box2d_DebugDraw.cpp
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
#include "box2d_bindings.hpp"
|
||||||
|
|
||||||
|
namespace pkpy{
|
||||||
|
|
||||||
|
void PyDebugDraw::DrawPolygon(const b2Vec2* vertices, int32 vertexCount, const b2Color& color){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void PyDebugDraw::DrawSolidPolygon(const b2Vec2* vertices, int32 vertexCount, const b2Color& color){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void PyDebugDraw::DrawCircle(const b2Vec2& center, float radius, const b2Color& color){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void PyDebugDraw::DrawSolidCircle(const b2Vec2& center, float radius, const b2Vec2& axis, const b2Color& color){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void PyDebugDraw::DrawSegment(const b2Vec2& p1, const b2Vec2& p2, const b2Color& color){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void PyDebugDraw::DrawTransform(const b2Transform& xf){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void PyDebugDraw::DrawPoint(const b2Vec2& p, float size, const b2Color& color){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,5 +1,3 @@
|
|||||||
#include "box2d/b2_world.h"
|
|
||||||
#include "box2d/b2_world_callbacks.h"
|
|
||||||
#include "box2d_bindings.hpp"
|
#include "box2d_bindings.hpp"
|
||||||
|
|
||||||
namespace pkpy{
|
namespace pkpy{
|
||||||
@ -31,6 +29,19 @@ struct MyBoxCastCallback: b2QueryCallback{
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void PyContactListener::_contact_f(b2Contact* contact, StrName name){
|
||||||
|
PyObject* a = get_body_object(contact->GetFixtureA()->GetBody());
|
||||||
|
PyObject* b = get_body_object(contact->GetFixtureB()->GetBody());
|
||||||
|
PyBody& bodyA = PK_OBJ_GET(PyBody, a);
|
||||||
|
PyBody& bodyB = PK_OBJ_GET(PyBody, b);
|
||||||
|
PyObject* self;
|
||||||
|
PyObject* f;
|
||||||
|
f = vm->get_unbound_method(bodyA.node_like, name, &self, false);
|
||||||
|
if(f != nullptr) vm->call_method(self, f, b);
|
||||||
|
f = vm->get_unbound_method(bodyB.node_like, name, &self, false);
|
||||||
|
if(f != nullptr) vm->call_method(self, f, a);
|
||||||
|
}
|
||||||
|
|
||||||
/****************** PyWorld ******************/
|
/****************** PyWorld ******************/
|
||||||
PyWorld::PyWorld(VM* vm): world(b2Vec2(0, 0)), _contact_listener(vm), _debug_draw(vm){
|
PyWorld::PyWorld(VM* vm): world(b2Vec2(0, 0)), _contact_listener(vm), _debug_draw(vm){
|
||||||
_debug_draw.draw_like = vm->None;
|
_debug_draw.draw_like = vm->None;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user