Query callback use better function pointer syntax;

This commit is contained in:
bjorn 2024-04-25 13:51:14 -07:00
parent 5d7811903b
commit 37be4a2909
3 changed files with 15 additions and 15 deletions

View File

@ -28,8 +28,8 @@ typedef Joint DistanceJoint;
typedef Joint HingeJoint;
typedef Joint SliderJoint;
typedef bool (*RaycastCallback)(Collider* collider, float position[3], float normal[3], uint32_t child, void* userdata);
typedef bool (*QueryCallback)(Collider* collider, uint32_t child, void* userdata);
typedef bool CastCallback(Collider* collider, float position[3], float normal[3], uint32_t child, void* userdata);
typedef bool QueryCallback(Collider* collider, uint32_t child, void* userdata);
bool lovrPhysicsInit(void);
void lovrPhysicsDestroy(void);
@ -53,9 +53,9 @@ uint32_t lovrWorldGetJointCount(World* world);
Collider* lovrWorldGetColliders(World* world, Collider* collider);
Joint* lovrWorldGetJoints(World* world, Joint* joint);
void lovrWorldUpdate(World* world, float dt);
void lovrWorldRaycast(World* world, float start[3], float end[3], RaycastCallback callback, void* userdata);
bool lovrWorldQueryBox(World* world, float position[3], float size[3], QueryCallback callback, void* userdata);
bool lovrWorldQuerySphere(World* world, float position[3], float radius, QueryCallback callback, void* userdata);
void lovrWorldRaycast(World* world, float start[3], float end[3], CastCallback* callback, void* userdata);
bool lovrWorldQueryBox(World* world, float position[3], float size[3], QueryCallback* callback, void* userdata);
bool lovrWorldQuerySphere(World* world, float position[3], float radius, QueryCallback* callback, void* userdata);
void lovrWorldGetGravity(World* world, float gravity[3]);
void lovrWorldSetGravity(World* world, float gravity[3]);
const char* lovrWorldGetTagName(World* world, uint32_t tag);

View File

@ -181,7 +181,7 @@ void lovrWorldUpdate(World* world, float dt) {
JPH_PhysicsSystem_Step(world->system, dt, world->collisionSteps);
}
void lovrWorldRaycast(World* world, float start[3], float end[3], RaycastCallback callback, void* userdata) {
void lovrWorldRaycast(World* world, float start[3], float end[3], CastCallback* callback, void* userdata) {
const JPH_NarrowPhaseQuery* query = JPC_PhysicsSystem_GetNarrowPhaseQueryNoLock(world->system);
const JPH_RVec3 origin = { start[0], start[1], start[2] };
const JPH_Vec3 direction = { end[0] - start[0], end[1] - start[1], end[2] - start[2] };
@ -218,7 +218,7 @@ void lovrWorldRaycast(World* world, float start[3], float end[3], RaycastCallbac
JPH_AllHit_CastRayCollector_Destroy(collector);
}
static bool lovrWorldQueryShape(World* world, JPH_Shape* shape, float position[3], float scale[3], QueryCallback callback, void* userdata) {
static bool lovrWorldQueryShape(World* world, JPH_Shape* shape, float position[3], float scale[3], QueryCallback* callback, void* userdata) {
JPH_RMatrix4x4 transform;
float* m = &transform.m11;
mat4_identity(m);
@ -246,11 +246,11 @@ static bool lovrWorldQueryShape(World* world, JPH_Shape* shape, float position[3
return count > 0;
}
bool lovrWorldQueryBox(World* world, float position[3], float size[3], QueryCallback callback, void* userdata) {
bool lovrWorldQueryBox(World* world, float position[3], float size[3], QueryCallback* callback, void* userdata) {
return lovrWorldQueryShape(world, state.queryBox, position, size, callback, userdata);
}
bool lovrWorldQuerySphere(World* world, float position[3], float radius, QueryCallback callback, void* userdata) {
bool lovrWorldQuerySphere(World* world, float position[3], float radius, QueryCallback* callback, void* userdata) {
float scale[3] = { radius, radius, radius };
return lovrWorldQueryShape(world, state.querySphere, position, scale, callback, userdata);
}

View File

@ -86,7 +86,7 @@ static void defaultNearCallback(void* data, dGeomID ga, dGeomID gb) {
}
typedef struct {
RaycastCallback callback;
CastCallback* callback;
void* userdata;
bool shouldStop;
} RaycastData;
@ -94,7 +94,7 @@ typedef struct {
static void raycastCallback(void* d, dGeomID a, dGeomID b) {
RaycastData* data = d;
if (data->shouldStop) return;
RaycastCallback callback = data->callback;
CastCallback* callback = data->callback;
void* userdata = data->userdata;
Shape* shape = dGeomGetData(b);
Collider* collider = dBodyGetData(dGeomGetBody(b));
@ -112,7 +112,7 @@ static void raycastCallback(void* d, dGeomID a, dGeomID b) {
}
typedef struct {
QueryCallback callback;
QueryCallback* callback;
void* userdata;
bool called;
bool shouldStop;
@ -276,7 +276,7 @@ void lovrWorldSetStepCount(World* world, int iterations) {
dWorldSetQuickStepNumIterations(world->id, iterations);
}
void lovrWorldRaycast(World* world, float start[3], float end[3], RaycastCallback callback, void* userdata) {
void lovrWorldRaycast(World* world, float start[3], float end[3], CastCallback* callback, void* userdata) {
RaycastData data = { .callback = callback, .userdata = userdata, .shouldStop = false };
float dx = start[0] - end[0];
float dy = start[1] - end[1];
@ -288,7 +288,7 @@ void lovrWorldRaycast(World* world, float start[3], float end[3], RaycastCallbac
dGeomDestroy(ray);
}
bool lovrWorldQueryBox(World* world, float position[3], float size[3], QueryCallback callback, void* userdata) {
bool lovrWorldQueryBox(World* world, float position[3], float size[3], QueryCallback* callback, void* userdata) {
QueryData data = { .callback = callback, .userdata = userdata, .called = false, .shouldStop = false };
dGeomID box = dCreateBox(world->space, fabsf(size[0]), fabsf(size[1]), fabsf(size[2]));
dGeomSetPosition(box, position[0], position[1], position[2]);
@ -297,7 +297,7 @@ bool lovrWorldQueryBox(World* world, float position[3], float size[3], QueryCall
return data.called;
}
bool lovrWorldQuerySphere(World* world, float position[3], float radius, QueryCallback callback, void* userdata) {
bool lovrWorldQuerySphere(World* world, float position[3], float radius, QueryCallback* callback, void* userdata) {
QueryData data = { .callback = callback, .userdata = userdata, .called = false, .shouldStop = false };
dGeomID sphere = dCreateSphere(world->space, fabsf(radius));
dGeomSetPosition(sphere, position[0], position[1], position[2]);