diff options
Diffstat (limited to 'libphysics')
| -rw-r--r-- | libphysics/body.c | 42 | ||||
| -rw-r--r-- | libphysics/test/vis.c | 10 | ||||
| -rw-r--r-- | libphysics/tick.c | 4 |
3 files changed, 27 insertions, 29 deletions
diff --git a/libphysics/body.c b/libphysics/body.c index 4ea05bd..51a352d 100644 --- a/libphysics/body.c +++ b/libphysics/body.c @@ -9,59 +9,57 @@ Body phxbodypool[POOL_SIZE]; int phxbodypoolsize; -static Body *allocbody(void); +static BodyID allocbody(void); -Body * +BodyID phxnew(BodyType type) { - Body *b; + BodyID b; - if((b = allocbody()) == NULL) + if((b = allocbody()) == -1) return b; - b->type = type; + phxbodypool[b].type = type; return b; } void -phxdel(Body *b) +phxdel(BodyID id) { - b->active = 0; + phxbodypool[id].active = 0; } void -phxsetpos(Body *b, float x, float y) +phxsetpos(BodyID b, float x, float y) { - b->pos[0] = x; - b->pos[1] = y; + vec2_dup(phxbodypool[b].pos, (vec2){ x, y }); } void -phxsetsize(Body *b, float w, float h) +phxsetsize(BodyID b, float w, float h) { - b->size[0] = w; - b->size[1] = h; + vec2_dup(phxbodypool[b].size, (vec2){ w, h }); } void -phxgetpos(Body *b, float p[2]) +phxgetpos(BodyID b, float p[2]) { - vec2_dup(p, b->pos); + vec2_dup(p, phxbodypool[b].pos); } void -phxgetsize(Body *b, float p[2]) +phxgetsize(BodyID b, float p[2]) { - vec2_dup(p, b->size); + vec2_dup(p, phxbodypool[b].size); } void -phxapplyaccel(Body *b, float a[2]) +phxapplyaccel(BodyID b, float a[2]) { - vec2_add(b->accel, b->accel, a); + vec2_add(phxbodypool[b].accel, phxbodypool[b].accel, a); } -Body * +BodyID allocbody(void) { int i; @@ -72,10 +70,10 @@ allocbody(void) if(i >= phxbodypoolsize) { if(phxbodypoolsize == POOL_SIZE) - return NULL; + return -1; i = phxbodypoolsize++; } phxbodypool[i].active = 1; - return phxbodypool + i; + return i; } diff --git a/libphysics/test/vis.c b/libphysics/test/vis.c index 7d6466a..3111005 100644 --- a/libphysics/test/vis.c +++ b/libphysics/test/vis.c @@ -45,11 +45,12 @@ main() #define FLOAT_RAND (2 * (rand() / (float)RAND_MAX) - 1) for(int i = 0; i < SBODY; i++) { - Body *b = phxnew(BTYPE_AABB); - assert(b != NULL); + BodyID b = phxnew(BTYPE_AABB); + assert(b != -1); + phxsetpos(b, rand() % 800, rand() % 600); phxsetsize(b, 16.0, 16.0); - phxapplyaccel(b, (float[]){ 100000 * FLOAT_RAND, 100000 * FLOAT_RAND }); + phxapplyaccel(b, (float[]){ 30000 * FLOAT_RAND, 30000 * FLOAT_RAND }); } phxsetmap(8, 8, (int[]) { @@ -75,7 +76,7 @@ main() old_ticks = new_ticks; phxtick(delta); while(phxnextcollevent(&event)) { - printf("Collision with %p and %p\n", event.body1, event.body2); + printf("Collision with %d and %d\n", event.body1, event.body2); } render(); @@ -106,7 +107,6 @@ render(void) SDL_SetRenderDrawColor(renderer, 0x00, 0x00, 0x00, 0xFF); SDL_RenderClear(renderer); - SDL_SetRenderDrawColor(renderer, 0xFF, 0x00, 0xFF, 0xFF); for(int y = 0; y < phxmapheight; y++) for(int x = 0; x < phxmapwidth; x++) { diff --git a/libphysics/tick.c b/libphysics/tick.c index c6399ab..0d57a8d 100644 --- a/libphysics/tick.c +++ b/libphysics/tick.c @@ -130,8 +130,8 @@ bodycollision(Body *a) vec2_sub_scaled(a->pos, a->pos, p, 0.5); vec2_sub_scaled(b->pos, b->pos, p, -0.5); - event.body1 = a; - event.body2 = b; + event.body1 = a - phxbodypool; + event.body2 = b - phxbodypool; phxenqevent(&event); } } |
