Add Nuke radio buttons; fixed edge memory leak
This commit is contained in:
parent
d1c87b38ac
commit
8e0c4948a6
|
@ -409,6 +409,7 @@ struct phys2d_edge *Make2DEdge(int go)
|
||||||
new->shape.go = go;
|
new->shape.go = go;
|
||||||
new->shape.data = new;
|
new->shape.data = new;
|
||||||
new->shape.debugdraw = phys2d_dbgdrawedge;
|
new->shape.debugdraw = phys2d_dbgdrawedge;
|
||||||
|
new->shape.shape = NULL;
|
||||||
phys2d_applyedge(new);
|
phys2d_applyedge(new);
|
||||||
|
|
||||||
return new;
|
return new;
|
||||||
|
@ -439,6 +440,7 @@ void phys2d_edge_rmvert(struct phys2d_edge *edge, int index)
|
||||||
|
|
||||||
if (index == 0) {
|
if (index == 0) {
|
||||||
cpSpaceRemoveShape(space, edge->shapes[index]);
|
cpSpaceRemoveShape(space, edge->shapes[index]);
|
||||||
|
cpShapeFree(edge->shapes[index]);
|
||||||
arrdel(edge->shapes, index);
|
arrdel(edge->shapes, index);
|
||||||
phys2d_applyedge(edge);
|
phys2d_applyedge(edge);
|
||||||
return;
|
return;
|
||||||
|
@ -449,6 +451,7 @@ void phys2d_edge_rmvert(struct phys2d_edge *edge, int index)
|
||||||
}
|
}
|
||||||
|
|
||||||
cpSpaceRemoveShape(space, edge->shapes[index-1]);
|
cpSpaceRemoveShape(space, edge->shapes[index-1]);
|
||||||
|
cpShapeFree(edge->shapes[index-1]);
|
||||||
arrdel(edge->shapes, index-1);
|
arrdel(edge->shapes, index-1);
|
||||||
|
|
||||||
phys2d_applyedge(edge);
|
phys2d_applyedge(edge);
|
||||||
|
@ -597,7 +600,6 @@ static cpBool script_phys_cb_begin(cpArbiter *arb, cpSpace *space, void *data) {
|
||||||
struct gameobject *go = id2go(g1);
|
struct gameobject *go = id2go(g1);
|
||||||
|
|
||||||
for (int i = 0; i < arrlen(go->shape_cbs); i++) {
|
for (int i = 0; i < arrlen(go->shape_cbs); i++) {
|
||||||
if (go->shape_cbs[i].shape != shape1) continue;
|
|
||||||
duk_call_phys_cb(arb, go->shape_cbs[i].cbs.begin, g2);
|
duk_call_phys_cb(arb, go->shape_cbs[i].cbs.begin, g2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -68,13 +68,11 @@ struct phys2d_circle *Make2DCircle(int go);
|
||||||
void phys2d_circledel(struct phys2d_circle *c);
|
void phys2d_circledel(struct phys2d_circle *c);
|
||||||
void phys2d_applycircle(struct phys2d_circle *circle);
|
void phys2d_applycircle(struct phys2d_circle *circle);
|
||||||
void phys2d_dbgdrawcircle(struct phys2d_circle *circle);
|
void phys2d_dbgdrawcircle(struct phys2d_circle *circle);
|
||||||
void circle_gui(struct phys2d_circle *circle);
|
|
||||||
|
|
||||||
struct phys2d_box *Make2DBox(int go);
|
struct phys2d_box *Make2DBox(int go);
|
||||||
void phys2d_boxdel(struct phys2d_box *box);
|
void phys2d_boxdel(struct phys2d_box *box);
|
||||||
void phys2d_applybox(struct phys2d_box *box);
|
void phys2d_applybox(struct phys2d_box *box);
|
||||||
void phys2d_dbgdrawbox(struct phys2d_box *box);
|
void phys2d_dbgdrawbox(struct phys2d_box *box);
|
||||||
void box_gui(struct phys2d_box *box);
|
|
||||||
|
|
||||||
struct phys2d_poly *Make2DPoly(int go);
|
struct phys2d_poly *Make2DPoly(int go);
|
||||||
void phys2d_polydel(struct phys2d_poly *poly);
|
void phys2d_polydel(struct phys2d_poly *poly);
|
||||||
|
@ -90,10 +88,11 @@ void phys2d_dbgdrawedge(struct phys2d_edge *edge);
|
||||||
void phys2d_edgeaddvert(struct phys2d_edge *edge);
|
void phys2d_edgeaddvert(struct phys2d_edge *edge);
|
||||||
void phys2d_edge_rmvert(struct phys2d_edge *edge, int index);
|
void phys2d_edge_rmvert(struct phys2d_edge *edge, int index);
|
||||||
|
|
||||||
void edge_gui(struct phys2d_edge *edge);
|
|
||||||
void phys2d_edge_setvert(struct phys2d_edge *edge, int index, cpVect val);
|
void phys2d_edge_setvert(struct phys2d_edge *edge, int index, cpVect val);
|
||||||
void phys2d_edge_clearverts(struct phys2d_edge *edge);
|
void phys2d_edge_clearverts(struct phys2d_edge *edge);
|
||||||
void phys2d_edge_addverts(struct phys2d_edge *edge, cpVect *verts);
|
void phys2d_edge_addverts(struct phys2d_edge *edge, cpVect *verts);
|
||||||
|
void phys2d_edge_set_sensor(struct phys2d_edge *edge, int sensor);
|
||||||
|
void phys2d_edge_set_enabled(struct phys2d_edge *edge, int enabled);
|
||||||
|
|
||||||
void phys2d_init();
|
void phys2d_init();
|
||||||
void phys2d_update(float deltaT);
|
void phys2d_update(float deltaT);
|
||||||
|
|
|
@ -238,6 +238,12 @@ duk_ret_t duk_nuke(duk_context *duk)
|
||||||
case 8:
|
case 8:
|
||||||
nuke_img(duk_to_string(duk, 1));
|
nuke_img(duk_to_string(duk, 1));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 9:
|
||||||
|
editint = duk_to_int(duk,2);
|
||||||
|
nuke_radio_btn(duk_to_string(duk,1), &editint, duk_to_int(duk, 3));
|
||||||
|
duk_push_int(duk, editint);
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -991,9 +997,9 @@ duk_ret_t duk_make_box2d(duk_context *duk) {
|
||||||
phys2d_applybox(box);
|
phys2d_applybox(box);
|
||||||
|
|
||||||
int idx = duk_push_object(duk);
|
int idx = duk_push_object(duk);
|
||||||
duk_push_pointer(duk, &box->shape);
|
|
||||||
duk_put_prop_string(duk, idx, "id");
|
|
||||||
duk_push_pointer(duk, box);
|
duk_push_pointer(duk, box);
|
||||||
|
duk_put_prop_string(duk, idx, "id");
|
||||||
|
duk_push_pointer(duk, &box->shape);
|
||||||
duk_put_prop_string(duk, idx, "shape");
|
duk_put_prop_string(duk, idx, "shape");
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -1040,9 +1046,9 @@ duk_ret_t duk_make_circle2d(duk_context *duk) {
|
||||||
phys2d_applycircle(circle);
|
phys2d_applycircle(circle);
|
||||||
|
|
||||||
int idx = duk_push_object(duk);
|
int idx = duk_push_object(duk);
|
||||||
duk_push_pointer(duk, &circle->shape);
|
|
||||||
duk_put_prop_string(duk, idx, "id");
|
|
||||||
duk_push_pointer(duk, circle);
|
duk_push_pointer(duk, circle);
|
||||||
|
duk_put_prop_string(duk, idx, "id");
|
||||||
|
duk_push_pointer(duk, &circle->shape);
|
||||||
duk_put_prop_string(duk, idx, "shape");
|
duk_put_prop_string(duk, idx, "shape");
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -1118,9 +1124,9 @@ duk_ret_t duk_make_edge2d(duk_context *duk)
|
||||||
}
|
}
|
||||||
|
|
||||||
int idx = duk_push_object(duk);
|
int idx = duk_push_object(duk);
|
||||||
duk_push_pointer(duk, &edge->shape);
|
|
||||||
duk_put_prop_string(duk, idx, "id");
|
|
||||||
duk_push_pointer(duk, edge);
|
duk_push_pointer(duk, edge);
|
||||||
|
duk_put_prop_string(duk, idx, "id");
|
||||||
|
duk_push_pointer(duk, &edge->shape);
|
||||||
duk_put_prop_string(duk, idx, "shape");
|
duk_put_prop_string(duk, idx, "shape");
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
|
|
@ -97,8 +97,6 @@ void go_shape_apply(cpBody *body, cpShape *shape, struct gameobject *go)
|
||||||
cpShapeSetElasticity(shape, go->e);
|
cpShapeSetElasticity(shape, go->e);
|
||||||
cpShapeSetSensor(shape, go->sensor);
|
cpShapeSetSensor(shape, go->sensor);
|
||||||
cpShapeSetCollisionType(shape, go2id(go));
|
cpShapeSetCollisionType(shape, go2id(go));
|
||||||
if (go->sensor)
|
|
||||||
YughInfo("Enabled a sensor ...");
|
|
||||||
// cpShapeSetFilter(shape, go->filter);
|
// cpShapeSetFilter(shape, go->filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -276,7 +274,6 @@ void gameobject_rotate(struct gameobject *go, float as)
|
||||||
|
|
||||||
void gameobject_setangle(struct gameobject *go, float angle) {
|
void gameobject_setangle(struct gameobject *go, float angle) {
|
||||||
cpBodySetAngle(go->body, angle);
|
cpBodySetAngle(go->body, angle);
|
||||||
|
|
||||||
phys2d_reindex_body(go->body);
|
phys2d_reindex_body(go->body);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -18,6 +18,8 @@ int script_dofile(const char *file);
|
||||||
void script_update(double dt);
|
void script_update(double dt);
|
||||||
void script_draw();
|
void script_draw();
|
||||||
|
|
||||||
|
void duk_run_err();
|
||||||
|
|
||||||
void script_editor();
|
void script_editor();
|
||||||
void script_call(const char *f);
|
void script_call(const char *f);
|
||||||
void script_call_sym(void *sym);
|
void script_call_sym(void *sym);
|
||||||
|
|
|
@ -109,7 +109,7 @@ int main(int argc, char **args) {
|
||||||
|
|
||||||
case 'v':
|
case 'v':
|
||||||
printf("Yugine version %s, %s build.\n", VER, INFO);
|
printf("Yugine version %s, %s build.\n", VER, INFO);
|
||||||
printf("Copyright 2022 odplot productions LLC.\n");
|
printf("Copyright 2022-2023 odplot productions LLC.\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -117,6 +117,7 @@ int main(int argc, char **args) {
|
||||||
printf("-l Set log file\n");
|
printf("-l Set log file\n");
|
||||||
printf("-play Launch engine in play mode instead of editor mode\n");
|
printf("-play Launch engine in play mode instead of editor mode\n");
|
||||||
printf("-v Display engine info\n");
|
printf("-v Display engine info\n");
|
||||||
|
printf("-c Redirect logging to console\n");
|
||||||
exit(0);
|
exit(0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -147,14 +148,11 @@ int main(int argc, char **args) {
|
||||||
log_cat(sysinfo);
|
log_cat(sysinfo);
|
||||||
pclose(sysinfo);
|
pclose(sysinfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
signal(SIGSEGV, seghandle);
|
signal(SIGSEGV, seghandle);
|
||||||
|
signal(SIGABRT, seghandle);
|
||||||
|
signal(SIGFPE, seghandle);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
FILE *gameinfo = NULL;
|
FILE *gameinfo = NULL;
|
||||||
gameinfo = fopen("game.info", "w");
|
gameinfo = fopen("game.info", "w");
|
||||||
fprintf(gameinfo, "Yugine v. %s, sys %s.", VER, INFO);
|
fprintf(gameinfo, "Yugine v. %s, sys %s.", VER, INFO);
|
||||||
|
|
Loading…
Reference in a new issue