summaryrefslogtreecommitdiff
path: root/libphysics
diff options
context:
space:
mode:
Diffstat (limited to 'libphysics')
-rw-r--r--libphysics/test/vis.c17
-rw-r--r--libphysics/tick.c14
2 files changed, 26 insertions, 5 deletions
diff --git a/libphysics/test/vis.c b/libphysics/test/vis.c
index ad3cef8..30688df 100644
--- a/libphysics/test/vis.c
+++ b/libphysics/test/vis.c
@@ -7,7 +7,7 @@
#include "../dat.h"
-#define SBODY 256
+#define SBODY 2048
static void process_events(void);
static void render(void);
@@ -50,7 +50,7 @@ main()
phxsetpos(b, rand() % 800, rand() % 600);
phxsetsize(b, 5.0, 5.0);
- phxapplyaccel(b, (float[]){ 30000 * FLOAT_RAND, 30000 * FLOAT_RAND });
+ phxapplyaccel(b, (float[]){ (150 / PHX_TICK_TIME) * FLOAT_RAND, (150 / PHX_TICK_TIME) * FLOAT_RAND });
}
phxsetmap(8, 8, (int[]) {
@@ -74,9 +74,16 @@ main()
new_ticks = SDL_GetTicksNS();
delta = (new_ticks - old_ticks) / 1000000000.0;
old_ticks = new_ticks;
- phxtick(delta);
- while(phxnextcollevent(&event)) {
- printf("Collision with %d and %d\n", event.body1, event.body2);
+
+ static float accum = 0;
+
+ accum += delta;
+ while(accum >= PHX_TICK_TIME) {
+ phxfixtick();
+ while(phxnextcollevent(&event)) {
+ printf("Collision with %d and %d\n", event.body1, event.body2);
+ }
+ accum -= PHX_TICK_TIME;
}
render();
diff --git a/libphysics/tick.c b/libphysics/tick.c
index f31930a..23f7fa0 100644
--- a/libphysics/tick.c
+++ b/libphysics/tick.c
@@ -39,6 +39,20 @@ phxtick(float delta)
}
void
+phxfixtick(void)
+{
+ tick();
+ for(int i = 0; i < phxbodypoolsize; i++) {
+ Body *b = phxbodypool + i;
+ if(!b->active)
+ continue;
+
+ b->accel[0] = 0.0;
+ b->accel[1] = 0.0;
+ }
+}
+
+void
tick(void)
{
static int count = 0;