3 #include "math/point.h"
5 #include "./menu_title.h"
7 #include "system/stacktrace.h"
8 #include "system/nth_alloc.h"
9 #include "system/str.h"
10 #include "game/sprite_font.h"
17 const Sprite_font *sprite_font;
22 MenuTitle *create_menu_title(const char *text,
24 const Sprite_font *sprite_font)
30 MenuTitle *menu_title = PUSH_LT(
32 nth_calloc(1, sizeof(MenuTitle)),
34 if (menu_title == NULL) {
39 menu_title->text = PUSH_LT(
41 string_duplicate(text, NULL),
43 if (menu_title->text == NULL) {
47 menu_title->font_scale = font_scale;
48 menu_title->sprite_font = sprite_font;
49 menu_title->angle = 0.0f;
50 menu_title->position = vec(0.0f, 0.0f);
55 void destroy_menu_title(MenuTitle *menu_title)
57 trace_assert(menu_title);
58 RETURN_LT0(menu_title->lt);
61 int menu_title_render(const MenuTitle *menu_title,
62 SDL_Renderer *renderer)
64 trace_assert(menu_title);
65 trace_assert(renderer);
68 const size_t n = strlen(menu_title->text);
71 for (size_t i = 0; i < n; ++i) {
72 buf[0] = menu_title->text[i];
74 if (sprite_font_render_text(
75 menu_title->sprite_font,
80 (float) (i * FONT_CHAR_WIDTH) * menu_title->font_scale.x,
81 sinf(menu_title->angle + (float) i / (float) n * 10.0f) * 20.0f)),
82 menu_title->font_scale,
83 rgba(1.0f, 1.0f, 1.0f, 1.0f),
92 int menu_title_update(MenuTitle *menu_title, float delta_time)
94 trace_assert(menu_title);
95 menu_title->angle = fmodf(menu_title->angle + 10.0f * delta_time, 2 * PI);
99 Vec menu_title_size(const MenuTitle *menu_title)
101 trace_assert(menu_title);
103 Rect boundary = sprite_font_boundary_box(
104 menu_title->sprite_font,
106 menu_title->font_scale,
109 return vec(boundary.w, boundary.h);
112 void menu_title_move(MenuTitle *menu_title,
115 menu_title->position = position;