diff options
| author | Menase Teshale <osome3717@gmail.com> | 2026-08-27 01:30:08 +0300 |
|---|---|---|
| committer | Menase Teshale <osome3717@gmail.com> | 2026-08-27 01:30:08 +0300 |
| commit | 2f9c468eee85c53ade4791df7c1cd3e2512bee43 (patch) | |
| tree | 954d04e5d7fb959b6650fb3298247738aca7eca0 | |
| parent | bf502b35ec7f470fbd251e8c51c1e60f22f60dbd (diff) | |
Fonts working
- No scaling
- No rotation
| -rw-r--r-- | src/font.c | 38 | ||||
| -rw-r--r-- | src/font.h | 8 | ||||
| -rw-r--r-- | src/game.c | 11 |
3 files changed, 56 insertions, 1 deletions
@@ -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++; + } +} @@ -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_ @@ -3,6 +3,7 @@ #include <stdlib.h> #include <SDL3_mixer/SDL_mixer.h> #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); } |
