summaryrefslogtreecommitdiff
path: root/libphysics
diff options
context:
space:
mode:
Diffstat (limited to 'libphysics')
-rw-r--r--libphysics/body.c42
-rw-r--r--libphysics/test/vis.c10
-rw-r--r--libphysics/tick.c4
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);
}
}