From 99915f4c20808cdbfd566a3b0a10b246d8ecee91 Mon Sep 17 00:00:00 2001
From: "p.kosyh"
Date: Fri, 2 Oct 2009 19:04:34 +0000
Subject: [PATCH] rewritten use algo. gui.lua menu ench.
---
src/sdl-instead/game.c | 124 ++++++++++++++++++++---------------------
stead/gui.lua | 13 +++++
2 files changed, 75 insertions(+), 62 deletions(-)
diff --git a/src/sdl-instead/game.c b/src/sdl-instead/game.c
index 8aaa94f..367edb8 100644
--- a/src/sdl-instead/game.c
+++ b/src/sdl-instead/game.c
@@ -1213,26 +1213,31 @@ void game_xref_update(xref_t xref, int x, int y)
xref_update(xref, x, y, game_clear, game_update);
}
-xref_t inv_xref = NULL;
+xref_t use_xref = NULL;
-int disable_inv(void)
+int disable_use(void)
{
- if (inv_xref) {
- xref_set_active(inv_xref, 0);
- game_xref_update(inv_xref, el(el_inv)->x, el(el_inv)->y);
-// txt_box_update_links(el_box(el_inv), el(el_inv)->x, el(el_inv)->y, game_clear);
- inv_xref = NULL;
+ if (use_xref) {
+ xref_set_active(use_xref, 0);
+ if (xref_layout(use_xref) == txt_box_layout(el_box(el_inv)))
+ game_xref_update(use_xref, el(el_inv)->x, el(el_inv)->y);
+ else
+ game_xref_update(use_xref, el(el_scene)->x, el(el_scene)->y);
+ use_xref = NULL;
return 1;
}
return 0;
}
-void enable_inv(xref_t xref)
+void enable_use(xref_t xref)
{
- inv_xref = xref;
+ use_xref = xref;
xref_set_active(xref, 1);
- //txt_box_update_links(el_box(el_inv), el(el_inv)->x, el(el_inv)->y, game_clear);
- game_xref_update(inv_xref, el(el_inv)->x, el(el_inv)->y);
+ game_xref_update(use_xref, el(el_inv)->x, el(el_inv)->y);
+ if (xref_layout(use_xref) == txt_box_layout(el_box(el_inv)))
+ game_xref_update(use_xref, el(el_inv)->x, el(el_inv)->y);
+ else
+ game_xref_update(use_xref, el(el_scene)->x, el(el_scene)->y);
}
@@ -1302,7 +1307,7 @@ int game_highlight(int x, int y, int on)
}
if (hxref != xref && oel) {
- if (hxref != inv_xref) {
+ if (hxref != use_xref) {
xref_set_active(hxref, 0);
game_xref_update(hxref, oel->x, oel->y);
up = 1;
@@ -1317,7 +1322,7 @@ int game_highlight(int x, int y, int on)
static void mouse_reset(void)
{
game_highlight(-1, -1, 0);
- disable_inv();
+ disable_use();
motion_mode = 0;
old_xref = old_el = NULL;
}
@@ -1377,6 +1382,8 @@ int mouse_filter(void)
int game_click(int x, int y, int action)
{
int menu_mode = 0;
+ int use_mode = 0;
+ int go_mode = 0;
struct el *elem = NULL;
char buf[1024];
xref_t xref = NULL;
@@ -1433,11 +1440,11 @@ int game_click(int x, int y, int action)
scroll_pdown(el_inv);
} else if (elem->id == el_iup) {
scroll_pup(el_inv);
- } else if (disable_inv())
- el_update(el_inv);
+ } else if (disable_use());
+// el_update(el_inv);
motion_mode = 0;
- } else if (disable_inv()) {
- el_update(el_inv);
+ } else if (disable_use()) {
+// el_update(el_inv);
// gfx_flip();
}
return 0;
@@ -1459,61 +1466,54 @@ int game_click(int x, int y, int action)
if (!strncmp("act ", xref_get_text(xref), 4)) {
menu_mode = 1;
xref_txt += 4;
+ } else if (!strncmp("use ", xref_get_text(xref), 4)) {
+ use_mode = 1;
+ xref_txt += 4;
+ } else if (!strncmp("go ", xref_get_text(xref), 3)) {
+ go_mode = 1;
+ xref_txt += 3;
}
- if (elem->id == el_ways ||
- elem->id == el_title) {
- strcpy(buf, xref_txt);
- if (mouse_filter())
- return 0;
- if (opt_click)
- snd_play(game_theme.click);
- if (disable_inv()) {
- el_update(el_inv);
+ if (!use_xref) {
+ if (use_mode) {
+ enable_use(xref);
+// el_update(el_inv);
return 0;
}
- game_cmd(buf);
- return 1;
- }
-
- if (elem->id == el_scene) {
- if (inv_xref) {
- if (menu_mode)
- return 0;
- snprintf(buf,sizeof(buf), "use %s,%s", xref_get_text(inv_xref), xref_txt);
- disable_inv();
- } else
- strcpy(buf, xref_txt);
- if (mouse_filter())
- return 0;
- if (opt_click)
- snd_play(game_theme.click);
- game_cmd(buf);
- return 1;
- }
-
- if (elem->id == el_inv) {
-
- if (!inv_xref && !menu_mode) {
- enable_inv(xref);
- el_update(el_inv);
- return 0;
- }
-
- if (xref == inv_xref || menu_mode) {
- snprintf(buf,sizeof(buf), "use %s", xref_txt);
+ if (menu_mode) {
+ if (elem->id == el_inv)
+ snprintf(buf, sizeof(buf), "use %s", xref_txt);
+ else
+ snprintf(buf, sizeof(buf), "%s", xref_txt);
} else
- snprintf(buf,sizeof(buf), "use %s,%s", xref_get_text(inv_xref), xref_txt);
-
- disable_inv();
+ snprintf(buf, sizeof(buf), "%s", xref_get_text(xref));
if (mouse_filter())
return 0;
if (opt_click)
snd_play(game_theme.click);
game_cmd(buf);
return 1;
- }
- return 0;
+
+ }
+
+ if (menu_mode || go_mode)
+ return 0;
+
+ if (use_xref == xref)
+ snprintf(buf,sizeof(buf), "%s", xref_get_text(use_xref));
+ else
+ snprintf(buf,sizeof(buf), "%s,%s", xref_get_text(use_xref), xref_txt);
+
+ if (mouse_filter())
+ return 0;
+
+ disable_use();
+
+ if (opt_click)
+ snd_play(game_theme.click);
+
+ game_cmd(buf);
+ return 1;
}
void game_cursor(int on)
@@ -1539,7 +1539,7 @@ void game_cursor(int on)
if (on == CURSOR_CLEAR || on == CURSOR_OFF)
return;
if (on != CURSOR_DRAW)
- cur = (inv_xref) ? game_theme.use:game_theme.cursor;
+ cur = (use_xref) ? game_theme.use:game_theme.cursor;
if (!cur)
return;
diff --git a/stead/gui.lua b/stead/gui.lua
index db9aac6..1d2b846 100644
--- a/stead/gui.lua
+++ b/stead/gui.lua
@@ -12,6 +12,9 @@ iface.xref = function(self, str, obj)
end
if not o then
o = ref(me():srch(obj));
+ if o ~= nil then
+ cmd = 'use ';
+ end
end
if not isObject(o) or isStatus(o) or not o.id then
return str;
@@ -108,6 +111,16 @@ function menu(v)
return r, true
end
end
+ if v.act == nil then
+ v.act = function(s)
+ local r
+ r = call(s, 'menu');
+ if r == nil then
+ obj_tag(me(), MENU_TAG_ID); -- retag menu field
+ end
+ return r, true
+ end
+ end
if v.save == nil then
v.save = menu_save;
end