X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/puzzles/blobdiff_plain/28b5987d5dbdcb396c07b937a638590e5361361e..91adb2c5aa2b24a5927ad9ff9b3b16e5efffb4b1:/cube.c diff --git a/cube.c b/cube.c index 6a867a4..bc91973 100644 --- a/cube.c +++ b/cube.c @@ -157,7 +157,7 @@ enum { enum { LEFT, RIGHT, UP, DOWN, UP_LEFT, UP_RIGHT, DOWN_LEFT, DOWN_RIGHT }; -#define PREFERRED_GRID_SCALE 48.0F +#define PREFERRED_GRID_SCALE 48 #define GRID_SCALE (ds->gridscale) #define ROLLTIME 0.13F @@ -285,7 +285,7 @@ static void decode_params(game_params *ret, char const *string) default: break; } ret->d1 = ret->d2 = atoi(string); - while (*string && isdigit(*string)) string++; + while (*string && isdigit((unsigned char)*string)) string++; if (*string == 'x') { string++; ret->d2 = atoi(string); @@ -525,7 +525,7 @@ static void count_grid_square_callback(void *ctx, struct grid_square *sq) classes[thisclass]++; } -static char *validate_params(game_params *params) +static char *validate_params(game_params *params, int full) { int classes[5]; int i; @@ -863,7 +863,7 @@ static char *validate_desc(game_params *params, char *desc) return NULL; } -static game_state *new_game(midend_data *me, game_params *params, char *desc) +static game_state *new_game(midend *me, game_params *params, char *desc) { game_state *state = snew(game_state); int area; @@ -1452,34 +1452,31 @@ static struct bbox find_bbox(game_params *params) return bb; } -#define XSIZE(bb, solid) \ - ((int)(((bb).r - (bb).l + 2*(solid)->border) * GRID_SCALE)) -#define YSIZE(bb, solid) \ - ((int)(((bb).d - (bb).u + 2*(solid)->border) * GRID_SCALE)) +#define XSIZE(gs, bb, solid) \ + ((int)(((bb).r - (bb).l + 2*(solid)->border) * gs)) +#define YSIZE(gs, bb, solid) \ + ((int)(((bb).d - (bb).u + 2*(solid)->border) * gs)) -static void game_size(game_params *params, game_drawstate *ds, int *x, int *y, - int expand) +static void game_compute_size(game_params *params, int tilesize, + int *x, int *y) { struct bbox bb = find_bbox(params); - float gsx, gsy, gs; - gsx = *x / (bb.r - bb.l + 2*solids[params->solid]->border); - gsy = *y / (bb.d - bb.u + 2*solids[params->solid]->border); - gs = min(gsx, gsy); - - if (expand) - ds->gridscale = gs; - else - ds->gridscale = min(gs, PREFERRED_GRID_SCALE); + *x = XSIZE(tilesize, bb, solids[params->solid]); + *y = YSIZE(tilesize, bb, solids[params->solid]); +} - ds->ox = (int)(-(bb.l - solids[params->solid]->border) * GRID_SCALE); - ds->oy = (int)(-(bb.u - solids[params->solid]->border) * GRID_SCALE); +static void game_set_size(drawing *dr, game_drawstate *ds, + game_params *params, int tilesize) +{ + struct bbox bb = find_bbox(params); - *x = XSIZE(bb, solids[params->solid]); - *y = YSIZE(bb, solids[params->solid]); + ds->gridscale = tilesize; + ds->ox = (int)(-(bb.l - solids[params->solid]->border) * ds->gridscale); + ds->oy = (int)(-(bb.u - solids[params->solid]->border) * ds->gridscale); } -static float *game_colours(frontend *fe, game_state *state, int *ncolours) +static float *game_colours(frontend *fe, int *ncolours) { float *ret = snewn(3 * NCOLOURS, float); @@ -1497,7 +1494,7 @@ static float *game_colours(frontend *fe, game_state *state, int *ncolours) return ret; } -static game_drawstate *game_new_drawstate(game_state *state) +static game_drawstate *game_new_drawstate(drawing *dr, game_state *state) { struct game_drawstate *ds = snew(struct game_drawstate); @@ -1506,12 +1503,12 @@ static game_drawstate *game_new_drawstate(game_state *state) return ds; } -static void game_free_drawstate(game_drawstate *ds) +static void game_free_drawstate(drawing *dr, game_drawstate *ds) { sfree(ds); } -static void game_redraw(frontend *fe, game_drawstate *ds, game_state *oldstate, +static void game_redraw(drawing *dr, game_drawstate *ds, game_state *oldstate, game_state *state, int dir, game_ui *ui, float animtime, float flashtime) { @@ -1524,8 +1521,8 @@ static void game_redraw(frontend *fe, game_drawstate *ds, game_state *oldstate, game_state *newstate; int square; - draw_rect(fe, 0, 0, XSIZE(bb, state->solid), YSIZE(bb, state->solid), - COL_BACKGROUND); + draw_rect(dr, 0, 0, XSIZE(GRID_SCALE, bb, state->solid), + YSIZE(GRID_SCALE, bb, state->solid), COL_BACKGROUND); if (dir < 0) { game_state *t; @@ -1568,7 +1565,7 @@ static void game_redraw(frontend *fe, game_drawstate *ds, game_state *oldstate, + ds->oy); } - draw_polygon(fe, coords, state->squares[i].npoints, + draw_polygon(dr, coords, state->squares[i].npoints, state->squares[i].blue ? COL_BLUE : COL_BACKGROUND, COL_BORDER); } @@ -1650,13 +1647,14 @@ static void game_redraw(frontend *fe, game_drawstate *ds, game_state *oldstate, continue; } - draw_polygon(fe, coords, poly->order, + draw_polygon(dr, coords, poly->order, state->facecolours[i] ? COL_BLUE : COL_BACKGROUND, COL_BORDER); } sfree(poly); - draw_update(fe, 0, 0, XSIZE(bb, state->solid), YSIZE(bb, state->solid)); + draw_update(dr, 0, 0, XSIZE(GRID_SCALE, bb, state->solid), + YSIZE(GRID_SCALE, bb, state->solid)); /* * Update the status bar. @@ -1668,7 +1666,7 @@ static void game_redraw(frontend *fe, game_drawstate *ds, game_state *oldstate, (state->completed ? "COMPLETED! " : ""), (state->completed ? state->completed : state->movecount)); - status_bar(fe, statusbuf); + status_bar(dr, statusbuf); } } @@ -1684,14 +1682,17 @@ static float game_flash_length(game_state *oldstate, return 0.0F; } -static int game_wants_statusbar(void) +static int game_timing_state(game_state *state, game_ui *ui) { return TRUE; } -static int game_timing_state(game_state *state) +static void game_print_size(game_params *params, float *x, float *y) +{ +} + +static void game_print(drawing *dr, game_state *state, int tilesize) { - return TRUE; } #ifdef COMBINED @@ -1699,7 +1700,7 @@ static int game_timing_state(game_state *state) #endif const struct game thegame = { - "Cube", "games.cube", + "Cube", "games.cube", "cube", default_params, game_fetch_preset, decode_params, @@ -1722,14 +1723,15 @@ const struct game thegame = { game_changed_state, interpret_move, execute_move, - game_size, + PREFERRED_GRID_SCALE, game_compute_size, game_set_size, game_colours, game_new_drawstate, game_free_drawstate, game_redraw, game_anim_length, game_flash_length, - game_wants_statusbar, + FALSE, FALSE, game_print_size, game_print, + TRUE, /* wants_statusbar */ FALSE, game_timing_state, - 0, /* mouse_priorities */ + 0, /* flags */ };