aboutsummaryrefslogtreecommitdiff
path: root/cube.c
diff options
context:
space:
mode:
authorSimon Tatham <anakin@pobox.com>2004-04-28 17:21:57 +0000
committerSimon Tatham <anakin@pobox.com>2004-04-28 17:21:57 +0000
commit56a59e2e51d0cbe93ce16253e52a6421b0168c06 (patch)
tree863204a212690fba3d260e4580b063f4052732dd /cube.c
parentd37b52bde5a358b1ee839c263bdc0308d1047a1a (diff)
downloadpuzzles-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.c34
1 files changed, 32 insertions, 2 deletions
diff --git a/cube.c b/cube.c
index 710845d..543e13b 100644
--- a/cube.c
+++ b/cube.c
@@ -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;