mirror of https://github.com/bjornbytes/lovr.git
Query callback use better function pointer syntax;
This commit is contained in:
parent
5d7811903b
commit
37be4a2909
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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]);
|
||||
|
|
Loading…
Reference in New Issue