diff options
Diffstat (limited to 'libphysics/tick.c')
| -rw-r--r-- | libphysics/tick.c | 45 |
1 files changed, 6 insertions, 39 deletions
diff --git a/libphysics/tick.c b/libphysics/tick.c index a875915..3ba60f8 100644 --- a/libphysics/tick.c +++ b/libphysics/tick.c @@ -7,11 +7,6 @@ #define TILE_SIZE 16 #define TEST_BUFFER_SIZE 0x10000 -typedef struct TestCollision TestCollision; -struct TestCollision { - BodyID a, b; -}; - static void tick(void); static void mapcollision(Body *); static void bodycollision(Body *); @@ -20,7 +15,6 @@ static void bodycollisionmap(Body *); static void bodycollisionmapsub(Body *, BlockmapNode *); static void enqueuetest(TestCollision *t); -static void resolve(void); static TestCollision testcollision[TEST_BUFFER_SIZE]; static int testcollisioncount; @@ -87,13 +81,14 @@ tick(void) mapcollision(b); } + testcollisioncount = 0; for(int i = 0; i < phxbodypoolsize; i++) { Body *b = phxbodypool + i; if(!b->active) continue; bodycollisionmap(b); } - resolve(); + __phxnarrowphase(testcollisioncount, testcollision); for(int i = 0; i < phxbodypoolsize; i++) { Body *b = phxbodypool + i; @@ -179,37 +174,9 @@ void enqueuetest(TestCollision *t) { testcollision[testcollisioncount++] = *t; - if(testcollisioncount >= TEST_BUFFER_SIZE) - resolve(); -} - -void -resolve(void) -{ - CollisionEvent event; - - for(int i = 0; i < testcollisioncount; i++) { - TestCollision *c = testcollision + i; - Body *a = c->a + phxbodypool; - Body *b = c->b + phxbodypool; - - if(a < b && phxaabbcheck(a, b)) { - float p[2], n[2], rvel[2], j; - phxaabbresolv(a, b, p, n); - - vec2_sub(rvel, a->vel, b->vel); - j = vec2_dot(rvel, n); - - vec2_sub_scaled(a->vel, a->vel, n, 0.5); - vec2_sub_scaled(b->vel, b->vel, n, -0.5); - - vec2_sub_scaled(a->pos, a->pos, p, 0.5); - vec2_sub_scaled(b->pos, b->pos, p, -0.5); - - event.body1 = c->a; - event.body2 = c->b; - phxenqevent(&event); - } + if(testcollisioncount >= TEST_BUFFER_SIZE) { + __phxnarrowphase(testcollisioncount, testcollision); + testcollisioncount = 0; } - testcollisioncount = 0; } + |
