mirror of https://github.com/bjornbytes/lovr.git
44 lines
868 B
C
44 lines
868 B
C
#include "physics.h"
|
|
#include <stdlib.h>
|
|
|
|
void lovrPhysicsInit() {
|
|
dInitODE();
|
|
|
|
if (!dCheckConfiguration("ODE_single_precision")) {
|
|
error("lovr.physics must use single precision");
|
|
}
|
|
|
|
atexit(lovrPhysicsDestroy);
|
|
}
|
|
|
|
void lovrPhysicsDestroy() {
|
|
dCloseODE();
|
|
}
|
|
|
|
World* lovrWorldCreate() {
|
|
World* world = lovrAlloc(sizeof(World), lovrWorldDestroy);
|
|
if (!world) return NULL;
|
|
|
|
world->id = dWorldCreate();
|
|
|
|
return world;
|
|
}
|
|
|
|
void lovrWorldDestroy(const Ref* ref) {
|
|
World* world = containerof(ref, World);
|
|
dWorldDestroy(world->id);
|
|
free(world);
|
|
}
|
|
|
|
void lovrWorldGetGravity(World* world, float* x, float* y, float* z) {
|
|
dReal gravity[3];
|
|
dWorldGetGravity(world->id, gravity);
|
|
*x = gravity[0];
|
|
*y = gravity[1];
|
|
*z = gravity[2];
|
|
}
|
|
|
|
void lovrWorldSetGravity(World* world, float x, float y, float z) {
|
|
dWorldSetGravity(world->id, x, y, z);
|
|
}
|