diff options
Diffstat (limited to 'src/game.c')
| -rw-r--r-- | src/game.c | 19 |
1 files changed, 14 insertions, 5 deletions
@@ -89,7 +89,8 @@ typedef enum { intro_state, neutral_state, piece_held_state, - swap_animation_state + swap_animation_state, + game_over_state } game_scene_state; typedef enum { @@ -108,6 +109,7 @@ typedef struct { typedef struct { float time_remaining; text_sprite time_added_sprites[TIMED_MODE_NUM_TIME_ADDED_SPRITES]; + int tiles_cleared; } timed_mode_data; typedef struct { @@ -299,7 +301,7 @@ void init_game(SDL_Renderer* renderer, MIX_Mixer* mixer) { if (game.text_font.spritesheet == NULL) { load_sprite_font(renderer, - "assets/Fonts/Peaberry-Font-v2.0/Peaberry Bitmap Fonts/1. WhitePeaberry/2. White Peaberry/WhitePeaberry.txt", + "assets"DIRSEP"Fonts"DIRSEP"Peaberry-Font-v2.0"DIRSEP"Peaberry Bitmap Fonts"DIRSEP"1. WhitePeaberry"DIRSEP"2. White Peaberry"DIRSEP"WhitePeaberry.txt", &game.text_font); } @@ -317,7 +319,8 @@ void init_timed_game(SDL_Renderer* renderer, MIX_Mixer* mixer, float time_remain game.mode = timed_mode; game.timed_mode_data = (timed_mode_data) { - .time_remaining = time_remaining + .time_remaining = time_remaining, + .tiles_cleared = 0 }; } @@ -492,7 +495,7 @@ void add_time_added_sprite(float time_added, float xpos, float ypos) { void timed_mode_process_clear(int sy, int sx, int ey, int ex) { timed_mode_data* timed_mode_data = &game.timed_mode_data; - int tiles_cleared = SDL_abs(ey-sy) + SDL_abs(ex-sx) + 1; + int tiles_cleared = SDL_abs(ey-sy) + SDL_abs(ex-sx) + 1; float time_added = 1; if (tiles_cleared > MIN_TILES_TO_CLEAR) { @@ -500,6 +503,8 @@ void timed_mode_process_clear(int sy, int sx, int ey, int ex) { (tiles_cleared - MIN_TILES_TO_CLEAR) * CLEAR_EXTRA_TIME_BONUS; } + timed_mode_data->tiles_cleared += tiles_cleared; + SDL_FPoint clear_position = board_position(sy, sx); add_time_added_sprite(time_added, clear_position.x, clear_position.y); timed_mode_data->time_remaining += time_added; @@ -692,7 +697,7 @@ void draw_piece(SDL_Renderer* renderer, const piece* piece) { void draw_background(SDL_Renderer* renderer) { int x_offset = game.background_offset; - while (x_offset <= 800) { + while (x_offset <= get_window_relative_xpos(1)) { SDL_RenderTexture(renderer, game.background_texture, NULL, @@ -842,6 +847,10 @@ void update_timed_mode(float dt) { timed_mode_data->time_remaining = SDL_max(timed_mode_data->time_remaining - dt, 0); + if (timed_mode_data->time_remaining <= 0) { + game.state = game_over_state; + } + for (int i = 0; i < TIMED_MODE_NUM_TIME_ADDED_SPRITES; i++) { text_sprite* text_sprite = &timed_mode_data->time_added_sprites[i]; |
