summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMenase Teshale <osome3717@gmail.com>2026-08-27 01:30:08 +0300
committerMenase Teshale <osome3717@gmail.com>2026-08-27 01:30:08 +0300
commit2f9c468eee85c53ade4791df7c1cd3e2512bee43 (patch)
tree954d04e5d7fb959b6650fb3298247738aca7eca0
parentbf502b35ec7f470fbd251e8c51c1e60f22f60dbd (diff)
Fonts working
- No scaling - No rotation
-rw-r--r--src/font.c38
-rw-r--r--src/font.h8
-rw-r--r--src/game.c11
3 files changed, 56 insertions, 1 deletions
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 <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);
}