#include "grid.h" #include "player.h" #include void player_update(struct Player *restrict player, struct Grid *restrict grid) { int new_x; int new_y; const int k_left = keydown(KEY_LEFT); const int k_right = keydown(KEY_RIGHT); const int k_up = keydown(KEY_UP); const int k_down = keydown(KEY_DOWN); const int move_x = (k_right && !player->right_held) - (k_left && !player->left_held); const int move_y = (k_down && !player->down_held) - (k_up && !player->up_held); player->left_held += (k_left) ? (1) : (-player->left_held); if (player->left_held > 6) player->left_held = 0; player->right_held += (k_right) ? (1) : (-player->right_held); if (player->right_held > 6) player->right_held = 0; player->up_held += (k_up) ? (1) : (-player->up_held); if (player->up_held > 6) player->up_held = 0; player->down_held += (k_down) ? (1) : (-player->down_held); if (player->down_held > 6) player->down_held = 0; new_x = player->x + move_x; new_y = player->y + move_y; if (new_x < 0) new_x = 0; if (new_y < 0) new_y = grid->height - 1; if (new_x >= grid->width) new_x = grid->width - 1; if (new_y >= grid->height) new_y = 0; if (!grid_get(*grid, new_x, new_y)) { player->x = new_x; player->y = new_y; } else if (grid_get(*grid, new_x, new_y) != TILE_SOLID) { grid_set(grid, new_x, new_y, grid_get(*grid, new_x, new_y) - 1); /* get rich! */ if (!grid_get(*grid, new_x, new_y)) player->cash += 1; } }