diff options
| -rw-r--r-- | frontends/gl/main.c | 8 | ||||
| -rw-r--r-- | frontends/gl/skin.c | 11 | ||||
| -rw-r--r-- | frontends/gl/skin.h | 1 | ||||
| -rw-r--r-- | lib/cetris.c | 2 | ||||
| -rw-r--r-- | lib/cetris.h | 3 |
5 files changed, 22 insertions, 3 deletions
diff --git a/frontends/gl/main.c b/frontends/gl/main.c index 90dbfa5..ca2db71 100644 --- a/frontends/gl/main.c +++ b/frontends/gl/main.c @@ -138,6 +138,14 @@ void handle_game_events(cetris_ui *ui, tetris_board_t *board) { SDL_PauseAudioDevice(ui->audio_device, 0); board->game.lock_event--; } + + if (board->game.move_event > 0) { + SDL_QueueAudio(ui->audio_device, board->skin.move_sound.wav_buffer, + board->skin.move_sound.wav_length); + + SDL_PauseAudioDevice(ui->audio_device, 0); + board->game.move_event--; + } } diff --git a/frontends/gl/skin.c b/frontends/gl/skin.c index 661f815..a38ec4c 100644 --- a/frontends/gl/skin.c +++ b/frontends/gl/skin.c @@ -47,6 +47,8 @@ void load_skin(char* name, cetris_skin_t* skin) { load_element(&skin->playboard, "playboard.png", dir_name); load_element(&skin->border, "border.png", dir_name); + char file[125]; + int clear_count = 5; skin->clear_sound = (audio_clip_t *)malloc(sizeof(audio_clip_t) * 5); @@ -59,9 +61,14 @@ void load_skin(char* name, cetris_skin_t* skin) { load_multiple_audio("four_clear", dir_name, &tetris_count, skin->tetris_sound); - format_str(name, 120, "%s/lock.wav", dir_name); - SDL_LoadWAV(name, &skin->lock_sound.wav_spec, + format_str(file, 125, "%s/lock.wav", dir_name); + SDL_LoadWAV(file, &skin->lock_sound.wav_spec, &skin->lock_sound.wav_buffer, &skin->lock_sound.wav_length); + + format_str(file, 125, "%s/move.wav", dir_name); + SDL_LoadWAV(file, &skin->move_sound.wav_spec, + &skin->move_sound.wav_buffer, &skin->move_sound.wav_length); + } diff --git a/frontends/gl/skin.h b/frontends/gl/skin.h index b7aa994..ed0e82b 100644 --- a/frontends/gl/skin.h +++ b/frontends/gl/skin.h @@ -13,6 +13,7 @@ typedef struct { audio_clip_t *clear_sound; audio_clip_t *tetris_sound; audio_clip_t lock_sound; + audio_clip_t move_sound; } cetris_skin_t; void load_skin(char* name, cetris_skin_t* skin); diff --git a/lib/cetris.c b/lib/cetris.c index 3751157..ea53576 100644 --- a/lib/cetris.c +++ b/lib/cetris.c @@ -167,6 +167,7 @@ static void move_current(cetris_game *g, uint8_t move) { g->current.pos.x += basic_movements[move].x; int check = check_matrix(g, &g->current.m); + if (check > 0 && move != DOWN) g->move_event++; if (check <= 0) { g->current.pos.y -= basic_movements[move].y; g->current.pos.x -= basic_movements[move].x; @@ -530,6 +531,7 @@ CETRIS_EXPORT bool update_game_tick(cetris_game *g) { bool did_move = false; if (g->next_drop_tick && g->tick >= g->next_drop_tick) { + if (g->held_moves[DOWN]) g->move_event++; move_current(g, DOWN); g->next_drop_tick = 0; did_move = true; diff --git a/lib/cetris.h b/lib/cetris.h index 0cbc5c3..1c3d8f0 100644 --- a/lib/cetris.h +++ b/lib/cetris.h @@ -144,7 +144,8 @@ struct cetris_game { uint8_t line_combo; bool game_over; - // events + // events + uint8_t move_event; uint8_t line_event; uint8_t lock_event; uint8_t tetris_event; |