summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Opalach <andrew@akon.city> 2019-11-02 17:07:26 -0400
committerAndrew Opalach <andrew@akon.city> 2019-11-02 17:07:26 -0400
commitea5b5fa2dd45f2f4b8a562ba5a3422dba10dc4d5 (patch)
tree5b5c68bba264efcb5412805b2a4402c17523dc31
parent7b78101297834ee591c7a02284d57adbd876bc70 (diff)
downloadcetris-ea5b5fa2dd45f2f4b8a562ba5a3422dba10dc4d5.tar.gz
cetris-ea5b5fa2dd45f2f4b8a562ba5a3422dba10dc4d5.tar.bz2
cetris-ea5b5fa2dd45f2f4b8a562ba5a3422dba10dc4d5.zip
make new thread for game events
-rw-r--r--frontends/gl/events.c65
-rw-r--r--frontends/gl/events.h3
-rw-r--r--frontends/gl/main.c10
-rw-r--r--frontends/gl/meson.build2
-rw-r--r--frontends/sdl/data/move_das.wavbin0 -> 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
new file mode 100644
index 0000000..dfc8dad
--- /dev/null
+++ b/frontends/sdl/data/move_das.wav
Binary files differ