duktape
This commit is contained in:
parent
248456fd9e
commit
8e8af65125
3779
source/engine/duk_config.h
Normal file
3779
source/engine/duk_config.h
Normal file
File diff suppressed because it is too large
Load diff
101351
source/engine/duktape.c
Normal file
101351
source/engine/duktape.c
Normal file
File diff suppressed because it is too large
Load diff
1456
source/engine/duktape.h
Normal file
1456
source/engine/duktape.h
Normal file
File diff suppressed because it is too large
Load diff
110
source/engine/ffi.c
Normal file
110
source/engine/ffi.c
Normal file
|
@ -0,0 +1,110 @@
|
|||
#include "ffi.h"
|
||||
|
||||
#include "script.h"
|
||||
|
||||
cpVect duk2vec2(duk_context *duk, int p) {
|
||||
cpVect pos;
|
||||
duk_get_prop_index(duk, p, 0);
|
||||
duk_get_prop_index(duk, p, 1);
|
||||
|
||||
pos.x = duk_to_number(duk, -2);
|
||||
pos.y = duk_to_number(duk, -1);
|
||||
|
||||
return pos;
|
||||
}
|
||||
|
||||
duk_ret_t duk_gui_text(duk_context *duk) {
|
||||
const char *s = duk_to_string(duk, 0);
|
||||
cpVect pos = duk2vec2(duk, 1);
|
||||
duk_get_prop_index(duk, 1, 0);
|
||||
float fpos[2] = {pos.x, pos.y};
|
||||
|
||||
float size = duk_to_number(duk, 2);
|
||||
renderText(s, fpos, size, white, 1800);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
duk_ret_t duk_win_make(duk_context *duk) {
|
||||
const char *title = duk_to_string(duk, 0);
|
||||
int w = duk_to_int(duk, 1);
|
||||
int h = duk_to_int(duk, 2);
|
||||
struct window *win = MakeSDLWindow(title, w, h, 0);
|
||||
|
||||
duk_push_int(duk, win->id);
|
||||
return 1;
|
||||
}
|
||||
|
||||
duk_ret_t duk_sys_cmd(duk_context *duk) {
|
||||
int cmd = duk_to_int(duk, 0);
|
||||
|
||||
switch (cmd) {
|
||||
case 0:
|
||||
quit();
|
||||
break;
|
||||
|
||||
case 1:
|
||||
sim_start();
|
||||
break;
|
||||
|
||||
case 2:
|
||||
sim_stop();
|
||||
break;
|
||||
|
||||
case 3:
|
||||
sim_pause();
|
||||
break;
|
||||
|
||||
case 4:
|
||||
sim_step();
|
||||
break;
|
||||
|
||||
case 5:
|
||||
duk_push_boolean(duk, sim_playing());
|
||||
return 1;
|
||||
|
||||
case 6:
|
||||
duk_push_boolean(duk, sim_paused());
|
||||
return 1;
|
||||
|
||||
case 7:
|
||||
duk_push_int(duk, MakeGameobject());
|
||||
return 1;
|
||||
|
||||
case 8:
|
||||
duk_push_int(duk, frame_fps());
|
||||
return 1;
|
||||
|
||||
case 9: /* Clear the level out */
|
||||
new_level();
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
duk_ret_t duk_
|
||||
|
||||
duk_ret_t duk_make_gameobject(duk_context *duk) {
|
||||
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->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);
|
||||
|
||||
gameobject_apply(go);
|
||||
|
||||
duk_push_int(g);
|
||||
return 1;
|
||||
}
|
||||
|
||||
void ffi_load()
|
||||
{
|
||||
|
||||
}
|
8
source/engine/ffi.h
Normal file
8
source/engine/ffi.h
Normal file
|
@ -0,0 +1,8 @@
|
|||
#ifndef FFI_H
|
||||
#define FFI_H
|
||||
|
||||
#include "duktape.h"
|
||||
|
||||
void ffi_load();
|
||||
|
||||
#endif
|
96029
source/engine/s7.c
96029
source/engine/s7.c
File diff suppressed because it is too large
Load diff
1239
source/engine/s7.h
1239
source/engine/s7.h
File diff suppressed because it is too large
Load diff
|
@ -9,7 +9,7 @@
|
|||
|
||||
#include "stb_ds.h"
|
||||
|
||||
s7_scheme *s7 = NULL;
|
||||
duk_context *duk = NULL;
|
||||
|
||||
s7_pointer cpvec2s7(cpVect v) {
|
||||
s7_pointer ret = s7_make_vector(s7, 2);
|
||||
|
@ -65,9 +65,11 @@ static int load_prefab(const char *fpath, const struct stat *sb, int typeflag) {
|
|||
}
|
||||
|
||||
void script_init() {
|
||||
s7 = s7_init();
|
||||
duk = duk_create_heap_default();
|
||||
/*
|
||||
s7_set_current_error_port(s7, s7_open_output_function(s7, my_err));
|
||||
s7_set_current_output_port(s7, s7_open_output_function(s7, my_print));
|
||||
*/
|
||||
ffi_load();
|
||||
|
||||
/* Load all prefabs into memory */
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
#ifndef SCRIPT_H
|
||||
#define SCRIPT_H
|
||||
|
||||
#include "s7.h"
|
||||
#include "duktape.h"
|
||||
#include <chipmunk/chipmunk.h>
|
||||
|
||||
extern s7_scheme *s7;
|
||||
extern duk_context *duk;
|
||||
|
||||
void script_init();
|
||||
void script_run(const char *script);
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
|
||||
#include "duktape.h"
|
||||
|
||||
#include "2dphysics.h"
|
||||
|
||||
|
@ -119,6 +119,13 @@ int main(int argc, char **args) {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
duk_context *duk = duk_create_heap_default();
|
||||
duk_eval_string(duk, "1+2");
|
||||
printf("DUK RESULT: %d", duk_get_int(duk, -1));
|
||||
|
||||
|
||||
|
||||
#if DBG
|
||||
if (logout) {
|
||||
time_t now = time(NULL);
|
||||
|
|
Loading…
Reference in a new issue