]> git.lizzy.rs Git - nothing.git/blobdiff - src/game/level_picker.c
Merge pull request #618 from tsoding/broadcast
[nothing.git] / src / game / level_picker.c
index b761ab3d2d4c3134394ac1582a0b20980ac79b9e..25ca2884b36368626fd259b4a4dcb806b4dc66a4 100644 (file)
@@ -4,10 +4,17 @@
 #include "system/stacktrace.h"
 #include "system/lt.h"
 #include "system/nth_alloc.h"
+#include "str.h"
+#include "game/level/background.h"
+
+/* TODO(#606): LevelPicker doesn't allow to select any levels */
 
 struct LevelPicker
 {
     Lt *lt;
+    const char *dirpath;
+    Background *background;
+    Vec camera_position;
 };
 
 LevelPicker *create_level_picker(const char *dirpath)
@@ -28,6 +35,24 @@ LevelPicker *create_level_picker(const char *dirpath)
     }
     level_picker->lt = lt;
 
+    level_picker->dirpath = PUSH_LT(
+        lt,
+        string_duplicate(dirpath, NULL),
+        free);
+    if (level_picker->dirpath == NULL) {
+        RETURN_LT(lt, NULL);
+    }
+
+    level_picker->background = PUSH_LT(
+        lt,
+        create_background(hexstr("073642")),
+        destroy_background);
+    if (level_picker->background == NULL) {
+        RETURN_LT(lt, NULL);
+    }
+
+    level_picker->camera_position = vec(0.0f, 0.0f);
+
     return level_picker;
 }
 
@@ -38,18 +63,27 @@ void destroy_level_picker(LevelPicker *level_picker)
 }
 
 int level_picker_render(const LevelPicker *level_picker,
+                        Camera *camera,
                         SDL_Renderer *renderer)
 {
     trace_assert(level_picker);
     trace_assert(renderer);
+
+    if (background_render(level_picker->background, camera) < 0) {
+        return -1;
+    }
+
     return 0;
 }
 
-int level_picker_update(LevelPicker *level,
+int level_picker_update(LevelPicker *level_picker,
                         float delta_time)
 {
-    trace_assert(level);
-    (void) delta_time;
+    trace_assert(level_picker);
+
+    vec_add(&level_picker->camera_position,
+            vec(50.0f * delta_time, 0.0f));
+
     return 0;
 }
 
@@ -73,10 +107,17 @@ int level_picker_input(LevelPicker *level_picker,
 const char *level_picker_selected_level(const LevelPicker *level_picker)
 {
     trace_assert(level_picker);
-    return NULL;
+    return level_picker->dirpath;
 }
 
 void level_picker_clean_selection(LevelPicker *level_picker)
 {
     trace_assert(level_picker);
 }
+
+int level_picker_enter_camera_event(LevelPicker *level_picker,
+                                    Camera *camera)
+{
+    camera_center_at(camera, level_picker->camera_position);
+    return 0;
+}