]> git.lizzy.rs Git - nothing.git/blobdiff - src/game/level_picker.c
nothing now compiles on freebsd
[nothing.git] / src / game / level_picker.c
index 0bb4327f85d5d9ca938adbf9c8befb035bc33d44..ac3c78ed369f347096760869942d90eeb391400d 100644 (file)
 #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;
 };
 
@@ -37,13 +41,7 @@ LevelPicker *create_level_picker(const Sprite_font *sprite_font, const char *dir
     }
     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);
 
@@ -55,13 +53,11 @@ LevelPicker *create_level_picker(const Sprite_font *sprite_font, const char *dir
         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,
@@ -86,31 +82,34 @@ void destroy_level_picker(LevelPicker *level_picker)
 }
 
 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(
@@ -135,14 +134,16 @@ int level_picker_update(LevelPicker *level_picker,
     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);
@@ -152,21 +153,15 @@ int level_picker_event(LevelPicker *level_picker, const SDL_Event *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);
@@ -174,7 +169,7 @@ int level_picker_event(LevelPicker *level_picker, const SDL_Event *event)
             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;