diff options
| author | esquizo <esquizo+noreply@esquizo.net> | 2026-05-17 12:02:56 -0300 |
|---|---|---|
| committer | esquizo <esquizo+noreply@esquizo.net> | 2026-05-17 12:02:56 -0300 |
| commit | 97702f11ea016ca2e395f71f03c3fc3a2ee929ca (patch) | |
| tree | 20380f895ee422c48b970c7da5b921e046e35da4 /libphysics/body.c | |
| parent | 5c6b3c19172948cf2e1800a9333cfcd858ee829c (diff) | |
adicionado libphysics
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; +} |
