diff options
Diffstat (limited to 'libphysics/body.c')
| -rw-r--r-- | libphysics/body.c | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/libphysics/body.c b/libphysics/body.c new file mode 100644 index 0000000..4ea05bd --- /dev/null +++ b/libphysics/body.c @@ -0,0 +1,81 @@ +#include <vecmath.h> +#include <physics.h> +#include <stdlib.h> + +#include "dat.h" + +#define POOL_SIZE 2048 + +Body phxbodypool[POOL_SIZE]; +int phxbodypoolsize; + +static Body *allocbody(void); + +Body * +phxnew(BodyType type) +{ + Body *b; + + if((b = allocbody()) == NULL) + return b; + + b->type = type; + return b; +} + +void +phxdel(Body *b) +{ + b->active = 0; +} + +void +phxsetpos(Body *b, float x, float y) +{ + b->pos[0] = x; + b->pos[1] = y; +} + +void +phxsetsize(Body *b, float w, float h) +{ + b->size[0] = w; + b->size[1] = h; +} + +void +phxgetpos(Body *b, float p[2]) +{ + vec2_dup(p, b->pos); +} + +void +phxgetsize(Body *b, float p[2]) +{ + vec2_dup(p, b->size); +} + +void +phxapplyaccel(Body *b, float a[2]) +{ + vec2_add(b->accel, b->accel, a); +} + +Body * +allocbody(void) +{ + int i; + for(i = 0; i < phxbodypoolsize; i++) { + if(!phxbodypool[i].active) + break; + } + + if(i >= phxbodypoolsize) { + if(phxbodypoolsize == POOL_SIZE) + return NULL; + i = phxbodypoolsize++; + } + + phxbodypool[i].active = 1; + return phxbodypool + i; +} |
