diff options
| author | Simon Tatham <anakin@pobox.com> | 2004-04-28 17:21:57 +0000 |
|---|---|---|
| committer | Simon Tatham <anakin@pobox.com> | 2004-04-28 17:21:57 +0000 |
| commit | 56a59e2e51d0cbe93ce16253e52a6421b0168c06 (patch) | |
| tree | 863204a212690fba3d260e4580b063f4052732dd /cube.c | |
| parent | d37b52bde5a358b1ee839c263bdc0308d1047a1a (diff) | |
| download | puzzles-56a59e2e51d0cbe93ce16253e52a6421b0168c06.zip puzzles-56a59e2e51d0cbe93ce16253e52a6421b0168c06.tar.gz puzzles-56a59e2e51d0cbe93ce16253e52a6421b0168c06.tar.bz2 puzzles-56a59e2e51d0cbe93ce16253e52a6421b0168c06.tar.xz | |
Introduce diagonal movement keys on the numeric keypad, and use them
as an alternative control method in Cube. (This was a bit of hassle
in the Windows front end; I also introduced a debugging framework
and made TranslateMessage conditional.)
[originally from svn r4162]
Diffstat (limited to 'cube.c')
| -rw-r--r-- | cube.c | 34 |
1 files changed, 32 insertions, 2 deletions
@@ -150,7 +150,7 @@ enum { NCOLOURS }; -enum { LEFT, RIGHT, UP, DOWN }; +enum { LEFT, RIGHT, UP, DOWN, UP_LEFT, UP_RIGHT, DOWN_LEFT, DOWN_RIGHT }; #define GRID_SCALE 48 #define ROLLTIME 0.1 @@ -171,7 +171,7 @@ struct grid_square { float x, y; int npoints; float points[8]; /* maximum */ - int directions[4]; /* bit masks showing point pairs */ + int directions[8]; /* bit masks showing point pairs */ int flip; int blue; int tetra_class; @@ -298,6 +298,10 @@ static void enum_grid_squares(game_params *params, sq.directions[RIGHT] = 0x0C; /* 2,3 */ sq.directions[UP] = 0x09; /* 0,3 */ sq.directions[DOWN] = 0x06; /* 1,2 */ + sq.directions[UP_LEFT] = 0; /* no diagonals in a square */ + sq.directions[UP_RIGHT] = 0; /* no diagonals in a square */ + sq.directions[DOWN_LEFT] = 0; /* no diagonals in a square */ + sq.directions[DOWN_RIGHT] = 0; /* no diagonals in a square */ sq.flip = FALSE; @@ -348,6 +352,15 @@ static void enum_grid_squares(game_params *params, sq.directions[UP] = 0x05; /* 0,2 */ sq.directions[DOWN] = 0; /* invalid move */ + /* + * Down-pointing triangle: both the up diagonals go + * up, and the down ones go left and right. + */ + sq.directions[UP_LEFT] = sq.directions[UP_RIGHT] = + sq.directions[UP]; + sq.directions[DOWN_LEFT] = sq.directions[LEFT]; + sq.directions[DOWN_RIGHT] = sq.directions[RIGHT]; + sq.flip = TRUE; if (firstix < 0) @@ -384,6 +397,15 @@ static void enum_grid_squares(game_params *params, sq.directions[DOWN] = 0x05; /* 0,2 */ sq.directions[UP] = 0; /* invalid move */ + /* + * Up-pointing triangle: both the down diagonals go + * down, and the up ones go left and right. + */ + sq.directions[DOWN_LEFT] = sq.directions[DOWN_RIGHT] = + sq.directions[DOWN]; + sq.directions[UP_LEFT] = sq.directions[LEFT]; + sq.directions[UP_RIGHT] = sq.directions[RIGHT]; + sq.flip = FALSE; if (firstix < 0) @@ -841,6 +863,14 @@ game_state *make_move(game_state *from, int x, int y, int button) direction = LEFT; else if (button == CURSOR_RIGHT) direction = RIGHT; + else if (button == CURSOR_UP_LEFT) + direction = UP_LEFT; + else if (button == CURSOR_DOWN_LEFT) + direction = DOWN_LEFT; + else if (button == CURSOR_UP_RIGHT) + direction = UP_RIGHT; + else if (button == CURSOR_DOWN_RIGHT) + direction = DOWN_RIGHT; else return NULL; |