Javascript collisions

This commit is contained in:
2023-01-11 22:57:34 +00:00
parent 469b955d97
commit f0ce69f957
7 changed files with 141 additions and 79 deletions

View File

@@ -22,8 +22,6 @@ cpVect duk2vec2(duk_context *duk, int p) {
duk_get_prop_index(duk, p, 0);
pos.x = duk_to_number(duk, -1);
duk_get_prop_index(duk, p, 1);
pos.y = duk_to_number(duk, -1);
return pos;
@@ -70,7 +68,7 @@ duk_ret_t duk_cmd(duk_context *duk) {
break;
case 2:
register_gui(duk_get_heapptr(duk, 1));
break;
case 3:
@@ -97,11 +95,61 @@ duk_ret_t duk_cmd(duk_context *duk) {
phys2d_set_gravity(duk2vec2(duk, 1));
break;
case 9:
break;
case 10:
break;
case 11:
break;
}
return 0;
}
duk_ret_t duk_register(duk_context *duk) {
int cmd = duk_to_int(duk, 0);
void *fn = duk_get_heapptr(duk, 1);
void *obj = duk_get_heapptr(duk, 2);
struct callee c = {fn, obj};
switch(cmd) {
case 0:
register_update(c);
break;
case 1:
register_physics(c);
break;
case 2:
register_gui(c);
break;
}
return 0;
}
duk_ret_t duk_register_collide(duk_context *duk) {
int cmd = duk_to_int(duk, 0);
void *fn = duk_get_heapptr(duk, 1);
void *obj = duk_get_heapptr(duk, 2);
int go = duk_get_int(duk, 3);
struct callee c = {fn, obj};
YughInfo("Registering ...");
phys2d_add_handler_type(0, get_gameobject_from_id(go), c);
return 0;
}
duk_ret_t duk_sys_cmd(duk_context *duk) {
int cmd = duk_to_int(duk, 0);
@@ -151,24 +199,6 @@ duk_ret_t duk_sys_cmd(duk_context *duk) {
return 0;
}
duk_ret_t duk_register(duk_context *duk) {
int cmd = duk_to_int(duk, 0);
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;
}
return 0;
}
duk_ret_t duk_make_gameobject(duk_context *duk) {
int g = MakeGameobject();
struct gameobject *go = get_gameobject_from_id(g);
@@ -251,6 +281,8 @@ duk_ret_t duk_q_body(duk_context *duk) {
int q = duk_to_int(duk, 0);
struct gameobject *go = get_gameobject_from_id(duk_to_int(duk, 1));
if (!go) return 0;
switch(q) {
case 0:
duk_push_int(duk, cpBodyGetType(go->body));
@@ -263,6 +295,18 @@ duk_ret_t duk_q_body(duk_context *duk) {
case 2:
duk_push_number(duk, cpBodyGetAngle(go->body));
return 1;
case 3:
vect2duk(cpBodyGetVelocity(go->body));
return 1;
case 4:
duk_push_number(duk, cpBodyGetAngularVelocity(go->body));
return 1;
case 5:
duk_push_number(duk, cpBodyGetMass(go->body));
return 1;
}
return 0;
@@ -284,8 +328,8 @@ duk_ret_t duk_make_box2d(duk_context *duk) {
}
duk_ret_t duk_make_circle2d(duk_context *duk) {
int go = duk_to_int(duk, 0);
double radius = duk2vec2(duk, 1);
int go = duk_to_int(duk, 0);
double radius = duk_to_number(duk, 1);
cpVect offset = duk2vec2(duk, 2);
struct phys2d_circle *circle = Make2DCircle(get_gameobject_from_id(go));
@@ -345,7 +389,6 @@ void ffi_load()
DUK_FUNC(make_gameobject, 7);
DUK_FUNC(set_body, 3);
DUK_FUNC(q_body, 2);
DUK_FUNC(register, 3);
DUK_FUNC(sys_cmd, 1);
DUK_FUNC(win_make, 3);
@@ -353,6 +396,8 @@ void ffi_load()
DUK_FUNC(make_box2d, 3);
DUK_FUNC(make_circle2d, 3);
DUK_FUNC(cmd, 2);
DUK_FUNC(register, 3);
DUK_FUNC(register_collide, 4);
DUK_FUNC(gui_text, 3);
DUK_FUNC(gui_img, 2);