]> git.lizzy.rs Git - nothing.git/commitdiff
(#1067) Display death level in level editor
authorrexim <reximkut@gmail.com>
Mon, 23 Sep 2019 19:08:25 +0000 (02:08 +0700)
committerrexim <reximkut@gmail.com>
Mon, 23 Sep 2019 19:08:25 +0000 (02:08 +0700)
src/config.h [new file with mode: 0644]
src/game/camera.c
src/game/level/background.c
src/game/level/level_editor.c
src/game/level/player.c

diff --git a/src/config.h b/src/config.h
new file mode 100644 (file)
index 0000000..0b1ff9f
--- /dev/null
@@ -0,0 +1,10 @@
+#ifndef CONFIG_H_
+#define CONFIG_H_
+
+#define PLAYER_DEATH_LEVEL 1000.0f
+
+// TODO: LEVEL_EDITOR_DETH_LEVEL_COLOR is hardcoded
+//   Should be customizable in the Level Editor
+#define LEVEL_EDITOR_DETH_LEVEL_COLOR hsla(0.0f, 0.8f, 0.6f, 1.0f)
+
+#endif  // CONFIG_H_
index b42fde2a2f057e6bef95654f9e3b387c90742a79..97f9adfb0f7621acbe4d89b60322b83bc76a6d51 100644 (file)
@@ -263,13 +263,16 @@ Rect camera_view_port(const Camera *camera)
     SDL_Rect view_port;
     SDL_RenderGetViewport(camera->renderer, &view_port);
 
-    const Vec s = effective_scale(&view_port);
-    const float w = (float) view_port.w * s.x;
-    const float h = (float) view_port.h * s.y;
-
-    return rect(camera->position.x - w * 0.5f,
-                camera->position.y - h * 0.5f,
-                w, h);
+    Point p1 = camera_map_screen(
+        camera,
+        view_port.x,
+        view_port.y);
+    Point p2 = camera_map_screen(
+        camera,
+        view_port.x + view_port.w,
+        view_port.y + view_port.h);
+
+    return rect_from_points(p1, p2);
 }
 
 Rect camera_view_port_screen(const Camera *camera)
index 977c907992f2762aae37001859b2795581b00035..e592a7aa4bbec4c6ab786acca2c1f5c1ed22063b 100644 (file)
@@ -76,11 +76,15 @@ int background_render(const Background *background,
         return -1;
     }
 
+    // TODO: background rendering is broken
+    //   Broken by #1067
     const Rect view_port = camera_view_port(camera);
-    const Vec position = vec(view_port.x, view_port.y);
+    const Vec position = vec(
+        view_port.x - view_port.w * 0.5f,
+        view_port.y - view_port.h * 0.5f);
 
     for (int l = 0; l < 3; ++l) {
-        const float parallax = 1.0f - 0.2f * (float)l;
+        const float parallax = 1.0f - 0.2f * (float) l;
 
         int min_x = 0, min_y = 0;
         chunk_of_point(vec(view_port.x - position.x * parallax,
index 0d25850301171dbcefb6f3614aba4b3f87ec8a12..0c74a26f4e7729d9d93d6f0894a096fe1c702ba6 100644 (file)
@@ -16,6 +16,7 @@
 #include "system/lt_adapters.h"
 #include "system/log.h"
 #include "system/str.h"
+#include "config.h"
 
 #include "level_editor.h"
 
@@ -321,6 +322,19 @@ int level_editor_render(const LevelEditor *level_editor,
         return -1;
     }
 
+    const Rect world_viewport = camera_view_port(camera);
+
+    if (PLAYER_DEATH_LEVEL < world_viewport.y + world_viewport.h) {
+        if (camera_fill_rect(
+                camera,
+                rect(
+                    world_viewport.x, PLAYER_DEATH_LEVEL,
+                    world_viewport.w, world_viewport.h + fmaxf(0.0f, world_viewport.y - PLAYER_DEATH_LEVEL)),
+                LEVEL_EDITOR_DETH_LEVEL_COLOR) < 0) {
+            return -1;
+        }
+    }
+
     for (size_t i = 0; i < LAYER_PICKER_N; ++i) {
         if (layer_render(
                 level_editor->layers[i],
@@ -360,14 +374,14 @@ int level_editor_render(const LevelEditor *level_editor,
         }
     }
 
-    const Rect viewport = camera_view_port_screen(camera);
+    const Rect screen_viewport = camera_view_port_screen(camera);
     const Vec text_size = fading_wiggly_text_size(
         &level_editor->notice,
         camera);
 
     fading_wiggly_text_render(
         &level_editor->notice, camera,
-        vec(viewport.w * 0.5f - text_size.x * 0.5f,
+        vec(screen_viewport.w * 0.5f - text_size.x * 0.5f,
             LEVEL_EDITOR_NOTICE_PADDING_TOP));
 
     return 0;
index 8f93694692d4659325460ebd3e17cc5de443853b..7aac4052c9bb661e90bd9d6430e76a51a909ed32 100644 (file)
@@ -16,6 +16,7 @@
 #include "system/nth_alloc.h"
 #include "system/stacktrace.h"
 #include "ebisp/builtins.h"
+#include "config.h"
 
 #define PLAYER_WIDTH 25.0f
 #define PLAYER_HEIGHT 25.0f
@@ -142,7 +143,7 @@ void player_update(Player *player,
         const Rect hitbox = rigid_bodies_hitbox(player->rigid_bodies, player->alive_body_id);
 
 
-        if (hitbox.y > 1000.0f) {
+        if (hitbox.y > PLAYER_DEATH_LEVEL) {
             player_die(player);
         }
     } break;