#include #include #include #include "dat.h" #define POOL_SIZE 2048 Body phxbodypool[POOL_SIZE]; int phxbodypoolsize; static BodyID allocbody(void); BodyID phxnew(BodyType type) { BodyID b; if((b = allocbody()) == -1) return b; phxbodypool[b].type = type; return b; } void phxdel(BodyID id) { phxbodypool[id].active = 0; } void phxsetpos(BodyID b, float x, float y) { vec2_dup(phxbodypool[b].pos, (vec2){ x, y }); } void phxsetsize(BodyID b, float w, float h) { vec2_dup(phxbodypool[b].size, (vec2){ w, h }); } void phxgetpos(BodyID b, float p[2]) { vec2_dup(p, phxbodypool[b].pos); } void phxgetsize(BodyID b, float p[2]) { vec2_dup(p, phxbodypool[b].size); } void phxapplyaccel(BodyID b, float a[2]) { vec2_add(phxbodypool[b].accel, phxbodypool[b].accel, a); } BodyID allocbody(void) { int i; for(i = 0; i < phxbodypoolsize; i++) { if(!phxbodypool[i].active) break; } if(i >= phxbodypoolsize) { if(phxbodypoolsize == POOL_SIZE) return -1; i = phxbodypoolsize++; } phxbodypool[i].active = 1; return i; }