aboutsummaryrefslogtreecommitdiff
path: root/lightup.c
diff options
context:
space:
mode:
authorSimon Tatham <anakin@pobox.com>2009-01-08 18:28:32 +0000
committerSimon Tatham <anakin@pobox.com>2009-01-08 18:28:32 +0000
commitf20847354cb6335fd349204f16021a72e2956cce (patch)
tree5ba7312d6c76c0b0c7db53934a269c8da81a6038 /lightup.c
parentfee17c3704f2a4d8b64cb0ced76173ff6a9b2954 (diff)
downloadpuzzles-f20847354cb6335fd349204f16021a72e2956cce.zip
puzzles-f20847354cb6335fd349204f16021a72e2956cce.tar.gz
puzzles-f20847354cb6335fd349204f16021a72e2956cce.tar.bz2
puzzles-f20847354cb6335fd349204f16021a72e2956cce.tar.xz
Patches from James H to add or improve arrow-key-driven cursors for
some puzzles. (Light Up's and Net's are merely polished a bit, but Mines acquires a new one.) [originally from svn r8402]
Diffstat (limited to 'lightup.c')
-rw-r--r--lightup.c29
1 files changed, 11 insertions, 18 deletions
diff --git a/lightup.c b/lightup.c
index ceda07f..a4e983d 100644
--- a/lightup.c
+++ b/lightup.c
@@ -1840,27 +1840,20 @@ static char *interpret_move(game_state *state, game_ui *ui, game_drawstate *ds,
cx = FROMCOORD(x);
cy = FROMCOORD(y);
action = (button == LEFT_BUTTON) ? FLIP_LIGHT : FLIP_IMPOSSIBLE;
- } else if (button == CURSOR_SELECT || button == CURSOR_SELECT2 ||
+ } else if (IS_CURSOR_SELECT(button) ||
button == 'i' || button == 'I' ||
button == ' ' || button == '\r' || button == '\n') {
- ui->cur_visible = 1;
- cx = ui->cur_x;
- cy = ui->cur_y;
- action = (button == 'i' || button == 'I' || button == CURSOR_SELECT2) ?
- FLIP_IMPOSSIBLE : FLIP_LIGHT;
- } else if (button == CURSOR_UP || button == CURSOR_DOWN ||
- button == CURSOR_RIGHT || button == CURSOR_LEFT) {
- int dx = 0, dy = 0;
- switch (button) {
- case CURSOR_UP: dy = -1; break;
- case CURSOR_DOWN: dy = 1; break;
- case CURSOR_RIGHT: dx = 1; break;
- case CURSOR_LEFT: dx = -1; break;
- default: assert(!"shouldn't get here");
+ if (ui->cur_visible) {
+ /* Only allow cursor-effect operations if the cursor is visible
+ * (otherwise you have no idea which square it might be affecting) */
+ cx = ui->cur_x;
+ cy = ui->cur_y;
+ action = (button == 'i' || button == 'I' || button == CURSOR_SELECT2) ?
+ FLIP_IMPOSSIBLE : FLIP_LIGHT;
}
- ui->cur_x += dx; ui->cur_y += dy;
- ui->cur_x = min(max(ui->cur_x, 0), state->w - 1);
- ui->cur_y = min(max(ui->cur_y, 0), state->h - 1);
+ ui->cur_visible = 1;
+ } else if (IS_CURSOR_MOVE(button)) {
+ move_cursor(button, &ui->cur_x, &ui->cur_y, state->w, state->h, 0);
ui->cur_visible = 1;
nullret = empty;
} else