From 306402354e935c5900030a52d27b94e1d0b6d7a5 Mon Sep 17 00:00:00 2001 From: James Chen Date: Fri, 18 Aug 2017 14:02:10 +0800 Subject: [PATCH] Hack box2d for jsb2.0 --- sources/Box2D/Dynamics/Contacts/b2Contact.cpp | 2 +- sources/Box2D/Dynamics/Joints/b2Joint.cpp | 2 +- sources/Box2D/Dynamics/b2Fixture.cpp | 7 +++++++ sources/Box2D/Dynamics/b2World.cpp | 2 +- sources/Box2D/b2ObjectDestroyNotifier.cpp | 8 ++++---- sources/Box2D/b2ObjectDestroyNotifier.h | 16 +++++++++++++--- 6 files changed, 27 insertions(+), 10 deletions(-) diff --git a/sources/Box2D/Dynamics/Contacts/b2Contact.cpp b/sources/Box2D/Dynamics/Contacts/b2Contact.cpp index 4a54c2df..93ed4d5b 100755 --- a/sources/Box2D/Dynamics/Contacts/b2Contact.cpp +++ b/sources/Box2D/Dynamics/Contacts/b2Contact.cpp @@ -120,7 +120,7 @@ void b2Contact::Destroy(b2Contact* contact, b2BlockAllocator* allocator) b2Assert(0 <= typeA && typeB < b2Shape::e_typeCount); b2Assert(0 <= typeA && typeB < b2Shape::e_typeCount); - b2NotifyObjectDestroyed(contact, typeid(*contact).name()); + b2NotifyObjectDestroyed(contact, b2ObjectType::CONTACT, typeid(*contact).name()); b2ContactDestroyFcn* destroyFcn = s_registers[typeA][typeB].destroyFcn; destroyFcn(contact, allocator); } diff --git a/sources/Box2D/Dynamics/Joints/b2Joint.cpp b/sources/Box2D/Dynamics/Joints/b2Joint.cpp index 65390b46..7a6cf7a4 100755 --- a/sources/Box2D/Dynamics/Joints/b2Joint.cpp +++ b/sources/Box2D/Dynamics/Joints/b2Joint.cpp @@ -128,7 +128,7 @@ b2Joint* b2Joint::Create(const b2JointDef* def, b2BlockAllocator* allocator) void b2Joint::Destroy(b2Joint* joint, b2BlockAllocator* allocator) { - b2NotifyObjectDestroyed(joint, typeid(*joint).name()); + b2NotifyObjectDestroyed(joint, b2ObjectType::JOIN, typeid(*joint).name()); joint->~b2Joint(); switch (joint->m_type) { diff --git a/sources/Box2D/Dynamics/b2Fixture.cpp b/sources/Box2D/Dynamics/b2Fixture.cpp index d97aa448..cacc5f9a 100755 --- a/sources/Box2D/Dynamics/b2Fixture.cpp +++ b/sources/Box2D/Dynamics/b2Fixture.cpp @@ -26,6 +26,7 @@ #include #include #include +#include b2Fixture::b2Fixture() { @@ -82,6 +83,7 @@ void b2Fixture::Destroy(b2BlockAllocator* allocator) case b2Shape::e_circle: { b2CircleShape* s = (b2CircleShape*)m_shape; + b2NotifyObjectDestroyed(s, b2ObjectType::CIRCLE_SHAPE, "b2CircleShape"); s->~b2CircleShape(); allocator->Free(s, sizeof(b2CircleShape)); } @@ -90,6 +92,7 @@ void b2Fixture::Destroy(b2BlockAllocator* allocator) case b2Shape::e_edge: { b2EdgeShape* s = (b2EdgeShape*)m_shape; + b2NotifyObjectDestroyed(s, b2ObjectType::EDGE_SHAPE, "b2EdgeShape"); s->~b2EdgeShape(); allocator->Free(s, sizeof(b2EdgeShape)); } @@ -98,6 +101,7 @@ void b2Fixture::Destroy(b2BlockAllocator* allocator) case b2Shape::e_polygon: { b2PolygonShape* s = (b2PolygonShape*)m_shape; + b2NotifyObjectDestroyed(s, b2ObjectType::POLYGON_SHAPE, "b2PolygonShape"); s->~b2PolygonShape(); allocator->Free(s, sizeof(b2PolygonShape)); } @@ -106,6 +110,7 @@ void b2Fixture::Destroy(b2BlockAllocator* allocator) case b2Shape::e_chain: { b2ChainShape* s = (b2ChainShape*)m_shape; + b2NotifyObjectDestroyed(s, b2ObjectType::CHAIN_SHAPE, "b2ChainShape"); s->~b2ChainShape(); allocator->Free(s, sizeof(b2ChainShape)); } @@ -117,6 +122,8 @@ void b2Fixture::Destroy(b2BlockAllocator* allocator) } m_shape = NULL; + + b2NotifyObjectDestroyed(this, b2ObjectType::FIXTURE, "b2Fixture"); } void b2Fixture::CreateProxies(b2BroadPhase* broadPhase, const b2Transform& xf) diff --git a/sources/Box2D/Dynamics/b2World.cpp b/sources/Box2D/Dynamics/b2World.cpp index eb88f118..2b75d9d2 100755 --- a/sources/Box2D/Dynamics/b2World.cpp +++ b/sources/Box2D/Dynamics/b2World.cpp @@ -206,7 +206,7 @@ void b2World::DestroyBody(b2Body* b) } --m_bodyCount; - b2NotifyObjectDestroyed(b, "b2Body"); + b2NotifyObjectDestroyed(b, b2ObjectType::BODY, "b2Body"); b->~b2Body(); m_blockAllocator.Free(b, sizeof(b2Body)); } diff --git a/sources/Box2D/b2ObjectDestroyNotifier.cpp b/sources/Box2D/b2ObjectDestroyNotifier.cpp index a57a7d52..2255c27a 100644 --- a/sources/Box2D/b2ObjectDestroyNotifier.cpp +++ b/sources/Box2D/b2ObjectDestroyNotifier.cpp @@ -1,16 +1,16 @@ #include "b2ObjectDestroyNotifier.h" -static b2ObjectDestroyNotifer __objectDestroyNotifier = NULL; +static b2ObjectDestroyNotifer __objectDestroyNotifier = nullptr; void b2SetObjectDestroyNotifier(b2ObjectDestroyNotifer notifier) { __objectDestroyNotifier = notifier; } -void b2NotifyObjectDestroyed(void* obj, const char* typeName /* = NULL */) +void b2NotifyObjectDestroyed(void* obj, b2ObjectType type, const char* typeName) { - if (__objectDestroyNotifier != NULL) + if (__objectDestroyNotifier != nullptr) { - __objectDestroyNotifier(obj, typeName); + __objectDestroyNotifier(obj, type, typeName); } } diff --git a/sources/Box2D/b2ObjectDestroyNotifier.h b/sources/Box2D/b2ObjectDestroyNotifier.h index 7c607563..481d368c 100644 --- a/sources/Box2D/b2ObjectDestroyNotifier.h +++ b/sources/Box2D/b2ObjectDestroyNotifier.h @@ -1,8 +1,18 @@ #pragma once -#include +enum class b2ObjectType +{ + CONTACT, + CIRCLE_SHAPE, + EDGE_SHAPE, + POLYGON_SHAPE, + CHAIN_SHAPE, + FIXTURE, + JOIN, + BODY +}; -typedef void (*b2ObjectDestroyNotifer)(void*, const char*); +typedef void (*b2ObjectDestroyNotifer)(void*, b2ObjectType, const char*); void b2SetObjectDestroyNotifier(b2ObjectDestroyNotifer notifier); -void b2NotifyObjectDestroyed(void* obj, const char* typeName = NULL); +void b2NotifyObjectDestroyed(void* obj, b2ObjectType type, const char* typeName);