javascript
This commit is contained in:
@@ -2,12 +2,27 @@
|
||||
|
||||
#include "script.h"
|
||||
|
||||
#include "string.h"
|
||||
#include "window.h"
|
||||
#include "editor.h"
|
||||
#include "engine.h"
|
||||
#include "log.h"
|
||||
#include "input.h"
|
||||
#include "gameobject.h"
|
||||
#include "openglrender.h"
|
||||
#include "2dphysics.h"
|
||||
#include "sprite.h"
|
||||
#include "anim.h"
|
||||
#include "yugine.h"
|
||||
#include "nuke.h"
|
||||
|
||||
cpVect duk2vec2(duk_context *duk, int p) {
|
||||
cpVect pos;
|
||||
duk_get_prop_index(duk, p, 0);
|
||||
pos.x = duk_to_number(duk, -1);
|
||||
duk_get_prop_index(duk, p, 1);
|
||||
|
||||
pos.x = duk_to_number(duk, -2);
|
||||
|
||||
pos.y = duk_to_number(duk, -1);
|
||||
|
||||
return pos;
|
||||
@@ -20,6 +35,7 @@ duk_ret_t duk_gui_text(duk_context *duk) {
|
||||
float fpos[2] = {pos.x, pos.y};
|
||||
|
||||
float size = duk_to_number(duk, 2);
|
||||
const float white[3] = {1.f, 1.f, 1.f};
|
||||
renderText(s, fpos, size, white, 1800);
|
||||
|
||||
return 0;
|
||||
@@ -35,6 +51,26 @@ duk_ret_t duk_win_make(duk_context *duk) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
duk_ret_t duk_cmd(duk_context *duk) {
|
||||
int cmd = duk_to_int(duk, 0);
|
||||
|
||||
switch(cmd) {
|
||||
case 0:
|
||||
script_dofile(duk_to_string(duk, 1));
|
||||
break;
|
||||
|
||||
case 1:
|
||||
set_pawn(duk_get_heapptr(duk, 1));
|
||||
break;
|
||||
|
||||
case 2:
|
||||
register_gui(duk_get_heapptr(duk, 1));
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
duk_ret_t duk_sys_cmd(duk_context *duk) {
|
||||
int cmd = duk_to_int(duk, 0);
|
||||
|
||||
@@ -84,7 +120,18 @@ duk_ret_t duk_sys_cmd(duk_context *duk) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
duk_ret_t 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);
|
||||
|
||||
|
||||
/* Test a call ... */
|
||||
duk_push_pointer(duk, fn);
|
||||
duk_push_pointer(duk, obj);
|
||||
duk_call_method(duk, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
duk_ret_t duk_make_gameobject(duk_context *duk) {
|
||||
int g = MakeGameobject();
|
||||
@@ -95,16 +142,108 @@ duk_ret_t duk_make_gameobject(duk_context *duk) {
|
||||
go->mass = duk_to_number(duk, 2);
|
||||
go->f = duk_to_number(duk, 3);
|
||||
go->e = duk_to_number(duk, 4);
|
||||
go->flipx = duk_to_boolean(5);
|
||||
go->flipy = duk_to_boolean(6);
|
||||
go->flipx = duk_to_boolean(duk, 5);
|
||||
go->flipy = duk_to_boolean(duk, 6);
|
||||
|
||||
gameobject_apply(go);
|
||||
|
||||
duk_push_int(g);
|
||||
duk_push_int(duk, g);
|
||||
return 1;
|
||||
}
|
||||
|
||||
duk_ret_t duk_loginfo(duk_context *duk) {
|
||||
const char *s = duk_to_string(duk,0);
|
||||
|
||||
YughInfo("%s", s);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
duk_ret_t duk_make_sprite(duk_context *duk) {
|
||||
int go = duk_to_int(duk, 0);
|
||||
const char *path = duk_to_string(duk, 1);
|
||||
cpVect pos = duk2vec2(duk, 2);
|
||||
|
||||
struct sprite *sp = make_sprite(get_gameobject_from_id(go));
|
||||
sprite_loadtex(sp, path);
|
||||
sp->pos[0] = pos.x;
|
||||
sp->pos[1] = pos.y;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
duk_ret_t duk_set_body(duk_context *duk) {
|
||||
int cmd = duk_to_int(duk, 0);
|
||||
int id = duk_to_int(duk, 1);
|
||||
struct gameobject *go = get_gameobject_from_id(id);
|
||||
|
||||
switch (cmd) {
|
||||
case 0:
|
||||
gameobject_setangle(go, duk_to_number(duk, 2));
|
||||
break;
|
||||
|
||||
case 1:
|
||||
cpBodySetType(go->body, duk_to_int(duk, 2));
|
||||
break;
|
||||
|
||||
case 2:
|
||||
cpBodySetPosition(go->body, duk2vec2(duk, 2));
|
||||
break;
|
||||
|
||||
case 3:
|
||||
gameobject_move(go, duk2vec2(duk, 2));
|
||||
break;
|
||||
|
||||
case 4:
|
||||
cpBodyApplyImpulseAtWorldPoint(go->body, duk2vec2(duk, 2), cpBodyGetPosition(go->body));
|
||||
break;
|
||||
|
||||
case 5:
|
||||
go->flipx = duk_to_boolean(duk, 2);
|
||||
break;
|
||||
|
||||
case 6:
|
||||
go->flipy = duk_to_boolean(duk, 2);
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
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));
|
||||
|
||||
switch(q) {
|
||||
case 0:
|
||||
duk_push_int(duk, cpBodyGetType(go->body));
|
||||
return 1;
|
||||
|
||||
case 1:
|
||||
vect2duk(cpBodyGetPosition(go->body));
|
||||
return 1;
|
||||
|
||||
case 2:
|
||||
duk_push_number(duk, cpBodyGetAngle(go->body));
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define DUK_FUNC(NAME, ARGS) duk_push_c_function(duk, duk_##NAME, ARGS); duk_put_global_string(duk, #NAME);
|
||||
|
||||
void ffi_load()
|
||||
{
|
||||
|
||||
DUK_FUNC(loginfo, 1);
|
||||
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);
|
||||
DUK_FUNC(gui_text, 3);
|
||||
DUK_FUNC(make_sprite, 3);
|
||||
DUK_FUNC(cmd, 2);
|
||||
}
|
||||
Reference in New Issue
Block a user