diff options
| author | 2019-11-02 17:07:26 -0400 | |
|---|---|---|
| committer | 2019-11-02 17:07:26 -0400 | |
| commit | ea5b5fa2dd45f2f4b8a562ba5a3422dba10dc4d5 (patch) | |
| tree | 5b5c68bba264efcb5412805b2a4402c17523dc31 /frontends | |
| parent | 7b78101297834ee591c7a02284d57adbd876bc70 (diff) | |
| download | cetris-ea5b5fa2dd45f2f4b8a562ba5a3422dba10dc4d5.tar.gz cetris-ea5b5fa2dd45f2f4b8a562ba5a3422dba10dc4d5.tar.bz2 cetris-ea5b5fa2dd45f2f4b8a562ba5a3422dba10dc4d5.zip | |
make new thread for game events
Diffstat (limited to 'frontends')
| -rw-r--r-- | frontends/gl/events.c | 65 | ||||
| -rw-r--r-- | frontends/gl/events.h | 3 | ||||
| -rw-r--r-- | frontends/gl/main.c | 10 | ||||
| -rw-r--r-- | frontends/gl/meson.build | 2 | ||||
| -rw-r--r-- | frontends/sdl/data/move_das.wav | bin | 0 -> 1928 bytes |
5 files changed, 75 insertions, 5 deletions
diff --git a/frontends/gl/events.c b/frontends/gl/events.c new file mode 100644 index 0000000..a3874b2 --- /dev/null +++ b/frontends/gl/events.c @@ -0,0 +1,65 @@ +#ifdef _WIN32 +#include <window.h> +#else +#define _GNU_SOURCE +#include <pthread.h> +#include <time.h> +#include <unistd.h> +#endif + +#include "ui.h" +#include <SDL_mixer.h> + +void handle_game_event(cetris_ui *ui) { +/* + if (board->game.lock_event > 0) { + Mix_PlayChannel( 1, board->skin.lock_sound, 0 ); + board->game.lock_event--; + } + */ + + //if (board->game.line_event > 0) { + + /* + if (ui->board.game.tetris_event > 0) { + //int index = rand() % ui->skin.tetris_sound_count; + Mix_PlayChannel( 1, ui->board.skin.tetris_sound[0], 0 ); + ui->board.game.tetris_event--; + } + */ + + if (ui->board.game.move_event > 0) { + //int index = rand() % ui->skin.tetris_sound_count; + Mix_HaltChannel(0); + Mix_PlayChannel( 0, ui->board.skin.move_sound, 0); + ui->board.game.move_event--; + printf("sound\n"); + } +} + +#ifdef _WIN32 +DWORD WINAPI game_event_loop(void* data) { + cetris_ui *ui = (cetris_ui*)data; + while (1) { + handle_game_event(ui); + Sleep(1); + } +} +void start_event_thread(cetris_ui *ui) { + HANDLE thread = CreateThread(NULL, 0, game_event_loop, ui, 0, NULL); +} +#else +void *game_event_loop(void* data) { + cetris_ui *ui = (cetris_ui*)data; + while (1) { + handle_game_event(ui); + usleep(1); + } + return 0; +} +void start_event_thread(cetris_ui *ui) { + pthread_t thread; + pthread_create(&thread, NULL, game_event_loop, (void*)ui); +} +#endif + diff --git a/frontends/gl/events.h b/frontends/gl/events.h new file mode 100644 index 0000000..43c9650 --- /dev/null +++ b/frontends/gl/events.h @@ -0,0 +1,3 @@ +#include "ui.h" + +void start_event_thread(cetris_ui *ui); diff --git a/frontends/gl/main.c b/frontends/gl/main.c index 7c3d163..c028b55 100644 --- a/frontends/gl/main.c +++ b/frontends/gl/main.c @@ -17,6 +17,7 @@ #include "skin.h" #include "drawable.h" #include "ui.h" +#include "events.h" static const int FRAME_RATE = 144; static const int SCREEN_FULLSCREEN = 0; @@ -96,6 +97,7 @@ void load_config(cetris_ui *ui) { } } + void handle_game_events(cetris_ui *ui, tetris_board_t *board) { if (board->game.waiting) { SDL_Delay(100); @@ -135,8 +137,6 @@ void handle_game_events(cetris_ui *ui, tetris_board_t *board) { } } - - void handle_key(SDL_Event e, key_bindings_t *keys, tetris_board_t* board) { int sym; switch (e.type) { @@ -245,6 +245,8 @@ int main(void) { load_tetris_board(&ui, &ui.board, 235.0f, 200.0f, 250.0f, 500.0f); load_held_piece(&ui, &ui.board, 152.0f, 210.0f, 88.0f, 88.0f); + + start_event_thread(&ui); SDL_Event e; @@ -258,11 +260,11 @@ int main(void) { draw_tetris_board(&ui); draw_held_piece(&ui); - handle_game_events(&ui, &ui.board); + //handle_game_events(&ui, &ui.board); SDL_GL_SwapWindow(window); - SDL_Delay(delay); + //SDL_Delay(delay); } SDL_GL_DeleteContext(maincontext); diff --git a/frontends/gl/meson.build b/frontends/gl/meson.build index 55517d1..c0f4d3e 100644 --- a/frontends/gl/meson.build +++ b/frontends/gl/meson.build @@ -1,4 +1,4 @@ -src = ['audio.c', 'ui.c', 'skin.c', 'drawable.c', 'shader.c', 'main.c', 'glad/src/glad.c'] +src = ['events.c', 'audio.c', 'ui.c', 'skin.c', 'drawable.c', 'shader.c', 'main.c', 'glad/src/glad.c'] inc = [cetris_inc, include_directories('glad/include')] deps = [cetris] diff --git a/frontends/sdl/data/move_das.wav b/frontends/sdl/data/move_das.wav Binary files differnew file mode 100644 index 0000000..dfc8dad --- /dev/null +++ b/frontends/sdl/data/move_das.wav |