From 046f7affaf256ee94b237441663c3287364faf15 Mon Sep 17 00:00:00 2001 From: Quinn Date: Tue, 24 Jun 2025 19:52:00 +0200 Subject: [PATCH] write code for window handling --- src/io/window.c | 50 +++++++++++++++++++++++++++++++++++++++++++++++++ src/io/window.h | 12 ++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 src/io/window.c create mode 100644 src/io/window.h diff --git a/src/io/window.c b/src/io/window.c new file mode 100644 index 0000000..8da1279 --- /dev/null +++ b/src/io/window.c @@ -0,0 +1,50 @@ +#include "window.h" + +#include +#include +#include +#include +#include + +#include "../error.h" +#include "../game/game.h" +#include "audio.h" +#include "input.h" +#include "render.h" + +static SDL_Window* win = NULL; +static bool close = false; + +void window_init(void) { + assert(!win && !close); + if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO) < 0) + fatal(ERROR_SDL_INIT, "SDL could not initialize! SDL Error: %s", SDL_GetError()); + + SDL_Window* const window = SDL_CreateWindow("tetris clone", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN); + if (window == NULL) + fatal(ERROR_SDL_RENDERING_INIT, "Window failed to be created! SDL Error: %s", SDL_GetError()); + + render_init(win); + audio_device_init(32000, AUDIO_S16, 1, 4096); +} + +void window_close(void) { + close = true; +} + +void window_loop(void) { + assert(win); + + while (!close) { + game_update(input_getdat()); + render_update(); + } +} + +void window_free(void) { + assert(win); + render_free(); + SDL_DestroyWindow(win); + win = NULL; + close = false; +} diff --git a/src/io/window.h b/src/io/window.h new file mode 100644 index 0000000..06647f9 --- /dev/null +++ b/src/io/window.h @@ -0,0 +1,12 @@ +#pragma once + +#include "../game/game.h" + +#define PX_DENS 25 // pixel density; pixels per block +#define SCREEN_WIDTH ((COLUMNS + 6) * PX_DENS) // window width +#define SCREEN_HEIGHT ((COLUMNS) * PX_DENS / COLUMNS * ROWS) // window height + +void window_init(void); +void window_close(void); +void window_loop(void); +void window_free(void);