Compiles and working
This commit is contained in:
parent
86211aecb8
commit
879ab0fc05
|
@ -679,8 +679,8 @@ static cpBool handle_collision(cpArbiter *arb, int type)
|
||||||
cpBody *body1;
|
cpBody *body1;
|
||||||
cpBody *body2;
|
cpBody *body2;
|
||||||
cpArbiterGetBodies(arb, &body1, &body2);
|
cpArbiterGetBodies(arb, &body1, &body2);
|
||||||
int g1 = cpBodyGetUserData(body1);
|
int g1 = (int)cpBodyGetUserData(body1);
|
||||||
int g2 = cpBodyGetUserData(body2);
|
int g2 = (int)cpBodyGetUserData(body2);
|
||||||
struct gameobject *go = id2go(g1);
|
struct gameobject *go = id2go(g1);
|
||||||
struct gameobject *go2 = id2go(g2);
|
struct gameobject *go2 = id2go(g2);
|
||||||
|
|
||||||
|
@ -736,7 +736,7 @@ void phys2d_rm_go_handlers(int go)
|
||||||
void phys2d_setup_handlers(int go)
|
void phys2d_setup_handlers(int go)
|
||||||
{
|
{
|
||||||
cpCollisionHandler *handler = cpSpaceAddWildcardHandler(space, go);
|
cpCollisionHandler *handler = cpSpaceAddWildcardHandler(space, go);
|
||||||
handler->userData = go;
|
handler->userData = (void*)go;
|
||||||
handler->beginFunc = script_phys_cb_begin;
|
handler->beginFunc = script_phys_cb_begin;
|
||||||
handler->separateFunc = script_phys_cb_separate;
|
handler->separateFunc = script_phys_cb_separate;
|
||||||
}
|
}
|
||||||
|
|
|
@ -99,26 +99,26 @@ void setupmesh(struct mesh *mesh)
|
||||||
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(struct Vertex), NULL);
|
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(struct Vertex), NULL);
|
||||||
// vertex normals
|
// vertex normals
|
||||||
glEnableVertexAttribArray(1);
|
glEnableVertexAttribArray(1);
|
||||||
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, sizeof(struct Vertex), offsetof(struct Vertex, Normal[3]));
|
// glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, sizeof(struct Vertex), offsetof(struct Vertex, Normal[3]));
|
||||||
// vertex texture coords
|
// vertex texture coords
|
||||||
glEnableVertexAttribArray(2);
|
glEnableVertexAttribArray(2);
|
||||||
glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, sizeof(struct Vertex), offsetof(struct Vertex, TexCoords[2]));
|
// glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, sizeof(struct Vertex), offsetof(struct Vertex, TexCoords[2]));
|
||||||
// vertex tangent
|
// vertex tangent
|
||||||
glEnableVertexAttribArray(3);
|
glEnableVertexAttribArray(3);
|
||||||
glVertexAttribPointer(3, 3, GL_FLOAT, GL_FALSE, sizeof(struct Vertex), offsetof(struct Vertex, Tangent[3]));
|
// glVertexAttribPointer(3, 3, GL_FLOAT, GL_FALSE, sizeof(struct Vertex), offsetof(struct Vertex, Tangent[3]));
|
||||||
// vertex bitangent
|
// vertex bitangent
|
||||||
glEnableVertexAttribArray(4);
|
glEnableVertexAttribArray(4);
|
||||||
glVertexAttribPointer(4, 3, GL_FLOAT, GL_FALSE, sizeof(struct Vertex), offsetof(struct Vertex, Bitangent[3]));
|
// glVertexAttribPointer(4, 3, GL_FLOAT, GL_FALSE, sizeof(struct Vertex), offsetof(struct Vertex, Bitangent[3]));
|
||||||
|
|
||||||
// Bone ids
|
// Bone ids
|
||||||
glEnableVertexAttribArray(5);
|
glEnableVertexAttribArray(5);
|
||||||
glVertexAttribPointer(5, 4, GL_INT, GL_FALSE, sizeof(struct Vertex), offsetof(struct Vertex,
|
/* glVertexAttribPointer(5, 4, GL_INT, GL_FALSE, sizeof(struct Vertex), offsetof(struct Vertex,
|
||||||
m_BoneIDs
|
m_BoneIDs
|
||||||
[MAX_BONE_INFLUENCE]));
|
[MAX_BONE_INFLUENCE]));
|
||||||
|
*/
|
||||||
// Weights
|
// Weights
|
||||||
glEnableVertexAttribArray(6);
|
glEnableVertexAttribArray(6);
|
||||||
glVertexAttribPointer(6, 4, GL_FLOAT, GL_FALSE, sizeof(struct Vertex), offsetof(struct Vertex, m_Weights));
|
// glVertexAttribPointer(6, 4, GL_FLOAT, GL_FALSE, sizeof(struct Vertex), offsetof(struct Vertex, m_Weights));
|
||||||
|
|
||||||
glBindVertexArray(0);
|
glBindVertexArray(0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,7 +42,7 @@
|
||||||
|
|
||||||
int js2int(JSValue v)
|
int js2int(JSValue v)
|
||||||
{
|
{
|
||||||
int i;
|
int32_t i;
|
||||||
JS_ToInt32(js,&i,v);
|
JS_ToInt32(js,&i,v);
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
@ -63,6 +63,7 @@ JSValue float2js(double g)
|
||||||
{
|
{
|
||||||
return JS_NewFloat64(js,g);
|
return JS_NewFloat64(js,g);
|
||||||
}
|
}
|
||||||
|
|
||||||
JSValue num2js(double g)
|
JSValue num2js(double g)
|
||||||
{
|
{
|
||||||
return float2js(g);
|
return float2js(g);
|
||||||
|
@ -82,7 +83,7 @@ void *js2ptr(JSValue v)
|
||||||
|
|
||||||
JSValue ptr2js(void *ptr)
|
JSValue ptr2js(void *ptr)
|
||||||
{
|
{
|
||||||
return JS_NewInt64(js,ptr);
|
return JS_NewInt64(js,(long)ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct timer *js2timer(JSValue v)
|
struct timer *js2timer(JSValue v)
|
||||||
|
@ -90,20 +91,10 @@ struct timer *js2timer(JSValue v)
|
||||||
return id2timer(js2int(v));
|
return id2timer(js2int(v));
|
||||||
}
|
}
|
||||||
|
|
||||||
struct color js2color(JSValue v)
|
|
||||||
|
double js_get_prop_number(JSValue v, const char *p)
|
||||||
{
|
{
|
||||||
struct color color;
|
double num;
|
||||||
|
|
||||||
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 js_get_prop_number(JSValue v, const char *p)
|
|
||||||
{
|
|
||||||
float num;
|
|
||||||
JS_ToFloat64(js, &num, JS_GetPropertyStr(js, v, p));
|
JS_ToFloat64(js, &num, JS_GetPropertyStr(js, v, p));
|
||||||
return num;
|
return num;
|
||||||
}
|
}
|
||||||
|
@ -118,18 +109,31 @@ struct glrect js2glrect(JSValue v)
|
||||||
return rect;
|
return rect;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
JSValue js_arridx(JSValue v, int idx)
|
||||||
|
{
|
||||||
|
return JS_GetPropertyUint32(js,v,idx);
|
||||||
|
}
|
||||||
|
|
||||||
int js_arrlen(JSValue v)
|
int js_arrlen(JSValue v)
|
||||||
{
|
{
|
||||||
int len;
|
int len;
|
||||||
JS_ToInt32(js, &len, JS_GetProperty(js, v, JS_PROP_LENGTH));
|
JS_ToInt32(js, &len, JS_GetPropertyStr(js, v, "length"));
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
struct color js2color(JSValue v)
|
||||||
|
{
|
||||||
|
struct color color = {0,0,0};
|
||||||
|
color.r = js2int(js_arridx(v,0));
|
||||||
|
color.g = js2int(js_arridx(v,1));
|
||||||
|
color.b = js2int(js_arridx(v,2));
|
||||||
|
return color;
|
||||||
|
}
|
||||||
|
|
||||||
cpVect js2vec2(JSValue v)
|
cpVect js2vec2(JSValue v)
|
||||||
{
|
{
|
||||||
cpVect vect;
|
cpVect vect;
|
||||||
JS_ToInt64(js, &vect.x, JS_GetPropertyUint32(js, v, 0));
|
vect.x = js2number(js_arridx(v,0));
|
||||||
JS_ToInt64(js, &vect.y, JS_GetPropertyUint32(js,v,1));
|
vect.y = js2number(js_arridx(v,1));
|
||||||
return vect;
|
return vect;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -178,7 +182,7 @@ void vec2float(cpVect v, float *f)
|
||||||
|
|
||||||
JSValue vec2js(cpVect v)
|
JSValue vec2js(cpVect v)
|
||||||
{
|
{
|
||||||
JSValue array = JS_NewObject(js);
|
JSValue array = JS_NewArray(js);
|
||||||
JS_SetPropertyInt64(js, array, 0, JS_NewFloat64(js,v.x));
|
JS_SetPropertyInt64(js, array, 0, JS_NewFloat64(js,v.x));
|
||||||
JS_SetPropertyInt64(js, array, 1, JS_NewFloat64(js,v.y));
|
JS_SetPropertyInt64(js, array, 1, JS_NewFloat64(js,v.y));
|
||||||
return array;
|
return array;
|
||||||
|
@ -853,13 +857,10 @@ JSValue duk_cmd(JSContext *js, JSValueConst this, int argc, JSValueConst *argv)
|
||||||
JSValue duk_register(JSContext *js, JSValueConst this, int argc, JSValueConst *argv)
|
JSValue duk_register(JSContext *js, JSValueConst this, int argc, JSValueConst *argv)
|
||||||
{
|
{
|
||||||
int cmd = js2int(argv[0]);
|
int cmd = js2int(argv[0]);
|
||||||
YughWarn("Registration is all handled script side now.");
|
|
||||||
return JS_NULL;
|
|
||||||
/*
|
|
||||||
void *fn = duk_get_heapptr(duk, 1);
|
|
||||||
void *obj = duk_get_heapptr(duk, 2);
|
|
||||||
|
|
||||||
struct callee c = {fn, obj};
|
struct callee c;
|
||||||
|
c.fn = argv[1];
|
||||||
|
c.obj = argv[2];
|
||||||
|
|
||||||
switch(cmd) {
|
switch(cmd) {
|
||||||
case 0:
|
case 0:
|
||||||
|
@ -879,20 +880,23 @@ JSValue duk_register(JSContext *js, JSValueConst this, int argc, JSValueConst *a
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 4:
|
case 4:
|
||||||
unregister_obj(obj);
|
// unregister_obj(obj);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 5:
|
case 5:
|
||||||
unregister_gui(c);
|
// unregister_gui(c);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 6:
|
case 6:
|
||||||
register_debug(c);
|
register_debug(c);
|
||||||
break;
|
break;
|
||||||
|
case 7:
|
||||||
|
register_pawn(c);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return JS_NULL;
|
return JS_NULL;
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void gameobject_add_shape_collider(int go, struct callee c, struct phys2d_shape *shape)
|
void gameobject_add_shape_collider(int go, struct callee c, struct phys2d_shape *shape)
|
||||||
|
@ -905,14 +909,9 @@ void gameobject_add_shape_collider(int go, struct callee c, struct phys2d_shape
|
||||||
|
|
||||||
JSValue duk_register_collide(JSContext *js, JSValueConst this, int argc, JSValueConst *argv)
|
JSValue duk_register_collide(JSContext *js, JSValueConst this, int argc, JSValueConst *argv)
|
||||||
{
|
{
|
||||||
YughWarn("Registration is all handled script side now.");
|
|
||||||
return JS_NULL;
|
|
||||||
/*
|
|
||||||
int cmd = js2int(argv[0]);
|
int cmd = js2int(argv[0]);
|
||||||
void *fn = duk_get_heapptr(duk, 1);
|
|
||||||
void *obj = duk_get_heapptr(duk, 2);
|
|
||||||
int go = js2int(argv[3]);
|
int go = js2int(argv[3]);
|
||||||
struct callee c = {fn, obj};
|
struct callee c = {argv[1], argv[2]};
|
||||||
|
|
||||||
switch(cmd) {
|
switch(cmd) {
|
||||||
case 0:
|
case 0:
|
||||||
|
@ -920,7 +919,7 @@ JSValue duk_register_collide(JSContext *js, JSValueConst this, int argc, JSValue
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 1:
|
case 1:
|
||||||
gameobject_add_shape_collider(go, c, duk_get_pointer(duk,4));
|
gameobject_add_shape_collider(go, c, js2ptr(argv[4]));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2:
|
case 2:
|
||||||
|
@ -933,7 +932,6 @@ JSValue duk_register_collide(JSContext *js, JSValueConst this, int argc, JSValue
|
||||||
}
|
}
|
||||||
|
|
||||||
return JS_NULL;
|
return JS_NULL;
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
JSValue duk_sys_cmd(JSContext *js, JSValueConst this, int argc, JSValueConst *argv)
|
JSValue duk_sys_cmd(JSContext *js, JSValueConst this, int argc, JSValueConst *argv)
|
||||||
|
@ -1362,11 +1360,10 @@ JSValue duk_make_timer(JSContext *js, JSValueConst this, int argc, JSValueConst
|
||||||
return JS_NewInt64(js, id);
|
return JS_NewInt64(js, id);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define DUK_FUNC(NAME, ARGS) JS_CFUNC_DEF(#NAME, ARGS, duk_##NAME),
|
#define DUK_FUNC(NAME, ARGS) JS_SetPropertyStr(js, JS_GetGlobalObject(js), #NAME, JS_NewCFunction(js, duk_##NAME, #NAME, ARGS));
|
||||||
|
|
||||||
void ffi_load()
|
void ffi_load()
|
||||||
{
|
{
|
||||||
JSCFunctionListEntry yugh_funcs[] = {
|
|
||||||
DUK_FUNC(yughlog, 4)
|
DUK_FUNC(yughlog, 4)
|
||||||
DUK_FUNC(nuke, 6)
|
DUK_FUNC(nuke, 6)
|
||||||
DUK_FUNC(make_gameobject, 7)
|
DUK_FUNC(make_gameobject, 7)
|
||||||
|
@ -1402,5 +1399,4 @@ void ffi_load()
|
||||||
DUK_FUNC(inflate_cpv, 3)
|
DUK_FUNC(inflate_cpv, 3)
|
||||||
|
|
||||||
DUK_FUNC(anim, 2)
|
DUK_FUNC(anim, 2)
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,16 +6,14 @@
|
||||||
|
|
||||||
void ffi_load();
|
void ffi_load();
|
||||||
|
|
||||||
void duk_dump_stack(JSContext *js);
|
|
||||||
|
|
||||||
JSValue vec2js(cpVect v);
|
JSValue vec2js(cpVect v);
|
||||||
cpVect js2vec2(JSValue v);
|
cpVect js2vec2(JSValue v);
|
||||||
|
|
||||||
JSValue bitmask2js(cpBitmask mask);
|
JSValue bitmask2js(cpBitmask mask);
|
||||||
cpBitmask js2bitmask(JSValue v);
|
cpBitmask js2bitmask(JSValue v);
|
||||||
|
|
||||||
struct color duk2color(JSValue v);
|
struct color js2color(JSValue v);
|
||||||
|
double js2number(JSValue v);
|
||||||
JSValue num2js(double g);
|
JSValue num2js(double g);
|
||||||
JSValue int2js(int i);
|
JSValue int2js(int i);
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,7 @@ struct gameobject *id2go(int id)
|
||||||
|
|
||||||
int body2id(cpBody *body)
|
int body2id(cpBody *body)
|
||||||
{
|
{
|
||||||
return cpBodyGetUserData(body);
|
return (int)cpBodyGetUserData(body);
|
||||||
}
|
}
|
||||||
|
|
||||||
cpBody *id2body(int id)
|
cpBody *id2body(int id)
|
||||||
|
@ -174,7 +174,7 @@ int MakeGameobject()
|
||||||
*id2go(retid) = go;
|
*id2go(retid) = go;
|
||||||
}
|
}
|
||||||
|
|
||||||
cpBodySetUserData(go.body, (int)retid);
|
cpBodySetUserData(go.body, (void*)retid);
|
||||||
phys2d_setup_handlers(retid);
|
phys2d_setup_handlers(retid);
|
||||||
return retid;
|
return retid;
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,19 +17,11 @@ static int *downkeys = NULL;
|
||||||
|
|
||||||
static int mquit = 0;
|
static int mquit = 0;
|
||||||
|
|
||||||
static void **pawns = NULL;
|
static struct callee pawn_callee;
|
||||||
|
|
||||||
void set_pawn(void *pawn) {
|
void register_pawn(struct callee c)
|
||||||
arrput(pawns, pawn);
|
{
|
||||||
}
|
pawn_callee = c;
|
||||||
|
|
||||||
void remove_pawn(void *pawn) {
|
|
||||||
for (int i = 0; i < arrlen(pawns); i++) {
|
|
||||||
if (pawns[i] == pawn) {
|
|
||||||
arrdel(pawns, i);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void add_downkey(int key) {
|
void add_downkey(int key) {
|
||||||
|
@ -55,20 +47,22 @@ static void cursor_pos_cb(GLFWwindow *w, double xpos, double ypos)
|
||||||
mouse_pos.x = xpos;
|
mouse_pos.x = xpos;
|
||||||
mouse_pos.y = ypos;
|
mouse_pos.y = ypos;
|
||||||
|
|
||||||
for (int i = 0; i < arrlen(pawns); i++) {
|
JSValue argv[2];
|
||||||
if (!pawns[i]) continue;
|
argv[0] = JS_NewString(js, "input_mouse_pos");
|
||||||
JSValue v = vec2js(mouse_pos);
|
argv[1] = vec2js(mouse_pos);
|
||||||
}
|
script_callee(pawn_callee, 2, argv);
|
||||||
|
JS_FreeValue(js, argv[0]);
|
||||||
|
JS_FreeValue(js, argv[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void pawn_call_keydown(int key)
|
static void pawn_call_keydown(int key)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < arrlen(pawns); i++) {
|
JSValue argv[2];
|
||||||
// if (!pawns[i] || script_eval_setup("input_num_pressed", pawns[i])) continue;
|
argv[0] = JS_NewString(js, "input_num_pressed");
|
||||||
//TODO duk_push_int(duk, key);
|
argv[1] = JS_NewInt32(js, key);
|
||||||
// script_eval_exec(1);
|
script_callee(pawn_callee, 2, argv);
|
||||||
}
|
JS_FreeValue(js, argv[0]);
|
||||||
|
JS_FreeValue(js, argv[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void scroll_cb(GLFWwindow *w, double xoffset, double yoffset)
|
static void scroll_cb(GLFWwindow *w, double xoffset, double yoffset)
|
||||||
|
@ -117,14 +111,16 @@ void set_mouse_mode(int mousemode)
|
||||||
|
|
||||||
void char_cb(GLFWwindow *w, unsigned int codepoint)
|
void char_cb(GLFWwindow *w, unsigned int codepoint)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < arrlen(pawns); i++) {
|
static char out[2] = {0};
|
||||||
// if (!pawns[i] || script_eval_setup("input_text", pawns[i])) continue;
|
static JSValue argv[2];
|
||||||
char out[2];
|
|
||||||
out[0] = (char)codepoint;
|
out[0] = (char)codepoint;
|
||||||
out[1] = 0;
|
argv[0] = JS_NewString(js, "input_text");
|
||||||
//TODO duk_push_string(duk, out);
|
argv[1] = JS_NewString(js, out);
|
||||||
// script_eval_exec(1);
|
script_callee(pawn_callee, 2, argv);
|
||||||
}
|
|
||||||
|
JS_FreeValue(js, argv[0]);
|
||||||
|
JS_FreeValue(js, argv[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static GLFWcharfun nukechar;
|
static GLFWcharfun nukechar;
|
||||||
|
@ -148,19 +144,11 @@ void input_to_game()
|
||||||
}
|
}
|
||||||
|
|
||||||
void call_input_signal(char *signal) {
|
void call_input_signal(char *signal) {
|
||||||
for (int i = arrlen(pawns)-1; i >= 0; i--) {
|
JSValue s = JS_NewString(js, signal);
|
||||||
if (pawns[i] == NULL) arrdel(pawns, i);
|
JS_Call(js, pawn_callee.fn, pawn_callee.obj, 1, &s);
|
||||||
}
|
JS_FreeValue(js, s);
|
||||||
|
|
||||||
int len = arrlen(pawns);
|
|
||||||
void *framepawns[len];
|
|
||||||
memcpy(framepawns, pawns, len*sizeof(*pawns));
|
|
||||||
for (int i = 0; i < len; i++) {
|
|
||||||
// script_eval_w_env(signal, framepawns[i]);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const char *keyname_extd(int key, int scancode) {
|
const char *keyname_extd(int key, int scancode) {
|
||||||
char keybuf[50];
|
char keybuf[50];
|
||||||
const char *kkey = NULL;
|
const char *kkey = NULL;
|
||||||
|
|
|
@ -25,6 +25,8 @@ void call_input_signal(char *signal);
|
||||||
const char *keyname_extd(int key, int scancode);
|
const char *keyname_extd(int key, int scancode);
|
||||||
int action_down(int scancode);
|
int action_down(int scancode);
|
||||||
|
|
||||||
|
void register_pawn(struct callee c);
|
||||||
|
|
||||||
int want_quit();
|
int want_quit();
|
||||||
void quit();
|
void quit();
|
||||||
|
|
||||||
|
@ -35,9 +37,6 @@ struct inputaction
|
||||||
int scancode;
|
int scancode;
|
||||||
};
|
};
|
||||||
|
|
||||||
void set_pawn(void *pawn);
|
|
||||||
void remove_pawn(void *pawn);
|
|
||||||
|
|
||||||
void input_to_nuke();
|
void input_to_nuke();
|
||||||
void input_to_game();
|
void input_to_game();
|
||||||
|
|
||||||
|
|
|
@ -39,7 +39,7 @@ void script_init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void script_run(const char *script) {
|
void script_run(const char *script) {
|
||||||
JS_Eval(js, script, strlen(script), "script", 0);
|
JS_FreeValue(js, JS_Eval(js, script, strlen(script), "script", 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
time_t file_mod_secs(const char *file) {
|
time_t file_mod_secs(const char *file) {
|
||||||
|
@ -48,13 +48,34 @@ time_t file_mod_secs(const char *file) {
|
||||||
return attr.st_mtime;
|
return attr.st_mtime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int js_print_exception(JSValue v)
|
||||||
|
{
|
||||||
|
if (JS_IsException(v)) {
|
||||||
|
JSValue exception = JS_GetException(js);
|
||||||
|
JSValue val = JS_GetPropertyStr(js, exception, "stack");
|
||||||
|
if (!JS_IsUndefined(val)) {
|
||||||
|
const char *name = JS_ToCString(js, JS_GetPropertyStr(js, exception, "name"));
|
||||||
|
const char *msg = JS_ToCString(js, JS_GetPropertyStr(js, exception, "message"));
|
||||||
|
const char *stack = JS_ToCString(js, val);
|
||||||
|
YughError("%s :: %s\n%s", name, msg, stack);
|
||||||
|
|
||||||
|
JS_FreeCString(js, name);
|
||||||
|
JS_FreeCString(js, msg);
|
||||||
|
JS_FreeCString(js, stack);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int script_dofile(const char *file) {
|
int script_dofile(const char *file) {
|
||||||
|
YughInfo("Doing script %s", file);
|
||||||
const char *script = slurp_text(file);
|
const char *script = slurp_text(file);
|
||||||
if (!script) {
|
if (!script) {
|
||||||
YughError("Can't find file %s.", file);
|
YughError("Can't find file %s.", file);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
JS_Eval(js, script, strlen(script), file, 0);
|
JSValue obj = JS_Eval(js, script, strlen(script), file, 0);
|
||||||
|
js_print_exception(obj);
|
||||||
|
JS_FreeValue(js, obj);
|
||||||
|
|
||||||
return file_mod_secs(file);
|
return file_mod_secs(file);
|
||||||
}
|
}
|
||||||
|
@ -63,123 +84,76 @@ int script_dofile(const char *file) {
|
||||||
s is the function to call on that object
|
s is the function to call on that object
|
||||||
*/
|
*/
|
||||||
void script_eval_w_env(const char *s, JSValue env) {
|
void script_eval_w_env(const char *s, JSValue env) {
|
||||||
JS_EvalThis(js, env, s, strlen(s), "internal", 0);
|
JSValue v = JS_EvalThis(js, env, s, strlen(s), "internal", 0);
|
||||||
|
js_print_exception(v);
|
||||||
|
JS_FreeValue(js, v);
|
||||||
}
|
}
|
||||||
|
|
||||||
void script_call_sym(JSValue sym)
|
void script_call_sym(JSValue sym)
|
||||||
{
|
{
|
||||||
JS_Call(js, sym, JS_GetGlobalObject(js), 0, NULL);
|
JSValue v = JS_Call(js, sym, JS_GetGlobalObject(js), 0, NULL);
|
||||||
|
js_print_exception(v);
|
||||||
|
JS_FreeValue(js, v);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct callee *updates = NULL;
|
|
||||||
struct callee *physics = NULL;
|
|
||||||
struct callee *guis = NULL;
|
|
||||||
struct callee *debugs = NULL;
|
|
||||||
struct callee *nk_guis = NULL;
|
|
||||||
|
|
||||||
void unregister_obj(JSValue obj)
|
|
||||||
{
|
|
||||||
/* 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--)
|
|
||||||
if (physics[i].obj == obj) arrdel(physics,i);
|
|
||||||
|
|
||||||
for (int i = arrlen(guis)-1; i >= 0; i--)
|
|
||||||
if (guis[i].obj == obj) arrdel(guis,i);
|
|
||||||
|
|
||||||
for (int i = arrlen(nk_guis)-1; i >= 0; i--)
|
|
||||||
if (nk_guis[i].obj == obj) arrdel(nk_guis,i);
|
|
||||||
|
|
||||||
for (int i = arrlen(debugs)-1; i >= 0; i--)
|
|
||||||
if (debugs[i].obj == obj) arrdel(debugs,i);
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
|
|
||||||
void register_debug(struct callee c) {
|
|
||||||
arrput(debugs, 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;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void register_update(struct callee c) {
|
|
||||||
arrput(updates, c);
|
|
||||||
}
|
|
||||||
|
|
||||||
void register_gui(struct callee c) {
|
|
||||||
arrput(guis, c);
|
|
||||||
}
|
|
||||||
|
|
||||||
void register_nk_gui(struct callee c) { arrput(nk_guis, c); }
|
|
||||||
|
|
||||||
void register_physics(struct callee c) {
|
|
||||||
arrput(physics, c);
|
|
||||||
}
|
|
||||||
|
|
||||||
JSValue js_callee_exec(struct callee *c, int argc, JSValue *argv)
|
JSValue js_callee_exec(struct callee *c, int argc, JSValue *argv)
|
||||||
{
|
{
|
||||||
JS_Call(js, c->obj, c->fn, argc, argv);
|
JSValue ret = JS_Call(js, c->fn, c->obj, argc, argv);
|
||||||
|
js_print_exception(ret);
|
||||||
|
JS_FreeValue(js, ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
void call_callee(struct callee *c) {
|
void call_callee(struct callee *c) {
|
||||||
JS_Call(js, c->obj, c->fn, 0, NULL);
|
js_callee_exec(c, 0, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void callee_dbl(struct callee c, double d)
|
void callee_dbl(struct callee c, double d)
|
||||||
{
|
{
|
||||||
JSValue v = num2js(d);
|
JSValue v = num2js(d);
|
||||||
js_callee_exec(&c, 1, &v);
|
js_callee_exec(&c, 1, &v);
|
||||||
|
JS_FreeValue(js, v);
|
||||||
}
|
}
|
||||||
|
|
||||||
void callee_int(struct callee c, int i)
|
void callee_int(struct callee c, int i)
|
||||||
{
|
{
|
||||||
JSValue v = int2js(i);
|
JSValue v = int2js(i);
|
||||||
js_callee_exec(&c, 1, &v);
|
js_callee_exec(&c, 1, &v);
|
||||||
|
JS_FreeValue(js, v);
|
||||||
}
|
}
|
||||||
|
|
||||||
void callee_vec2(struct callee c, cpVect vec)
|
void callee_vec2(struct callee c, cpVect vec)
|
||||||
{
|
{
|
||||||
JSValue v = vec2js(vec);
|
JSValue v = vec2js(vec);
|
||||||
js_callee_exec(&c, 1, &v);
|
js_callee_exec(&c, 1, &v);
|
||||||
|
JS_FreeValue(js, v);
|
||||||
}
|
}
|
||||||
|
|
||||||
void call_updates(double dt) {
|
void script_callee(struct callee c, int argc, JSValue *argv)
|
||||||
for (int i = 0; i < arrlen(updates); i++)
|
|
||||||
callee_dbl(updates[i], dt);
|
|
||||||
}
|
|
||||||
|
|
||||||
void call_gui() {
|
|
||||||
for (int i = 0; i < arrlen(guis); i++)
|
|
||||||
call_callee(&guis[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
void call_debug() {
|
|
||||||
for (int i = 0; i < arrlen(debugs); i++)
|
|
||||||
call_callee(&debugs[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
void call_nk_gui() {
|
|
||||||
for (int i = 0; i < arrlen(nk_guis); i++)
|
|
||||||
call_callee(&nk_guis[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
void call_physics(double dt) {
|
|
||||||
for (int i = 0; i < arrlen(physics); i++)
|
|
||||||
callee_dbl(physics[i], dt);
|
|
||||||
}
|
|
||||||
|
|
||||||
void call_debugs()
|
|
||||||
{
|
{
|
||||||
for (int i = 0; i < arrlen(debugs); i++)
|
js_callee_exec(&c, argc, argv);
|
||||||
call_callee(&debugs[i]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static struct callee update_callee;
|
||||||
|
void register_update(struct callee c) {
|
||||||
|
update_callee = c;
|
||||||
|
}
|
||||||
|
void call_updates(double dt) {
|
||||||
|
callee_dbl(update_callee, dt);
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct callee gui_callee;
|
||||||
|
void register_gui(struct callee c) { gui_callee = c; }
|
||||||
|
void call_gui() { js_callee_exec(&gui_callee, 0, NULL); }
|
||||||
|
|
||||||
|
static struct callee nk_gui_callee;
|
||||||
|
void register_nk_gui(struct callee c) { nk_gui_callee = c; }
|
||||||
|
void call_nk_gui() { js_callee_exec(&nk_gui_callee, 0, NULL); }
|
||||||
|
|
||||||
|
static struct callee physupdate_callee;
|
||||||
|
void register_physics(struct callee c) { physupdate_callee = c;}
|
||||||
|
void call_physics(double dt) { callee_dbl(physupdate_callee, dt); }
|
||||||
|
|
||||||
|
struct callee debug_callee;
|
||||||
|
void register_debug(struct callee c) { debug_callee = c; }
|
||||||
|
void call_debugs() { JS_Call(js, debug_callee.fn, debug_callee.obj, 0, NULL); }
|
||||||
|
|
|
@ -24,6 +24,7 @@ void script_editor();
|
||||||
void script_call(const char *f);
|
void script_call(const char *f);
|
||||||
void script_call_sym(JSValue sym);
|
void script_call_sym(JSValue sym);
|
||||||
void call_callee(struct callee *c);
|
void call_callee(struct callee *c);
|
||||||
|
void script_callee(struct callee c, int argc, JSValue *argv);
|
||||||
int script_has_sym(void *sym);
|
int script_has_sym(void *sym);
|
||||||
void script_eval_w_env(const char *s, JSValue env);
|
void script_eval_w_env(const char *s, JSValue env);
|
||||||
|
|
||||||
|
|
|
@ -121,7 +121,7 @@ struct wav *make_sound(const char *wav)
|
||||||
if (index != -1) return wavhash[index].value;
|
if (index != -1) return wavhash[index].value;
|
||||||
|
|
||||||
struct wav mwav;
|
struct wav mwav;
|
||||||
mwav.data = drwav_open_file_and_read_pcm_frames_s16(wav, &mwav.ch, &mwav.samplerate, &mwav.frames, NULL);
|
// mwav.data = drwav_open_file_and_read_pcm_frames_s16(wav, &mwav.ch, &mwav.samplerate, &mwav.frames, NULL);
|
||||||
|
|
||||||
if (mwav.samplerate != SAMPLERATE) {
|
if (mwav.samplerate != SAMPLERATE) {
|
||||||
YughInfo("Changing samplerate of %s from %d to %d.", wav, mwav.samplerate, SAMPLERATE);
|
YughInfo("Changing samplerate of %s from %d to %d.", wav, mwav.samplerate, SAMPLERATE);
|
||||||
|
|
|
@ -258,7 +258,7 @@ void anim_play(struct anim2d *anim)
|
||||||
anim->playing = 1;
|
anim->playing = 1;
|
||||||
|
|
||||||
if (anim->timer == NULL)
|
if (anim->timer == NULL)
|
||||||
anim->timer = timer_make(1.f / anim->anim->ms, anim_incr, anim, 0);
|
anim->timer = id2timer(timer_make(1.f / anim->anim->ms, anim_incr, anim, 0));
|
||||||
else
|
else
|
||||||
timerr_settime(anim->timer, 1.f/anim->anim->ms);
|
timerr_settime(anim->timer, 1.f/anim->anim->ms);
|
||||||
|
|
||||||
|
|
|
@ -140,13 +140,13 @@ int main(int argc, char **args) {
|
||||||
YughInfo("Starting yugine version %s.", VER);
|
YughInfo("Starting yugine version %s.", VER);
|
||||||
|
|
||||||
FILE *sysinfo = NULL;
|
FILE *sysinfo = NULL;
|
||||||
sysinfo = popen("uname -a", "r");
|
/* sysinfo = popen("uname -a", "r");
|
||||||
if (!sysinfo) {
|
if (!sysinfo) {
|
||||||
YughWarn("Failed to get sys info.");
|
YughWarn("Failed to get sys info.");
|
||||||
} else {
|
} else {
|
||||||
log_cat(sysinfo);
|
log_cat(sysinfo);
|
||||||
pclose(sysinfo);
|
pclose(sysinfo);
|
||||||
}
|
}*/
|
||||||
signal(SIGSEGV, seghandle);
|
signal(SIGSEGV, seghandle);
|
||||||
signal(SIGABRT, seghandle);
|
signal(SIGABRT, seghandle);
|
||||||
signal(SIGFPE, seghandle);
|
signal(SIGFPE, seghandle);
|
||||||
|
|
Loading…
Reference in a new issue