From 2f9c468eee85c53ade4791df7c1cd3e2512bee43 Mon Sep 17 00:00:00 2001 From: Menase Teshale Date: Thu, 27 Aug 2026 01:30:08 +0300 Subject: Fonts working - No scaling - No rotation --- src/font.c | 38 +++++++++++++++++++++++++++++++++++++- src/font.h | 8 ++++++++ src/game.c | 11 +++++++++++ 3 files changed, 56 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/font.c b/src/font.c index 85f7498..17c62ad 100644 --- a/src/font.c +++ b/src/font.c @@ -168,6 +168,7 @@ bool load_sprite_font(SDL_Renderer* renderer, const char* filename, sprite_font* else if (strncmp(line, "char", 4) == 0) { font_char new_font_char; + new_font_char.active = true; int val; @@ -289,6 +290,7 @@ bool load_sprite_font(SDL_Renderer* renderer, const char* filename, sprite_font* font_char* characters_arranged = malloc((largest_char-smallest_char+1) * sizeof(font_char)); + memset(characters_arranged, 0, (largest_char-smallest_char+1) * sizeof(font_char)); if (characters_arranged == NULL) { SDL_Log("Failed to allocate space while loading font %s, error %s", @@ -312,7 +314,8 @@ bool load_sprite_font(SDL_Renderer* renderer, const char* filename, sprite_font* *font = (sprite_font) { .smallest_character = smallest_char, .largest_character = largest_char, - .characters = characters_arranged + .characters = characters_arranged, + .spritesheet = font_spritesheet }; strncpy(font->name, font_name, FONT_NAME_SIZE-1); @@ -322,3 +325,36 @@ bool load_sprite_font(SDL_Renderer* renderer, const char* filename, sprite_font* fclose(f); return true; } + +void draw_text_with_spritefont +( + SDL_Renderer* renderer, + sprite_font* font, + const unsigned char* text, + float x_position, float y_position +) { + while (*text) { + const font_char* fc = &font->characters[*text-font->smallest_character]; + if (!fc->active) { + text++; + continue; + } + + SDL_RenderTexture(renderer, + font->spritesheet, + &(SDL_FRect){ + .x = fc->x, + .y = fc->y, + .w = fc->width, + .h = fc->height + }, + &(SDL_FRect){ + .x = x_position + fc->x_offset, + .y = y_position + fc->y_offset, + .w = fc->width, + .h = fc->height + }); + x_position += fc->x_advance; + text++; + } +} diff --git a/src/font.h b/src/font.h index 199d65e..e8fcffa 100644 --- a/src/font.h +++ b/src/font.h @@ -6,6 +6,7 @@ #define PARSER_LINE_SIZE 4096 typedef struct { + bool active; float x, y; float width, height; float x_offset, y_offset; @@ -22,5 +23,12 @@ typedef struct { bool load_sprite_font(SDL_Renderer* renderer, const char* filename, sprite_font* font); void free_sprite_font(sprite_font* font); +void draw_text_with_spritefont +( + SDL_Renderer* renderer, + sprite_font* font, + const unsigned char* text, + float x_position, float y_position +); #endif // FONT_H_ diff --git a/src/game.c b/src/game.c index 8e51dca..ab7a46e 100644 --- a/src/game.c +++ b/src/game.c @@ -3,6 +3,7 @@ #include #include #include "app.h" +#include "font.h" #define MIN_TILES_TO_CLEAR 3 //More than this number of tiles per row or column will trigger clear @@ -108,6 +109,8 @@ typedef struct { SDL_Texture* background_texture; float background_offset; + sprite_font f; + float background_scaled_width; float background_scaled_height; @@ -264,6 +267,12 @@ void init_game(SDL_Renderer* renderer, MIX_Mixer* mixer) { game.pop_audio = MIX_LoadAudio(mixer, "assets/pop-sound.mp3", false); } + if (game.f.spritesheet == NULL) { + load_sprite_font(renderer, + "assets/Fonts/Peaberry-Font-v2.0/Peaberry Bitmap Fonts/1. WhitePeaberry/2. White Peaberry/WhitePeaberry.txt", + &game.f); + } + SDL_PropertiesID props = SDL_CreateProperties(); SDL_SetNumberProperty(props, MIX_PROP_PLAY_LOOPS_NUMBER, -1); MIX_PlayTrack(game.background_music_track, props); @@ -288,6 +297,7 @@ void init_timed_game(SDL_Renderer* renderer, MIX_Mixer* mixer, float time_remain } void free_game() { + free_sprite_font(&game.f); SDL_DestroyTexture(game.spritesheet); SDL_DestroyTexture(game.background_texture); MIX_DestroyTrack(game.background_music_track); @@ -637,6 +647,7 @@ void draw_game(SDL_Renderer* renderer) { draw_piece(renderer, selected_piece); } + draw_text_with_spritefont(renderer, &game.f, "Hello World!", 0, 0); SDL_RenderPresent(renderer); } -- cgit v1.2.3