Before SED

This commit is contained in:
John Alanbrook 2023-04-18 19:49:17 +00:00
parent 4358e34aa7
commit 27d15f1e81
13 changed files with 232 additions and 106865 deletions

View file

@ -23,8 +23,7 @@ else
INFO = rel
endif
# QuickJS options
QFLAGS = $(LVL) -DDBG=$(DBG) -DED=$(ED)
@ -73,7 +72,7 @@ SEM = 0.0.1
COM != git rev-parse --short HEAD
VER = $(SEM)-$(COM)
COMPILER_FLAGS = $(includeflag) $(QFLAGS) -MD $(WARNING_FLAGS) -DCP_USE_DOUBLES=0 -DTINYSPLINE_FLOAT_PRECISION -DDUK_USE_SYMBOL_BUILTIN -DVER=\"$(VER)\" -DINFO=\"$(INFO)\" -march=native -std=c99 -c $< -o $@
COMPILER_FLAGS = $(includeflag) $(QFLAGS) -MD $(WARNING_FLAGS) -DCP_USE_DOUBLES=0 -DTINYSPLINE_FLOAT_PRECISION -DDUK_USE_SYMBOL_BUILTIN -DVER=\"$(VER)\" -DINFO=\"$(INFO)\" -DCONFIG_BIGNUM=y -DCONFIG_VERSION="2020-11-08" -march=native -std=c99 -c $< -o $@
LIBPATH = -L$(BIN)
@ -84,7 +83,7 @@ ifeq ($(OS), WIN32)
EXT = .exe
else
LINKER_FLAGS = $(QFLAGS) -L/usr/local/lib -rdynamic
ELIBS = engine pthread yughc glfw3 c m dl
ELIBS = engine pthread yughc glfw3 quickjs c m dl
CLIBS =
endif

View file

@ -659,31 +659,16 @@ void register_collide(void *sym) {
void duk_call_phys_cb(cpVect norm, struct callee c, int hit, cpArbiter *arb)
{
duk_push_heapptr(duk, c.fn);
duk_push_heapptr(duk, c.obj);
int obj = duk_push_object(duk);
vect2duk(norm);
duk_put_prop_literal(duk, obj, "normal");
duk_push_int(duk, hit);
duk_put_prop_literal(duk, obj, "hit");
cpShape *shape1;
cpShape *shape2;
cpArbiterGetShapes(arb, &shape1, &shape2);
duk_push_boolean(duk, cpShapeGetSensor(shape2));
duk_put_prop_literal(duk,obj,"sensor");
vect2duk(cpArbiterGetSurfaceVelocity(arb));
duk_put_prop_literal(duk, obj, "velocity");
duk_call_method(duk,1);
// if (duk_pcall_method(duk, 1))
// duk_run_err();
duk_pop(duk);
JSValue obj = JS_NewObject(js);
JS_SetPropertyStr(js, obj, "normal", vec2js(norm));
JS_SetPropertyStr(js, obj, "hit", JS_NewInt32(js, hit));
JS_SetPropertyStr(js, obj, "sensor", JS_NewBool(js, cpShapeGetSensor(shape2)));
JS_SetPropertyStr(js, obj, "velocity", vec2js(cpArbiterGetSurfaceVelocity(arb)));
JS_Call(js, c.fn, c.obj, 1, &obj);
}
#define CTYPE_BEGIN 0
@ -707,7 +692,7 @@ static cpBool handle_collision(cpArbiter *arb, int type)
cpVect norm1 = cpArbiterGetNormal(arb);
cpVect vel1 = cpArbiterGetSurfaceVelocity(arb);
/*
switch (type) {
case CTYPE_BEGIN:
for (int i = 0; i < arrlen(go->shape_cbs); i++)
@ -726,7 +711,7 @@ static cpBool handle_collision(cpArbiter *arb, int type)
break;
}
*/
return 1;
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -40,76 +40,73 @@
(byte & 0x02 ? '1' : '0'), \
(byte & 0x01 ? '1' : '0')
struct gameobject *duk2go(duk_context *duk, int p)
int js2int(JSValue v)
{
return id2go(duk_to_int(duk, p));
int i;
JS_ToInt32(js,&i,v);
return i;
}
struct timer *duk2timer(duk_context *duk, int p)
struct gameobject *js2go(JSValue v)
{
return id2timer(duk_to_int(duk, p));
return id2go(js2int(v));
}
struct color duk2color(duk_context *duk, int p)
struct timer *js2timer(JSValue v)
{
return id2timer(js2int(v));
}
struct color duk2color(JSValue v)
{
struct color color;
duk_get_prop_index(duk, p, 0);
color.r = duk_to_int(duk, -1);
duk_get_prop_index(duk, p, 1);
color.g = duk_to_int(duk, -1);
duk_get_prop_index(duk, p, 2);
color.b = duk_to_int(duk, -1);
JS_ToInt64(js, &color.r, JS_GetPropertyUint32(js,v,0));
JS_ToInt64(js, &color.g, JS_GetPropertyUint32(js,v,1));
JS_ToInt64(js, &color.b, JS_GetPropertyUint32(js,v,2));
return color;
}
float duk_get_prop_number(duk_context *duk, int p, const char *str)
float js_get_prop_number(JSValue v, const char *p)
{
duk_get_prop_string(duk,p,str);
return duk_to_number(duk,-1);
float num;
JS_ToFloat64(js, &num, JS_GetPropertyStr(js, v, p));
return num;
}
struct glrect duk_to_glrect(duk_context *duk, int p)
struct glrect js_to_glrect(JSValue v)
{
struct glrect rect;
rect.s0 = duk_get_prop_number(duk,p,"s0");
rect.s1 = duk_get_prop_number(duk,p,"s1");
rect.t0 = duk_get_prop_number(duk,p,"t0");
rect.t1 = duk_get_prop_number(duk,p,"t1");
rect.s0 = js_get_prop_number(v,"s0");
rect.s1 = js_get_prop_number(v,"s1");
rect.t0 = js_get_prop_number(v,"t0");
rect.t1 = js_get_prop_number(v,"t1");
return rect;
}
cpVect duk2vec2(duk_context *duk, int p)
int js_arrlen(JSValue v)
{
cpVect pos;
if (p < 0) p = duk_get_top_index(duk) + p + 1;
duk_get_prop_index(duk, p, 0);
pos.x = duk_to_number(duk, -1);
duk_pop(duk);
duk_get_prop_index(duk, p, 1);
pos.y = duk_to_number(duk, -1);
duk_pop(duk);
return pos;
int len;
JS_ToInt32(js, &len, JS_GetProperty(js, v, JS_PROP_LENGTH));
return len;
}
cpBitmask duk2bitmask(duk_context *duk, int p)
cpVect js2vec2(JSValue v)
{
cpVect vect;
JS_ToInt64(js, &vect.x, JS_GetPropertyUint32(js, v, 0));
JS_ToInt64(js, &vect.y, JS_GetPropertyUint32(js,v,1));
return vect;
}
cpBitmask js2bitmask(JSValue v)
{
cpBitmask mask = 0;
if (p < 0) p = duk_get_top_index(duk)+p+1;
int len = duk_get_length(duk, p);
int len = js_arrlen(v);
for (int i = 0; i < len; i++) {
duk_get_prop_index(duk, p, i);
int val = duk_to_boolean(duk, -1);
duk_pop(duk);
int val = JS_ToBool(js, JS_GetPropertyUint32(js, v, i));
if (!val) continue;
mask |= 1<<i;
@ -118,31 +115,26 @@ cpBitmask duk2bitmask(duk_context *duk, int p)
return mask;
}
cpVect *duk2cpvec2arr(duk_context *duk, int p)
cpVect *js2cpvec2arr(JSValue v)
{
int n = duk_get_length(duk, p);
int n = js_arrlen(v);
cpVect *points = NULL;
for (int i = 0; i < n; i++) {
duk_get_prop_index(duk, p, i);
arrput(points, duk2vec2(duk, -1));
}
for (int i = 0; i < n; i++)
arrput(points, js2vec2(JS_GetPropertyUint32(js, v, i)));
return points;
}
void bitmask2duk(duk_context *duk, cpBitmask mask)
JSValue bitmask2js(cpBitmask mask)
{
int arr = duk_push_array(duk);
int arridx = 0;
JSValue arr = JS_NewObject(js);
for (int i = 0; i < 11; i++) {
int on = mask & 1<<i;
if (on) {
duk_push_int(duk, i);
duk_put_prop_index(duk, arr, arridx++);
}
JS_SetPropertyUint32(js, arr, i, JS_NewBool(js, on));
}
return arr;
}
void vec2float(cpVect v, float *f)
@ -151,105 +143,70 @@ void vec2float(cpVect v, float *f)
f[1] = v.y;
}
duk_idx_t vect2duk(cpVect v) {
duk_idx_t arr = duk_push_array(duk);
duk_push_number(duk, v.x);
duk_put_prop_index(duk, arr, 0);
duk_push_number(duk, v.y);
duk_put_prop_index(duk, arr, 1);
return arr;
}
duk_idx_t vecarr2duk(duk_context *duk, cpVect *points, int n)
JSValue vec2js(cpVect v)
{
duk_idx_t arr = duk_push_array(duk);
for (int i = 0; i < n; i++) {
vect2duk(points[i]);
duk_put_prop_index(duk, arr, i);
JSValue array = JS_NewObject(js);
JS_SetPropertyInt64(js, array, 0, JS_NewFloat64(js,v.x));
JS_SetPropertyInt64(js, array, 1, JS_NewFloat64(js,v.y));
return array;
}
return arr;
}
void duk_dump_stack(duk_context *duk)
JSValue vecarr2js(cpVect *points, int n)
{
YughInfo("DUK CALLSTACK");
for (int i = -1; ; i--) { /* Start at -2 to skip the invoked C function */
duk_inspect_callstack_entry(duk, i);
if (duk_is_undefined(duk, -1)) break;
duk_get_prop_string(duk, -1, "lineNumber");
long ln = duk_to_int(duk, -1);
duk_pop(duk);
duk_get_prop_string(duk, -1, "function");
duk_get_prop_string(duk, -1, "name");
const char *fn = duk_to_string(duk, -1);
duk_pop(duk);
duk_get_prop_string(duk, -1, "fileName");
const char *file = duk_to_string(duk, -1);
duk_pop(duk);
mYughLog(1, 3, ln, file, "function: %s", fn);
duk_pop_2(duk);
JSValue array = JS_NewObject(js);
for (int i = 0; i < n; i++)
JS_SetPropertyInt64(js, array, i, vec2js(points[i]));
return array;
}
duk_push_context_dump(duk);
YughInfo("DUK STACK\n%s", duk_to_string(duk, -1));
duk_pop(duk);
}
JSValue duk_gui_text(JSContext *js, JSValueConst this, int argc, JSValueConst *argv)
{
const char *s = JS_ToCString(js, argv[0]);
cpVect pos = js2vec2(argv[1]);
duk_ret_t duk_gui_text(duk_context *duk) {
const char *s = duk_to_string(duk, 0);
cpVect pos = duk2vec2(duk, 1);
float size = duk_to_number(duk, 2);
float size = js_to_number(argv[2]);
const float white[3] = {1.f, 1.f, 1.f};
renderText(s, &pos, size, white, 500,-1);
return 0;
return JS_NULL;
}
duk_ret_t duk_ui_text(duk_context *duk)
JSValue duk_ui_text(JSContext *js, JSValueConst this, int argc, JSValueConst *argv)
{
const char *s = duk_to_string(duk, 0);
cpVect pos = duk2vec2(duk, 1);
const char *s = JS_ToCString(js,argv[0]);
cpVect pos = js2vec2(argv[1]);
float size = duk_to_number(duk, 2);
struct color c = duk2color(duk,3);
float size = js_to_number(argv[2]);
struct color c = js2color(duk,3);
const float col[3] = {(float)c.r/255, (float)c.g/255, (float)c.b/255};
int wrap = duk_to_int(duk,4);
duk_push_int(duk,renderText(s, &pos, size, col, wrap,-1));
return 1;
int wrap = js_to_int(argv[4]);
return JS_NewInt64(js, renderText(s, &pos, size, col, wrap,-1));
}
duk_ret_t duk_cursor_text(duk_context *duk)
JSValue duk_cursor_text(JSContext *js, JSValueConst this, int argc, JSValueConst *argv)
{
const char *s = duk_to_string(duk, 0);
cpVect pos = duk2vec2(duk, 1);
const char *s = JS_ToCString(js,argv[0]);
cpVect pos = js2vec2(argv[1]);
float size = duk_to_number(duk, 2);
struct color c = duk2color(duk,3);
float size = js_to_number(argv[2]);
struct color c = js2color(duk,3);
const float col[3] = {(float)c.r/255, (float)c.g/255, (float)c.b/255};
int cursor = duk_to_int(duk,4);
int wrap = duk_to_int(duk,5);
int wrap = js_to_int(argv[5]);
int cursor = js_to_int(argv[4]);
renderText(s, &pos, size, col, wrap,cursor);
return 0;
return JS_NULL;
}
duk_ret_t duk_gui_img(duk_context *duk) {
const char *img = duk_to_string(duk, 0);
cpVect pos = duk2vec2(duk, 1);
gui_draw_img(img, pos.x, pos.y);
return 0;
}
duk_ret_t duk_nuke(duk_context *duk)
JSValue duk_gui_img(JSContext *js, JSValueConst this, int argc, JSValueConst *argv)
{
int cmd = duk_to_int(duk, 0);
const char *img = JS_ToCString(js,argv[0]);
cpVect pos = js2devc2(argv[1]);
gui_draw_img(img, pos.x, pos.y);
return JS_NULL;
}
JSValue duk_nuke(JSContext *js, JSValueConst this, int argc, JSValueConst *argv)
{
int cmd = js_to_int(argv[0]);
float editnum;
int editint;
char textbox[130];
@ -257,14 +214,10 @@ duk_ret_t duk_nuke(duk_context *duk)
switch(cmd) {
case 0:
duk_get_prop_string(duk, 2, "x");
rect.x = duk_to_number(duk,-1);
duk_get_prop_string(duk, 2, "y");
rect.y = duk_to_number(duk,-1);
duk_get_prop_string(duk,2,"w");
rect.w = duk_to_number(duk,-1);
duk_get_prop_string(duk,2,"h");
rect.h = duk_to_number(duk,-1);
rect.x = js_to_number(JS_GetPropertyStr(js, argv[1], "x"));
rect.y = js_to_number(JS_GetPropertyStr(js, argv[1], "y"));
rect.w = js_to_number(JS_GetPropertyStr(js, argv[1], "w"));
rect.h = js_to_number(JS_GetPropertyStr(js, argv[1], "h"));
nuke_begin(duk_to_string(duk, 1),rect, NK_WINDOW_BORDER | NK_WINDOW_MOVABLE | NK_WINDOW_SCALABLE | NK_WINDOW_TITLE);
break;
@ -273,13 +226,13 @@ duk_ret_t duk_nuke(duk_context *duk)
break;
case 2:
editnum = duk_to_number(duk, 2);
nuke_property_float(duk_to_string(duk, 1), duk_to_number(duk, 3), &editnum, duk_to_number(duk, 4), duk_to_number(duk, 5), duk_to_number(duk, 5));
editnum = js_to_number(argv[2]);
nuke_property_float(JS_ToCString(js,argv[1]), js_to_number(argv[3]), &editnum, js_to_number(argv[4]), js_to_number(argv[5]), js_to_number(argv[5]));
duk_push_number(duk, editnum);
return 1;
return JS_NewFloat64(js, editnum);
case 3:
nuke_nel(duk_to_number(duk, 1));
nuke_nel(js_to_number(argv[1]));
return 0;
case 4:
@ -349,7 +302,8 @@ duk_ret_t duk_nuke(duk_context *duk)
return 0;
}
duk_ret_t duk_win_make(duk_context *duk) {
JSValue duk_win_make(JSContext *js, JSValueConst this, int argc, JSValueConst *argv)
{
const char *title = duk_to_string(duk, 0);
int w = duk_to_int(duk, 1);
int h = duk_to_int(duk, 2);
@ -359,7 +313,7 @@ duk_ret_t duk_win_make(duk_context *duk) {
return 1;
}
duk_ret_t duk_spline_cmd(duk_context *duk)
JSValue duk_spline_cmd(JSContext *js, JSValueConst this, int argc, JSValueConst *argv)
{
tsBSpline spline;
@ -407,6 +361,7 @@ duk_ret_t duk_spline_cmd(duk_context *duk)
return 1;
}
void ints2duk(int *ints)
{
int idx = duk_push_array(duk);
@ -527,7 +482,8 @@ void dukext2paths(char *ext)
ftw(".", duk2path, 10);
}
duk_ret_t duk_cmd(duk_context *duk) {
JSValue duk_cmd(JSContext *js, JSValueConst this, int argc, JSValueConst *argv)
{
int cmd = duk_to_int(duk, 0);
switch(cmd) {
@ -597,11 +553,11 @@ duk_ret_t duk_cmd(duk_context *duk) {
break;
case 16:
color2float(duk2color(duk, 1), dbg_color);
color2float(js2color(duk, 1), dbg_color);
break;
case 17:
color2float(duk2color(duk, 1), trigger_color);
color2float(js2color(duk, 1), trigger_color);
break;
case 18:
@ -629,15 +585,15 @@ duk_ret_t duk_cmd(duk_context *duk) {
return 1;
case 24:
timer_pause(duk2timer(duk,1));
timer_pause(js2timer(duk,1));
break;
case 25:
timer_stop(duk2timer(duk,1));
timer_stop(js2timer(duk,1));
break;
case 26:
timer_start(duk2timer(duk,1));
timer_start(js2timer(duk,1));
break;
case 27:
@ -645,11 +601,11 @@ duk_ret_t duk_cmd(duk_context *duk) {
break;
case 28:
timerr_settime(duk2timer(duk,1), duk_to_number(duk, 2));
timerr_settime(js2timer(duk,1), js_to_number(argv[2]));
break;
case 29:
duk_push_number(duk, duk2timer(duk,1)->interval);
duk_push_number(duk, js2timer(duk,1)->interval);
return 1;
case 30:
@ -661,23 +617,23 @@ duk_ret_t duk_cmd(duk_context *duk) {
break;
case 32:
duk_push_number(duk, duk2timer(duk,1)->remain_time);
duk_push_number(duk, js2timer(duk,1)->remain_time);
return 1;
case 33:
duk_push_boolean(duk, duk2timer(duk, 1)->on);
duk_push_boolean(duk, js2timer(duk, 1)->on);
return 1;
case 34:
duk_push_boolean(duk, duk2timer(duk,1)->repeat);
duk_push_boolean(duk, js2timer(duk,1)->repeat);
return 1;
case 35:
duk2timer(duk,1)->repeat = duk_to_boolean(duk, 2);
js2timer(duk,1)->repeat = duk_to_boolean(duk, 2);
return 0;
case 36:
id2go(duk_to_int(duk, 1))->scale = duk_to_number(duk, 2);
id2go(duk_to_int(duk, 1))->scale = js_to_number(argv[2]);
cpSpaceReindexShapesForBody(space, id2go(duk_to_int(duk, 1))->body);
return 0;
@ -741,7 +697,7 @@ duk_ret_t duk_cmd(duk_context *duk) {
return 1;
case 51:
draw_cppoint(duk2vec2(duk, 1), duk_to_number(duk, 2), duk2color(duk,3));
draw_cppoint(duk2vec2(duk, 1), js_to_number(argv[2]), js2color(duk,3));
return 0;
case 52:
@ -749,7 +705,7 @@ duk_ret_t duk_cmd(duk_context *duk) {
return 1;
case 53:
draw_box(duk2vec2(duk, 1), duk2vec2(duk, 2), duk2color(duk,3));
draw_box(duk2vec2(duk, 1), duk2vec2(duk, 2), js2color(duk,3));
return 0;
case 54:
@ -786,7 +742,7 @@ duk_ret_t duk_cmd(duk_context *duk) {
break;
case 62:
add_zoom(duk_to_number(duk, 1));
add_zoom(js_to_number(argv[1]));
break;
case 63:
@ -862,7 +818,7 @@ duk_ret_t duk_cmd(duk_context *duk) {
return 1;
case 81:
draw_arrow(duk2vec2(duk,1), duk2vec2(duk,2), duk2color(duk,3), duk_to_int(duk,4));
draw_arrow(duk2vec2(duk,1), duk2vec2(duk,2), js2color(duk,3), duk_to_int(duk,4));
return 0;
case 82:
@ -870,7 +826,7 @@ duk_ret_t duk_cmd(duk_context *duk) {
return 0;
case 83:
draw_edge(duk2cpvec2arr(duk, 1), 2, duk2color(duk,2), 1);
draw_edge(duk2cpvec2arr(duk, 1), 2, js2color(duk,2), 1);
return 0;
case 84:
@ -905,7 +861,8 @@ duk_ret_t duk_cmd(duk_context *duk) {
return 0;
}
duk_ret_t duk_register(duk_context *duk) {
JSValue duk_register(JSContext *js, JSValueConst this, int argc, JSValueConst *argv)
{
int cmd = duk_to_int(duk, 0);
void *fn = duk_get_heapptr(duk, 1);
void *obj = duk_get_heapptr(duk, 2);
@ -953,7 +910,8 @@ void gameobject_add_shape_collider(int go, struct callee c, struct phys2d_shape
arrpush(id2go(go)->shape_cbs, shapecb);
}
duk_ret_t duk_register_collide(duk_context *duk) {
JSValue duk_register_collide(JSContext *js, JSValueConst this, int argc, JSValueConst *argv)
{
int cmd = duk_to_int(duk, 0);
void *fn = duk_get_heapptr(duk, 1);
void *obj = duk_get_heapptr(duk, 2);
@ -981,7 +939,8 @@ duk_ret_t duk_register_collide(duk_context *duk) {
return 0;
}
duk_ret_t duk_sys_cmd(duk_context *duk) {
JSValue duk_sys_cmd(JSContext *js, JSValueConst this, int argc, JSValueConst *argv)
{
int cmd = duk_to_int(duk, 0);
switch (cmd) {
@ -1031,13 +990,14 @@ duk_ret_t duk_sys_cmd(duk_context *duk) {
return 0;
}
duk_ret_t duk_make_gameobject(duk_context *duk) {
JSValue duk_make_gameobject(JSContext *js, JSValueConst this, int argc, JSValueConst *argv)
{
int g = MakeGameobject();
struct gameobject *go = get_gameobject_from_id(g);
go->scale = duk_to_number(duk, 0);
go->bodytype = duk_to_int(duk, 1);
go->mass = duk_to_number(duk, 2);
go->mass = js_to_number(argv[2]);
go->f = duk_to_number(duk, 3);
go->e = duk_to_number(duk, 4);
go->flipx = 1.f;
@ -1049,7 +1009,8 @@ duk_ret_t duk_make_gameobject(duk_context *duk) {
return 1;
}
duk_ret_t duk_yughlog(duk_context *duk) {
JSValue duk_yughlog(JSContext *js, JSValueConst this, int argc, JSValueConst *argv)
{
int cmd = duk_to_int(duk, 0);
const char *s = duk_to_string(duk,1);
const char *f = duk_to_string(duk, 2);
@ -1060,7 +1021,8 @@ duk_ret_t duk_yughlog(duk_context *duk) {
return 0;
}
duk_ret_t duk_set_body(duk_context *duk) {
JSValue duk_set_body(JSContext *js, JSValueConst this, int argc, JSValueConst *argv)
{
int cmd = duk_to_int(duk, 0);
int id = duk_to_int(duk, 1);
struct gameobject *go = get_gameobject_from_id(id);
@ -1069,7 +1031,7 @@ duk_ret_t duk_set_body(duk_context *duk) {
/* TODO: Possible that reindexing shapes only needs done for static shapes? */
switch (cmd) {
case 0:
gameobject_setangle(go, duk_to_number(duk, 2));
gameobject_setangle(go, js_to_number(argv[2]));
break;
case 1:
@ -1097,11 +1059,11 @@ duk_ret_t duk_set_body(duk_context *duk) {
break;
case 7:
cpBodySetMass(go->body, duk_to_number(duk, 2));
cpBodySetMass(go->body, js_to_number(argv[2]));
break;
case 8:
cpBodySetAngularVelocity(go->body, duk_to_number(duk, 2));
cpBodySetAngularVelocity(go->body, js_to_number(argv[2]));
return 0;
case 9:
@ -1126,7 +1088,8 @@ duk_ret_t duk_set_body(duk_context *duk) {
return 0;
}
duk_ret_t duk_q_body(duk_context *duk) {
JSValue duk_q_body(JSContext *js, JSValueConst this, int argc, JSValueConst *argv)
{
int q = duk_to_int(duk, 0);
struct gameobject *go = get_gameobject_from_id(duk_to_int(duk, 1));
@ -1169,7 +1132,8 @@ duk_ret_t duk_q_body(duk_context *duk) {
return 0;
}
duk_ret_t duk_make_sprite(duk_context *duk) {
JSValue duk_make_sprite(JSContext *js, JSValueConst this, int argc, JSValueConst *argv)
{
int go = duk_to_int(duk, 0);
const char *path = duk_to_string(duk, 1);
cpVect pos = duk2vec2(duk, 2);
@ -1184,7 +1148,8 @@ duk_ret_t duk_make_sprite(duk_context *duk) {
}
/* Make anim from texture */
duk_ret_t duk_make_anim2d(duk_context *duk) {
JSValue duk_make_anim2d(JSContext *js, JSValueConst this, int argc, JSValueConst *argv)
{
const char *path = duk_to_string(duk, 0);
int frames = duk_to_int(duk, 1);
int fps = duk_to_int(duk, 2);
@ -1195,7 +1160,8 @@ duk_ret_t duk_make_anim2d(duk_context *duk) {
return 1;
}
duk_ret_t duk_make_box2d(duk_context *duk) {
JSValue duk_make_box2d(JSContext *js, JSValueConst this, int argc, JSValueConst *argv)
{
int go = duk_to_int(duk, 0);
cpVect size = duk2vec2(duk, 1);
cpVect offset = duk2vec2(duk, 2);
@ -1217,7 +1183,7 @@ duk_ret_t duk_make_box2d(duk_context *duk) {
return 1;
}
duk_ret_t duk_cmd_box2d(duk_context *duk)
JSValue duk_cmd_box2d(JSContext *js, JSValueConst this, int argc, JSValueConst *argv)
{
int cmd = duk_to_int(duk, 0);
struct phys2d_box *box = duk_to_pointer(duk, 1);
@ -1239,7 +1205,7 @@ duk_ret_t duk_cmd_box2d(duk_context *duk)
break;
case 2:
box->rotation = duk_to_number(duk, 2);
box->rotation = js_to_number(argv[2]);
break;
}
@ -1247,9 +1213,10 @@ duk_ret_t duk_cmd_box2d(duk_context *duk)
return 0;
}
duk_ret_t duk_make_circle2d(duk_context *duk) {
JSValue duk_make_circle2d(JSContext *js, JSValueConst this, int argc, JSValueConst *argv)
{
int go = duk_to_int(duk, 0);
double radius = duk_to_number(duk, 1);
double radius = js_to_number(argv[1]);
struct phys2d_circle *circle = Make2DCircle(go);
circle->radius = radius;
@ -1266,7 +1233,7 @@ duk_ret_t duk_make_circle2d(duk_context *duk) {
return 1;
}
duk_ret_t duk_cmd_circle2d(duk_context *duk)
JSValue duk_cmd_circle2d(JSContext *js, JSValueConst this, int argc, JSValueConst *argv)
{
int cmd = duk_to_int(duk, 0);
struct phys2d_circle *circle = duk_to_pointer(duk, 1);
@ -1275,7 +1242,7 @@ duk_ret_t duk_cmd_circle2d(duk_context *duk)
switch(cmd) {
case 0:
circle->radius = duk_to_number(duk, 2);
circle->radius = js_to_number(argv[2]);
break;
case 1:
@ -1287,7 +1254,7 @@ duk_ret_t duk_cmd_circle2d(duk_context *duk)
return 0;
}
duk_ret_t duk_make_poly2d(duk_context *duk)
JSValue duk_make_poly2d(JSContext *js, JSValueConst this, int argc, JSValueConst *argv)
{
int go = duk_to_int(duk, 0);
struct phys2d_poly *poly = Make2DPoly(go);
@ -1302,7 +1269,7 @@ duk_ret_t duk_make_poly2d(duk_context *duk)
return 1;
}
duk_ret_t duk_cmd_poly2d(duk_context *duk)
JSValue duk_cmd_poly2d(JSContext *js, JSValueConst this, int argc, JSValueConst *argv)
{
int cmd = duk_to_int(duk,0);
struct phys2d_poly *poly = duk_to_pointer(duk,1);
@ -1318,7 +1285,7 @@ duk_ret_t duk_cmd_poly2d(duk_context *duk)
return 0;
}
duk_ret_t duk_make_edge2d(duk_context *duk)
JSValue duk_make_edge2d(JSContext *js, JSValueConst this, int argc, JSValueConst *argv)
{
int go = duk_to_int(duk, 0);
struct phys2d_edge *edge = Make2DEdge(go);
@ -1346,7 +1313,7 @@ duk_ret_t duk_make_edge2d(duk_context *duk)
return 1;
}
duk_ret_t duk_cmd_edge2d(duk_context *duk)
JSValue duk_cmd_edge2d(JSContext *js, JSValueConst this, int argc, JSValueConst *argv)
{
int cmd = duk_to_int(duk, 0);
struct phys2d_edge *edge = duk_to_pointer(duk, 1);
@ -1360,14 +1327,14 @@ duk_ret_t duk_cmd_edge2d(duk_context *duk)
break;
case 1:
edge->thickness = duk_to_number(duk, 2);
edge->thickness = js_to_number(argv[2]);
break;
}
return 0;
}
duk_ret_t duk_inflate_cpv(duk_context *duk)
JSValue duk_inflate_cpv(JSContext *js, JSValueConst this, int argc, JSValueConst *argv)
{
cpVect *points = duk2cpvec2arr(duk,0);
int n = duk_to_int(duk,1);
@ -1389,7 +1356,8 @@ duk_ret_t duk_inflate_cpv(duk_context *duk)
}
/* These are anims for controlling properties on an object */
duk_ret_t duk_anim(duk_context *duk) {
JSValue duk_anim(JSContext *js, JSValueConst this, int argc, JSValueConst *argv)
{
void *prop = duk_get_heapptr(duk, 0);
int keyframes = duk_get_length(duk, 1);
YughInfo("Processing %d keyframes.", keyframes);
@ -1416,9 +1384,10 @@ duk_ret_t duk_anim(duk_context *duk) {
return 0;
}
duk_ret_t duk_make_timer(duk_context *duk) {
JSValue duk_make_timer(JSContext *js, JSValueConst this, int argc, JSValueConst *argv)
{
void *sym = duk_get_heapptr(duk, 0);
double secs = duk_to_number(duk, 1);
double secs = js_to_number(argv[1]);
void *obj = duk_get_heapptr(duk, 2);
struct callee *c = malloc(sizeof(*c));
c->fn = sym;
@ -1429,7 +1398,7 @@ duk_ret_t duk_make_timer(duk_context *duk) {
return 1;
}
#define DUK_FUNC(NAME, ARGS) duk_push_c_function(duk, duk_##NAME, ARGS); duk_put_global_string(duk, #NAME);
#define DUK_FUNC(NAME, ARGS) JS_CFUNC_DEF(NAME, ARGS, duk_##NAME);
void ffi_load()
{

View file

@ -1,20 +1,19 @@
#ifndef FFI_H
#define FFI_H
#include "duktape.h"
#include "quickjs/quickjs.h"
#include <chipmunk/chipmunk.h>
void ffi_load();
void duk_dump_stack(JSContext *js);
void duk_dump_stack(duk_context *duk);
JSValue vec2js(cpVect v);
cpVect js2vec2(JSValue v);
duk_idx_t vect2duk(cpVect v);
cpVect duk2vec2(duk_context *duk, int p);
JSValue bitmask2js(cpBitmask mask);
cpBitmask js2bitmask(JSValue v);
void bitmask2duk(duk_context *duk, cpBitmask mask);
cpBitmask duk2bitmask(duk_context *duk, int p);
struct color duk2color(duk_context *duk, int p);
struct color duk2color(JSValue v);
#endif

View file

@ -158,8 +158,8 @@ int MakeGameobject()
.shape_cbs = NULL,
};
go.cbs.begin.obj = NULL;
go.cbs.separate.obj = NULL;
go.cbs.begin.obj = JS_NULL;
go.cbs.separate.obj = JS_NULL;
go.body = cpSpaceAddBody(space, cpBodyNew(go.mass, 1.f));

View file

@ -67,7 +67,7 @@ static void pawn_call_keydown(int key)
{
for (int i = 0; i < arrlen(pawns); i++) {
if (!pawns[i] || script_eval_setup("input_num_pressed", pawns[i])) continue;
duk_push_int(duk, key);
//TODO duk_push_int(duk, key);
script_eval_exec(1);
}
}
@ -123,7 +123,7 @@ void char_cb(GLFWwindow *w, unsigned int codepoint)
char out[2];
out[0] = (char)codepoint;
out[1] = 0;
duk_push_string(duk, out);
//TODO duk_push_string(duk, out);
script_eval_exec(1);
}
}

View file

@ -14,7 +14,7 @@
#include "sys/stat.h"
#include "sys/types.h"
duk_context *duk = NULL;
JSContext *js = NULL;
static int load_prefab(const char *fpath, const struct stat *sb, int typeflag) {
if (typeflag != FTW_F)
@ -27,7 +27,7 @@ static int load_prefab(const char *fpath, const struct stat *sb, int typeflag) {
}
void script_init() {
duk = duk_create_heap_default();
js = duk_create_heap_default();
ffi_load();
/* Load all prefabs into memory */
@ -37,7 +37,7 @@ void script_init() {
}
void script_run(const char *script) {
duk_eval_string(duk, script);
duk_eval_string(js, script);
}
time_t file_mod_secs(const char *file) {
@ -47,12 +47,12 @@ time_t file_mod_secs(const char *file) {
}
void duk_run_err() {
duk_get_prop_string(duk, -1, "lineNumber");
duk_get_prop_string(duk, -2, "fileName");
duk_get_prop_string(duk, -3, "stack");
mYughLog(1, 2, duk_get_int(duk, -3), duk_safe_to_string(duk, -2), "%s\n%s", duk_safe_to_string(duk, -4), duk_safe_to_string(duk, -1));
duk_get_prop_string(js, -1, "lineNumber");
duk_get_prop_string(js, -2, "fileName");
duk_get_prop_string(js, -3, "stack");
mYughLog(1, 2, duk_get_int(js, -3), duk_safe_to_string(js, -2), "%s\n%s", duk_safe_to_string(js, -4), duk_safe_to_string(js, -1));
duk_pop_3(duk);
duk_pop_3(js);
}
int script_dofile(const char *file) {
@ -61,19 +61,19 @@ int script_dofile(const char *file) {
YughError("Can't find file %s.", file);
return 1;
}
duk_push_string(duk, script);
duk_push_string(js, script);
free(script);
duk_push_string(duk, file);
duk_push_string(js, file);
if (duk_pcompile(duk, 0) != 0) {
if (duk_pcompile(js, 0) != 0) {
duk_run_err();
return 1;
}
if (duk_pcall(duk, 0))
if (duk_pcall(js, 0))
duk_run_err();
duk_pop(duk);
duk_pop(js);
return file_mod_secs(file);
}
@ -102,48 +102,48 @@ void script_call(const char *f) {
s is the function to call on that object
*/
void script_eval_w_env(const char *s, void *env) {
duk_push_heapptr(duk, env);
duk_push_string(duk, s);
duk_push_heapptr(js, env);
duk_push_string(js, s);
if (!duk_has_prop(duk, -2)) {
duk_pop(duk);
if (!duk_has_prop(js, -2)) {
duk_pop(js);
return;
}
duk_push_string(duk, s);
if (duk_pcall_prop(duk, -2, 0))
duk_push_string(js, s);
if (duk_pcall_prop(js, -2, 0))
duk_run_err();
duk_pop_2(duk);
duk_pop_2(js);
}
int script_eval_setup(const char *s, void *env)
{
duk_push_heapptr(duk, env);
duk_push_heapptr(js, env);
if (!duk_has_prop_string(duk, -1, s)) {
duk_pop(duk);
if (!duk_has_prop_string(js, -1, s)) {
duk_pop(js);
return 1;
}
duk_push_string(duk, s);
duk_push_string(js, s);
return 0;
}
void script_eval_exec(int argc)
{
if (duk_pcall_prop(duk, -2 - argc, argc))
if (duk_pcall_prop(js, -2 - argc, argc))
duk_run_err();
duk_pop_2(duk);
duk_pop_2(js);
}
void script_call_sym(void *sym)
{
duk_push_heapptr(duk, sym);
if (duk_pcall(duk, 0))
duk_push_heapptr(js, sym);
if (duk_pcall(js, 0))
duk_run_err();
duk_pop(duk);
duk_pop(js);
}
void script_call_sym_args(void *sym, void *args)
@ -157,9 +157,9 @@ struct callee *guis = NULL;
struct callee *debugs = NULL;
struct callee *nk_guis = NULL;
void unregister_obj(void *obj)
void unregister_obj(JSValue obj)
{
for (int i = arrlen(updates)-1; i >= 0; i--)
/* for (int i = arrlen(updates)-1; i >= 0; i--)
if (updates[i].obj == obj) arrdel(updates, i);
for (int i = arrlen(physics)-1; i >= 0; i--)
@ -173,6 +173,7 @@ void unregister_obj(void *obj)
for (int i = arrlen(debugs)-1; i >= 0; i--)
if (debugs[i].obj == obj) arrdel(debugs,i);
*/
}
void register_debug(struct callee c) {
@ -182,10 +183,12 @@ void register_debug(struct callee c) {
void unregister_gui(struct callee c)
{
for (int i = arrlen(guis)-1; i >= 0; i--) {
/*
if (guis[i].obj == c.obj && guis[i].fn == c.fn) {
arrdel(guis, i);
return;
}
*/
}
}
@ -205,16 +208,16 @@ void register_physics(struct callee c) {
void setup_callee(struct callee c)
{
duk_push_heapptr(duk, c.fn);
duk_push_heapptr(duk, c.obj);
duk_push_heapptr(js, c.fn);
duk_push_heapptr(js, c.obj);
}
void exec_callee(int argc)
{
if (duk_pcall_method(duk, argc))
if (duk_pcall_method(js, argc))
duk_run_err();
duk_pop(duk);
duk_pop(js);
}
void call_callee(struct callee *c) {
@ -226,14 +229,14 @@ void call_callee(struct callee *c) {
void callee_dbl(struct callee c, double d)
{
setup_callee(c);
duk_push_number(duk, d);
duk_push_number(js, d);
exec_callee(1);
}
void callee_int(struct callee c, int i)
{
setup_callee(c);
duk_push_int(duk, i);
duk_push_int(js, i);
exec_callee(1);
}

View file

@ -1,15 +1,15 @@
#ifndef SCRIPT_H
#define SCRIPT_H
#include "duktape.h"
#include "quickjs/quickjs.h"
#include <chipmunk/chipmunk.h>
#include <time.h>
extern duk_context *duk;
JSContext *js;
struct callee {
void *fn;
void *obj;
JSValue fn;
JSValue obj;
};
void script_init();
@ -43,7 +43,7 @@ void register_debug(struct callee c);
void register_nk_gui(struct callee c);
void call_gui();
void call_nk_gui();
void unregister_obj(void *obj);
void unregister_obj(JSValue obj);
void register_physics(struct callee c);
void call_physics(double dt);

View file

@ -21,8 +21,6 @@
#include <stdio.h>
#include <stdlib.h>
#include "duktape.h"
#include "2dphysics.h"
#include <signal.h>