#include #include #include #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; }