From 5170afce996ad0f3d2dab299e10cf41234808a5b Mon Sep 17 00:00:00 2001 From: "p.kosyh" Date: Thu, 21 Jan 2010 08:49:00 +0000 Subject: [PATCH] input object --- src/sdl-instead/game.c | 25 ++++++++++++++++++------- src/sdl-instead/menu.c | 2 +- stead/stead.lua | 27 +++++++++++++++++++++++++-- 3 files changed, 44 insertions(+), 10 deletions(-) diff --git a/src/sdl-instead/game.c b/src/sdl-instead/game.c index 85fa216..b83aac9 100644 --- a/src/sdl-instead/game.c +++ b/src/sdl-instead/game.c @@ -2132,19 +2132,28 @@ static int is_key(struct inp_event *ev, const char *name) return strcmp(ev->sym, name); } -static int game_input(int down, const char *key) +static int game_input(int down, const char *key, int x, int y) { char *p; char buf[1024]; - if (game_paused()) return -1; p = encode_esc_string((key)?key:"unknown"); if (!p) return -1; - - snprintf(buf, sizeof(buf), "return stead.input(%s, \"%s\")", - ((down)?"true":"false"), p); + + if (x == -1) + snprintf(buf, sizeof(buf), "return stead.input(%s, \"%s\")", + ((down)?"true":"false"), p); + else { + float v = game_theme.scale; + if (v != 1.0f) { + x = (int)((float)x / v); + y = (int)((float)y / v); + } + snprintf(buf, sizeof(buf), "return stead.input(%s, \"%s\", %d, %d)", + ((down)?"true":"false"), p, x, y); + } free(p); if (instead_eval(buf)) { instead_clear(); @@ -2174,7 +2183,10 @@ int game_loop(void) if (rc == -1) {/* close */ break; } else if (curgame_dir && (ev.type == KEY_DOWN || ev.type == KEY_UP) - && !game_input((ev.type == KEY_DOWN), ev.sym)) { + && !game_input((ev.type == KEY_DOWN), ev.sym, -1, -1)) { + ; /* all is done in game_input */ + } else if (curgame_dir && (ev.type == MOUSE_DOWN || ev.type == MOUSE_UP) + && !game_input((ev.type == MOUSE_DOWN), "mouse", ev.x, ev.y)) { ; /* all is done in game_input */ } else if (((ev.type == KEY_DOWN) || (ev.type == KEY_UP)) && (!is_key(&ev, "left alt") || !is_key(&ev, "right alt"))) { @@ -2327,4 +2339,3 @@ int game_loop(void) } return 0; } - diff --git a/src/sdl-instead/menu.c b/src/sdl-instead/menu.c index 0670389..ad990fb 100644 --- a/src/sdl-instead/menu.c +++ b/src/sdl-instead/menu.c @@ -387,7 +387,7 @@ int game_menu_act(const char *a) game_restart(); restart_needed = 0; } - game_menu(menu_main); +// game_menu(menu_main); } else if (!strcmp(a,"/ask_quit")) { game_menu(menu_askquit); } else if (!strcmp(a,"/about")) { diff --git a/stead/stead.lua b/stead/stead.lua index 03e0ea8..54b67cc 100644 --- a/stead/stead.lua +++ b/stead/stead.lua @@ -12,7 +12,18 @@ stead = { end return end, - input = function(pressed, event) + input = function(pressed, event, x, y) + if type(input) == 'table' then + if event == 'mouse' then + if type(input.click) == 'function' then + return input:click(pressed, x, y); + end + else + if type(input.key) == 'function' then + return input:key(pressed, event); + end + end + end return end, } @@ -1847,7 +1858,19 @@ timer = obj { -- timer calls stead.timer callback end set_timer(v) return true - end + end, +--[[ callback = function(s) + end, ]] +}; + +input = obj { -- input object + nam = 'input', +--[[ key = function(s, down, key) + return + end, ]] +--[[ click = function(s, down, x, y) + return + end ]] }; function vobj_save(self, name, h, need)