X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/puzzles/blobdiff_plain/df11cd4e43b66b17df44a1e933f5c71361dc13a4..c5aa0b02c19bfd6e717837c0ae0b912456e47622:/cube.c diff --git a/cube.c b/cube.c index 4f26df7..2003163 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 @@ -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; @@ -586,7 +586,7 @@ static void classify_grid_square_callback(void *ctx, struct grid_square *sq) } static char *new_game_desc(game_params *params, random_state *rs, - game_aux_info **aux, int interactive) + char **aux, int interactive) { struct grid_data data; int i, j, k, m, area, facesperclass; @@ -687,11 +687,6 @@ static char *new_game_desc(game_params *params, random_state *rs, return desc; } -static void game_free_aux_info(game_aux_info *aux) -{ - assert(!"Shouldn't happen"); -} - static void add_grid_square_callback(void *ctx, struct grid_square *sq) { game_state *state = (game_state *)ctx; @@ -985,7 +980,7 @@ static void free_game(game_state *state) } static char *solve_game(game_state *state, game_state *currstate, - game_aux_info *aux, char **error) + char *aux, char **error) { return NULL; } @@ -1004,6 +999,15 @@ static void free_ui(game_ui *ui) { } +static char *encode_ui(game_ui *ui) +{ + return NULL; +} + +static void decode_ui(game_ui *ui, char *encoding) +{ +} + static void game_changed_state(game_ui *ui, game_state *oldstate, game_state *newstate) { @@ -1448,31 +1452,28 @@ 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(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) @@ -1520,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(fe, 0, 0, XSIZE(GRID_SCALE, bb, state->solid), + YSIZE(GRID_SCALE, bb, state->solid), COL_BACKGROUND); if (dir < 0) { game_state *t; @@ -1564,9 +1565,9 @@ static void game_redraw(frontend *fe, game_drawstate *ds, game_state *oldstate, + ds->oy); } - draw_polygon(fe, coords, state->squares[i].npoints, TRUE, - state->squares[i].blue ? COL_BLUE : COL_BACKGROUND); - draw_polygon(fe, coords, state->squares[i].npoints, FALSE, COL_BORDER); + draw_polygon(fe, coords, state->squares[i].npoints, + state->squares[i].blue ? COL_BLUE : COL_BACKGROUND, + COL_BORDER); } /* @@ -1646,13 +1647,14 @@ static void game_redraw(frontend *fe, game_drawstate *ds, game_state *oldstate, continue; } - draw_polygon(fe, coords, poly->order, TRUE, - state->facecolours[i] ? COL_BLUE : COL_BACKGROUND); - draw_polygon(fe, coords, poly->order, FALSE, COL_BORDER); + draw_polygon(fe, 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(fe, 0, 0, XSIZE(GRID_SCALE, bb, state->solid), + YSIZE(GRID_SCALE, bb, state->solid)); /* * Update the status bar. @@ -1705,7 +1707,6 @@ const struct game thegame = { TRUE, game_configure, custom_params, validate_params, new_game_desc, - game_free_aux_info, validate_desc, new_game, dup_game, @@ -1714,10 +1715,12 @@ const struct game thegame = { FALSE, game_text_format, new_ui, free_ui, + encode_ui, + decode_ui, 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,