javasrcript update & phys update

This commit is contained in:
John Alanbrook 2023-01-11 14:57:15 +00:00
parent 3baec775a8
commit 469b955d97
3 changed files with 29 additions and 34 deletions

View file

@ -153,14 +153,19 @@ duk_ret_t duk_sys_cmd(duk_context *duk) {
duk_ret_t duk_register(duk_context *duk) {
int cmd = duk_to_int(duk, 0);
void *obj = duk_get_pointer(duk, 1);
void *fn = duk_get_pointer(duk, 2);
void *obj = duk_get_heapptr(duk, 1);
void *fn = duk_get_heapptr(duk, 2);
switch (cmd) {
case 0:
register_update(obj, fn);
break;
case 1:
register_physics(obj, fn);
break;
}
/* Test a call ... */
duk_push_pointer(duk, fn);
duk_push_pointer(duk, obj);
duk_call_method(duk, 0);
return 0;
}

View file

@ -111,39 +111,27 @@ void script_call_sym_args(void *sym, void *args)
//s7_call(s7, sym, s7_cons(s7, args, s7_nil(s7)));
}
void **updates;
void **guis;
void **physics;
struct obupdate {
void *obj;
void *sym;
};
struct obupdate *obupdates = NULL;
struct obupdate *updates = NULL;
struct obupdate *physics = NULL;
void **guis = NULL;
void register_update(void *sym) {
arrput(updates, sym);
}
void register_obupdate(void *obj, void *sym) {
void register_update(void *obj, void *sym) {
struct obupdate ob = {obj, sym};
arrput(obupdates, ob);
arrput(updates, ob);
}
void call_updates(double dt) {
for (int i = 0; i < arrlen(updates); i++) {
duk_push_heapptr(duk, updates[i]);
duk_push_heapptr(duk, updates[i].obj);
duk_push_heapptr(duk, updates[i].sym);
duk_push_number(duk, dt);
duk_call(duk, 1);
}
for (int i = 0; i < arrlen(obupdates); i++) {
duk_push_heapptr(duk, obupdates[i].sym);
duk_push_heapptr(duk, obupdates[i].obj);
duk_push_number(duk, dt);
duk_call_method(duk, 1);
duk_call_prop(duk, -3, 1);
duk_pop_2(duk);
}
}
@ -156,14 +144,17 @@ void call_gui() {
script_call_sym(guis[i]);
}
void register_physics(void *sym) {
arrput(physics, sym);
void register_physics(void *obj, void *sym) {
struct obupdate ob = {obj, sym};
arrput(physics, ob);
}
void call_physics(double dt) {
for (int i = 0; i < arrlen(physics); i++) {
duk_push_pointer(duk, physics[i]);
duk_push_heapptr(duk, physics[i].obj);
duk_push_heapptr(duk, physics[i].sym);
duk_push_number(duk, dt);
duk_call(duk, 1);
duk_call_prop(duk, -3, 1);
duk_pop_2(duk);
}
}

View file

@ -18,14 +18,13 @@ void script_call_sym_args(void *sym, void *args);
int script_has_sym(void *sym);
void script_eval_w_env(const char *s, void *env);
void register_update(void *sym);
void register_obupdate(void *obj, void *sym);
void register_update(void *obj, void *sym);
void call_updates(double dt);
void register_gui(void *sym);
void call_gui();
void register_physics(void *sym);
void register_physics(void *obj, void *sym);
void call_physics(double dt);
duk_idx_t vec2duk(cpVect v);