#include "ui/list_selector.h"
#include "system/log.h"
#include "game/level_folder.h"
-#include "ui/menu_title.h"
+#include "ui/wiggly_text.h"
+#include "ui/slider.h"
+
+#define TITLE_MARGIN_TOP 100.0f
+#define TITLE_MARGIN_BOTTOM 100.0f
struct LevelPicker
{
Lt *lt;
- Background *background;
- Vec camera_position;
+ Background background;
+ Vec2f camera_position;
LevelFolder *level_folder;
- MenuTitle *menu_title;
+ WigglyText wiggly_text;
ListSelector *list_selector;
};
}
level_picker->lt = lt;
- level_picker->background = PUSH_LT(
- lt,
- create_background(hexstr("073642")),
- destroy_background);
- if (level_picker->background == NULL) {
- RETURN_LT(lt, NULL);
- }
+ level_picker->background = create_background(hexstr("073642"));
level_picker->camera_position = vec(0.0f, 0.0f);
RETURN_LT(lt, NULL);
}
- level_picker->menu_title = PUSH_LT(
- lt,
- create_menu_title("Select Level", vec(10.0f, 10.0f), sprite_font),
- destroy_menu_title);
- if (level_picker->menu_title == NULL) {
- RETURN_LT(lt, NULL);
- }
+ level_picker->wiggly_text = (WigglyText) {
+ .text = "Select Level",
+ .scale = {10.0f, 10.0f},
+ .color = COLOR_WHITE,
+ };
level_picker->list_selector = PUSH_LT(
lt,
}
int level_picker_render(const LevelPicker *level_picker,
- Camera *camera,
- SDL_Renderer *renderer)
+ const Camera *camera)
{
trace_assert(level_picker);
- trace_assert(renderer);
const Rect viewport = camera_view_port_screen(camera);
- if (background_render(level_picker->background, camera) < 0) {
+ if (background_render(&level_picker->background, camera) < 0) {
return -1;
}
- if (menu_title_render(level_picker->menu_title, renderer) < 0) {
+ const Vec2f title_size = wiggly_text_size(&level_picker->wiggly_text, camera);
+
+ if (wiggly_text_render(
+ &level_picker->wiggly_text,
+ camera,
+ vec(viewport.w * 0.5f - title_size.x * 0.5f, TITLE_MARGIN_TOP)) < 0) {
return -1;
}
- if (list_selector_render(level_picker->list_selector, renderer) < 0) {
+ if (list_selector_render(level_picker->list_selector, camera->renderer) < 0) {
return -1;
}
{
/* CSS */
const float padding = 20.0f;
- const Point size = vec(3.0f, 3.0f);
- const Point position = vec(0.0f, viewport.h - size.y * FONT_CHAR_HEIGHT);
+ const Vec2f size = vec(3.0f, 3.0f);
+ const Vec2f position = vec(0.0f, viewport.h - size.y * FONT_CHAR_HEIGHT);
/* HTML */
if (camera_render_text_screen(
vec_add(&level_picker->camera_position,
vec(50.0f * delta_time, 0.0f));
- if (menu_title_update(level_picker->menu_title, delta_time) < 0) {
+ if (wiggly_text_update(&level_picker->wiggly_text, delta_time) < 0) {
return -1;
}
return 0;
}
-int level_picker_event(LevelPicker *level_picker, const SDL_Event *event)
+int level_picker_event(LevelPicker *level_picker,
+ const SDL_Event *event,
+ const Camera *camera)
{
trace_assert(level_picker);
trace_assert(event);
switch (event->window.event) {
case SDL_WINDOWEVENT_SHOWN:
case SDL_WINDOWEVENT_RESIZED: {
- const Vec font_scale = vec(5.0f, 5.0f);
+ const Vec2f font_scale = vec(5.0f, 5.0f);
const float padding_bottom = 50.0f;
int width;
SDL_GetWindowSize(SDL_GetWindowFromID(event->window.windowID), &width, NULL);
- const Vec title_size = menu_title_size(level_picker->menu_title);
- const float title_margin_top = 100.0f;
- const float title_margin_bottom = 100.0f;
-
- menu_title_move(
- level_picker->menu_title,
- vec((float)width * 0.5f - title_size.x * 0.5f, title_margin_top));
+ const Vec2f title_size = wiggly_text_size(&level_picker->wiggly_text, camera);
- const Vec selector_size = list_selector_size(
+ const Vec2f selector_size = list_selector_size(
level_picker->list_selector,
font_scale,
padding_bottom);
list_selector_move(
level_picker->list_selector,
vec((float)width * 0.5f - selector_size.x * 0.5f,
- title_margin_top + title_size.y + title_margin_bottom));
+ TITLE_MARGIN_TOP + title_size.y + TITLE_MARGIN_BOTTOM));
} break;
}
} break;