#include #include #include #include #define QOI_IMPLEMENTATION #include "third/qoi.h" #define SCREEN_WIDTH 256 #define SCREEN_HEIGHT 256 #define TILE_SIZE 16 struct ty_image img; void tick(void) { double start = ty_get_time(); ty_draw_clear(TY_COLOR_BLACK); for (int y = 0; y < SCREEN_HEIGHT; y += 16) { for (int x = 0; x < SCREEN_WIDTH; x += 16) { ty_draw_image(img, ty_vec2i(x, y)); } } ty_draw_rect( (struct ty_recti){ SCREEN_WIDTH*0.5 + sin(ty_get_time() * 10) * 50 - 25, SCREEN_HEIGHT*0.5-25, 50, 50, }, TY_COLOR_RED ); ty_draw_line( ty_vec2i(0, 0), ty_vec2i(100, 100), ty_color(0xFF, 0xF0, 0x80) ); ty_draw_line( ty_vec2i(100, 0), ty_vec2i(0, 100), ty_color(0x80, 0xF0, 0xFF) ); ty_draw_line( ty_vec2i(150, 0), ty_vec2i(150, 100), ty_color(0x80, 0xF0, 0xFF) ); ty_draw_line( ty_vec2i(100, 50), ty_vec2i(200, 50), ty_color(0xFF, 0xF0, 0x80) ); ty_draw_end(); double frame_time = ty_get_time() - start; ty_log_debug("%g ms, %g FPS", frame_time * 1000, 1.0 / frame_time); } int main(void) { struct ty_hints hints = { .scr_width = SCREEN_WIDTH, .scr_height = SCREEN_HEIGHT, .game_title = "Demonchime", .ticrate = 30, }; ty_init(hints); qoi_desc desc; void *data = qoi_read("test_img.qoi", &desc, 3); if (!data) ty_log_fatal(TY_ERR_IO, "failed to read image"); img = ty_create_image(desc.width, desc.height, data); free(data); while (ty_is_game_running()) { int ticks = ty_tick(); for (int i = 0; i < ticks; i++) tick(); // ty_sleep(1000 / hints.ticrate); } ty_free_image(img); ty_deinit(); return 0; }