From e03dc703edbbe7fb7610aaf9c2112d5f1ed2b93a Mon Sep 17 00:00:00 2001 From: John Alanbrook Date: Fri, 15 Mar 2024 11:21:36 -0500 Subject: [PATCH] move pain process loop into javascript --- scripts/engine.js | 17 ++++++- source/engine/jsffi.c | 11 +++-- source/engine/sprite.c | 1 - source/engine/timer.c | 100 ----------------------------------------- source/engine/timer.h | 29 ------------ source/engine/yugine.c | 3 -- 6 files changed, 24 insertions(+), 137 deletions(-) delete mode 100644 source/engine/timer.c delete mode 100644 source/engine/timer.h diff --git a/scripts/engine.js b/scripts/engine.js index c0ae893..0f75508 100644 --- a/scripts/engine.js +++ b/scripts/engine.js @@ -146,7 +146,22 @@ global.mixin("scripts/render.js"); function process() { - say ('holy cow'); + var elapsed = 0.16; + prosperon.appupdate(elapsed); + prosperon.emitters_step(elapsed). + if (sim.play || sim.step) { + var dt = 0.16; + prosperon.update(dt*game.timescale); + if (sim.mode = "step") + sim.pause(); + } + physlag += elapsed; + while (physlag > physMS) { + physlag -= physMS; + prosperon.physstep(physMS*timescale); + prosperon.physupdate(physMS*timescale); + } + prosperon.render(); } global.Game = { diff --git a/source/engine/jsffi.c b/source/engine/jsffi.c index 5b10d7c..eb110ff 100644 --- a/source/engine/jsffi.c +++ b/source/engine/jsffi.c @@ -3,7 +3,6 @@ #include "script.h" #include "anim.h" -#include "timer.h" #include "debug.h" #include "debugdraw.h" #include "font.h" @@ -206,8 +205,6 @@ JSValue ptr2js(void *ptr) { return obj; } -struct timer *js2timer(JSValue v) { return id2timer(js2int(v)); } - double js_get_prop_number(JSValue v, const char *p) { double num; JS_ToFloat64(js, &num, js_getpropstr(v,p)); @@ -1485,6 +1482,14 @@ GETSET_GLOBAL(physMS, number) GETSET_GLOBAL(timescale, number) GETSET_GLOBAL(updateMS, number) +JSValue js_emitters_step(JSContext *js, JSValue this, int argc, JSValue *argv) +{ + emitters_step(js2number(argv[0])); + return JS_UNDEFINED; +} + +JSValue js_ + static const JSCFunctionListEntry js_prosperon_funcs[] = { CGETSET_ADD(global, updateMS), CGETSET_ADD(global, physMS), diff --git a/source/engine/sprite.c b/source/engine/sprite.c index 0592af1..f6193a1 100644 --- a/source/engine/sprite.c +++ b/source/engine/sprite.c @@ -5,7 +5,6 @@ #include "render.h" #include "stb_ds.h" #include "texture.h" -#include "timer.h" #include "HandmadeMath.h" #include "sprite.sglsl.h" diff --git a/source/engine/timer.c b/source/engine/timer.c deleted file mode 100644 index 2bd4043..0000000 --- a/source/engine/timer.c +++ /dev/null @@ -1,100 +0,0 @@ -#include "timer.h" -#include "log.h" -#include - -#include -#include "script.h" - -struct timer *timers; -static int first = -1; - -void check_timer(struct timer *t, double dt) { - if (!t->on) - return; - - t->remain_time -= dt; - - if (t->remain_time <= 0) { - t->cb(t->data); - if (t->repeat) { - t->remain_time = t->interval; - return; - } - - timer_pause(t); - return; - } -} - -void timer_update(double dt, double scale) { - double sdt = dt*scale; - for (int i = 0; i < arrlen(timers); i++) - if (timers[i].app) - check_timer(&timers[i], dt); - else - check_timer(&timers[i], sdt); -} - -int timer_make(double interval, void (*callback)(void *param), void *param, int own, int app) { - struct timer new; - new.remain_time = interval; - new.interval = interval; - new.cb = callback; - new.data = param; - new.repeat = 1; - new.owndata = own; - new.next = -1; - new.app = app; - - if (first < 0) { - timer_start(&new); - arrput(timers, new); - return arrlen(timers) - 1; - } else { - int retid = first; - first = id2timer(first)->next; - *id2timer(retid) = new; - timer_start(id2timer(retid)); - return retid; - } -} - -void timer_pause(struct timer *t) { - if (!t->on) return; - t->on = 0; -} - -void timer_stop(struct timer *t) { - if (!t->on) return; - t->on = 0; - t->remain_time = t->interval; -} - -void timer_start(struct timer *t) { - if (t->on) return; - t->on = 1; -} - -void timer_remove(int id) { - struct timer *t = id2timer(id); -// free_callee(t->data); - t->next = first; - t->on = 0; - first = id; -} - -void timerr_settime(struct timer *t, double interval) { - t->remain_time += (interval - t->interval); - t->interval = interval; -} - -struct timer *id2timer(int id) { - return &timers[id]; -} - -void timers_free() -{ -// for (int i = 0; i < arrlen(timers); i++) -// if (timers[i].on) -// free_callee(timers[i].data); -} diff --git a/source/engine/timer.h b/source/engine/timer.h deleted file mode 100644 index d4580fb..0000000 --- a/source/engine/timer.h +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef TIMER -#define TIMER - -struct timer { - int timerid; - int on; - - double interval; // Time of timer - int repeat; - double remain_time; // How much time until the timer executes - void (*cb)(void *data); - void *data; - int owndata; - int next; - int app; /* True if this timer is an "app" timer, and should always update; otherwise, only update with game time */ -}; - -int timer_make(double interval, void (*callback)(void *param), void *param, int own, int app); -struct timer *id2timer(int id); -void timer_remove(int id); -void timer_start(struct timer *t); -void timer_pause(struct timer *t); -void timer_stop(struct timer *t); -void timer_update(double dt, double scale); -void timerr_settime(struct timer *t, double interval); - -void timers_free(); - -#endif diff --git a/source/engine/yugine.c b/source/engine/yugine.c index 0921137..7e0bdbf 100644 --- a/source/engine/yugine.c +++ b/source/engine/yugine.c @@ -14,7 +14,6 @@ #include "datastream.h" -#include "timer.h" #include "quickjs/quickjs.h" #include "jsffi.h" @@ -104,8 +103,6 @@ static void process_frame() script_call_sym(c_process_fn,0,NULL); double elapsed = stm_sec(stm_laptime(&frame_t)); script_evalf("prosperon.appupdate(%g);", elapsed); - /* Timers all update every frame - once per monitor refresh */ - timer_update(elapsed, timescale); emitters_step(elapsed);