Back to shtanton's homepage
summaryrefslogtreecommitdiff
path: root/src/all.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/all.c')
-rw-r--r--src/all.c73
1 files changed, 63 insertions, 10 deletions
diff --git a/src/all.c b/src/all.c
index e5c86db..14e37ac 100644
--- a/src/all.c
+++ b/src/all.c
@@ -91,12 +91,14 @@ static const Color colors[N_COLORS][4] = {
#define BUTTON_SIZE 32
#define BUTTON_SPACING 16
-#define BUTTON_SPACER(i) (BUTTON_SPACING + (BUTTON_SIZE * (i) + (i) * BUTTON_SPACING))
+#define BUTTON_SPACER(i) (BUTTON_SPACING + BUTTON_SIZE + (BUTTON_SIZE * (i) + (i) * BUTTON_SPACING))
+// reverse order as they're anchored to bottom
static const Button buttons[N_BUTTONS] = {
- [BUTTON_CONTINUE] = {.x = BUTTON_SPACING, .y = BUTTON_SPACER(BUTTON_CONTINUE), .w = BUTTON_SIZE, .h = BUTTON_SIZE},
- [BUTTON_RETRY] = {.x = BUTTON_SPACING, .y = BUTTON_SPACER(BUTTON_RETRY), .w = BUTTON_SIZE, .h = BUTTON_SIZE},
[BUTTON_BACK] = {.x = BUTTON_SPACING, .y = BUTTON_SPACER(BUTTON_BACK), .w = BUTTON_SIZE, .h = BUTTON_SIZE},
+ [BUTTON_RETRY] = {.x = BUTTON_SPACING, .y = BUTTON_SPACER(BUTTON_RETRY), .w = BUTTON_SIZE, .h = BUTTON_SIZE},
+ [BUTTON_PLAY] = {.x = BUTTON_SPACING, .y = BUTTON_SPACER(BUTTON_PLAY), .w = BUTTON_SIZE, .h = BUTTON_SIZE},
+ [BUTTON_CONTINUE] = {.x = BUTTON_SPACING, .y = BUTTON_SPACER(BUTTON_CONTINUE), .w = BUTTON_SIZE, .h = BUTTON_SIZE},
};
static DrawList *render(State *state, UI *ui, Arena *a) {
@@ -132,6 +134,7 @@ static DrawList *render(State *state, UI *ui, Arena *a) {
}
}
+ // render end cell
drawList->els[drawList->len++] = (DrawElement) {
.x = cellWidth * state->goalx + GRID_OFFSET_X,
.y = cellHeight * state->goaly,
@@ -142,15 +145,17 @@ static DrawList *render(State *state, UI *ui, Arena *a) {
.image = 1,
};
+ // render side panel
drawList->els[drawList->len++] = (DrawElement) {
.x = 0,
.y = 0,
.w = GRID_OFFSET_X,
.h = ui->height,
- .fill = {255, 255, 0, 255},
+ .fill = {100, 100, 100, 255},
.border = {0, 0, 0, 255},
};
-
+
+ // render buttons
for (int i = 0; i < N_BUTTONS; i++) {
Color colour = {0, 0, 0, 255};
switch (state->buttonStates[i]) {
@@ -164,16 +169,51 @@ static DrawList *render(State *state, UI *ui, Arena *a) {
colour = (Color) {255, 0, 0, 255};
break;
}
+ int image = IMAGE_NULL;
+ switch (i) {
+ case BUTTON_CONTINUE:
+ image = IMAGE_CONTINUE;
+ break;
+ case BUTTON_BACK:
+ image = IMAGE_EXIT;
+ break;
+ case BUTTON_RETRY:
+ image = IMAGE_RETRY;
+ break;
+ case BUTTON_PLAY:
+ image = state->playing ? IMAGE_PAUSE : IMAGE_PLAY;
+ break;
+ }
drawList->els[drawList->len++] = (DrawElement) {
.x = buttons[i].x,
- .y = buttons[i].y,
+ .y = ui->height - buttons[i].y,
.w = buttons[i].w,
.h = buttons[i].h,
- .fill = colour,
- .border = {0, 0, 0, 255}
+ .image = image,
};
}
+ // render placeable cells
+ int cellCount = 0; // doesn't increment when ignoring empty cells
+ for (int i = 0; i < MAX_PLACEABLE_CELLS; i++) {
+ if (levels[state->currentLevel].placeableCells[i] == EMPTY)
+ continue;
+
+ for (int x = 0; x < 2; x++) {
+ for (int y = 0; y < 2; y++) {
+ drawList->els[drawList->len++] = (DrawElement) {
+ .x = BUTTON_SIZE / 2 + x * (BUTTON_SIZE / 2),
+ .y = (BUTTON_SIZE / 2 + y * (BUTTON_SIZE / 2)) * (cellCount + 1), // TODO - padding
+ .w = BUTTON_SIZE / 2,
+ .h = BUTTON_SIZE / 2,
+ .fill = colors[cellCount + 1][x + 2 * y],
+ .border = {0, 0, 0, 0},
+ };
+ }
+ }
+ cellCount++;
+ }
+
return drawList;
}
@@ -189,15 +229,27 @@ static void update(Game *game, uint64_t now, Arena a) {
for (int i = 0; i < N_BUTTONS; i++) {
if (
game->mousex > buttons[i].x && game->mousex < buttons[i].x + buttons[i].w &&
- game->mousey > buttons[i].y && game->mousey < buttons[i].y + buttons[i].h
+ game->mousey > game->ui.height - buttons[i].y &&
+ game->mousey < game->ui.height - buttons[i].y + buttons[i].h
) {
// TODO - CLICK THINGS
//game->state.buttonStates[i] = BUTTON_STATE_PRESSED;
+ switch (i) {
+ case BUTTON_RETRY:
+ break;
+ case BUTTON_CONTINUE:
+ break;
+ case BUTTON_BACK:
+ break;
+ case BUTTON_PLAY:
+ game->state.playing = !game->state.playing;
+ break;
+ }
}
}
break;
case INPUT_RCLICK:
- x = game->mousex * GRIDWIDTH / game->ui.width;
+ x = (game->mousex - GRID_OFFSET_X) * GRIDWIDTH / offset_width;
y = game->mousey * GRIDHEIGHT / game->ui.height;
game->state.grid[x + y * GRIDWIDTH] = EMPTY;
break;
@@ -243,6 +295,7 @@ int main(int argc, char **argv) {
xmemcpy(&game->state.grid, &levels[0].grid, sizeof(game->state.grid));
game->state.goalx = levels[0].goalx;
game->state.goaly = levels[0].goaly;
+ game->state.currentLevel = 0;
game->state.playing = 0;
game->ui = (UI) {
.width = 640,