#include "physics.h" #include 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); } void lovrWorldGetLinearDamping(World* world, float* damping, float* threshold) { *damping = dWorldGetLinearDamping(world->id); *threshold = dWorldGetLinearDampingThreshold(world->id); } void lovrWorldSetLinearDamping(World* world, float damping, float threshold) { dWorldSetLinearDamping(world->id, damping); dWorldSetLinearDampingThreshold(world->id, threshold); } void lovrWorldUpdate(World* world, float dt) { dWorldQuickStep(world->id, dt); }