]> git.lizzy.rs Git - nothing.git/commitdiff
Make platforms a transparent entity
authorrexim <reximkut@gmail.com>
Sat, 25 Jan 2020 17:01:50 +0000 (00:01 +0700)
committerrexim <reximkut@gmail.com>
Sat, 25 Jan 2020 17:01:50 +0000 (00:01 +0700)
src/game/level.c
src/game/level/platforms.c
src/game/level/platforms.h
src/game/level/rigid_bodies.h

index eeb5b65478b93c2a4145b50a22b23eddec18bd23..433b8a5097e4008e1b0f910a4b80c0a97c60fafd 100644 (file)
@@ -41,10 +41,10 @@ struct Level
     Background background;
     RigidBodies *rigid_bodies;
     Player *player;
-    Platforms *platforms;
+    Platforms platforms;
     Goals *goals;
     Lava *lava;
-    Platforms *back_platforms;
+    Platforms back_platforms;
     Boxes *boxes;
     Labels *labels;
     Regions *regions;
@@ -84,13 +84,7 @@ Level *create_level_from_level_editor(const LevelEditor *level_editor)
         RETURN_LT(lt, NULL);
     }
 
-    level->platforms = PUSH_LT(
-        lt,
-        create_platforms_from_rect_layer(level_editor->platforms_layer),
-        destroy_platforms);
-    if (level->platforms == NULL) {
-        RETURN_LT(lt, NULL);
-    }
+    level->platforms = create_platforms_from_rect_layer(level_editor->platforms_layer);
 
     level->goals = PUSH_LT(
         lt,
@@ -108,13 +102,8 @@ Level *create_level_from_level_editor(const LevelEditor *level_editor)
         RETURN_LT(lt, NULL);
     }
 
-    level->back_platforms = PUSH_LT(
-        lt,
-        create_platforms_from_rect_layer(level_editor->back_platforms_layer),
-        destroy_platforms);
-    if (level->back_platforms == NULL) {
-        RETURN_LT(lt, NULL);
-    }
+    level->back_platforms =
+        create_platforms_from_rect_layer(level_editor->back_platforms_layer);
 
     level->boxes = PUSH_LT(
         lt,
@@ -160,7 +149,7 @@ int level_render(const Level *level, const Camera *camera)
         return -1;
     }
 
-    if (platforms_render(level->back_platforms, camera) < 0) {
+    if (platforms_render(&level->back_platforms, camera) < 0) {
         return -1;
     }
 
@@ -176,7 +165,7 @@ int level_render(const Level *level, const Camera *camera)
         return -1;
     }
 
-    if (platforms_render(level->platforms, camera) < 0) {
+    if (platforms_render(&level->platforms, camera) < 0) {
         return -1;
     }
 
@@ -210,7 +199,7 @@ int level_update(Level *level, float delta_time)
     boxes_update(level->boxes, delta_time);
     player_update(level->player, delta_time);
 
-    rigid_bodies_collide(level->rigid_bodies, level->platforms);
+    rigid_bodies_collide(level->rigid_bodies, &level->platforms);
 
     player_die_from_lava(level->player, level->lava);
     regions_player_enter(level->regions, level->player);
index 67b552ff874ecec977c6cfc81ef153acbaab5f82..460e77d712115d2c39ac029f5c509d8eb62607a9 100644 (file)
 #include "game/level/level_editor/rect_layer.h"
 #include "math/extrema.h"
 
-struct Platforms {
-    Lt *lt;
-
-    Rect *rects;
-    Color *colors;
-    size_t rects_size;
-};
-
-Platforms *create_platforms_from_rect_layer(const RectLayer *layer)
+Platforms create_platforms_from_rect_layer(const RectLayer *layer)
 {
     trace_assert(layer);
 
-    Lt *lt = create_lt();
+    Platforms platforms = {0};
+    platforms.rects_size = rect_layer_count(layer);
 
-    Platforms *platforms = PUSH_LT(
-        lt,
-        nth_calloc(1, sizeof(Platforms)),
-        free);
-    if (platforms == NULL) {
-        RETURN_LT(lt, NULL);
-    }
-    platforms->lt = lt;
+    platforms.rects = nth_calloc(1, sizeof(Rect) * platforms.rects_size);
+    memcpy(
+        platforms.rects,
+        rect_layer_rects(layer),
+        sizeof(Rect) * platforms.rects_size);
 
-    platforms->rects_size = rect_layer_count(layer);
-
-    platforms->rects = PUSH_LT(lt, nth_calloc(1, sizeof(Rect) * platforms->rects_size), free);
-    if (platforms->rects == NULL) {
-        RETURN_LT(lt, NULL);
-    }
-    memcpy(platforms->rects, rect_layer_rects(layer), sizeof(Rect) * platforms->rects_size);
-
-
-    platforms->colors = PUSH_LT(lt, nth_calloc(1, sizeof(Color) * platforms->rects_size), free);
-    if (platforms->colors == NULL) {
-        RETURN_LT(lt, NULL);
-    }
-    memcpy(platforms->colors, rect_layer_colors(layer), sizeof(Color) * platforms->rects_size);
+    platforms.colors = nth_calloc(1, sizeof(Color) * platforms.rects_size);
+    memcpy(
+        platforms.colors,
+        rect_layer_colors(layer),
+        sizeof(Color) * platforms.rects_size);
 
     return platforms;
 }
 
-void destroy_platforms(Platforms *platforms)
+void destroy_platforms(Platforms platforms)
 {
-    trace_assert(platforms);
-    RETURN_LT0(platforms->lt);
+    free(platforms.rects);
+    free(platforms.colors);
 }
 
 int platforms_render(const Platforms *platforms,
index a3c8cb57b6d43436f4010daa571c7938bc66625b..112e98ee5283d8d00f5b79d4c0c137be2899b00c 100644 (file)
@@ -6,11 +6,16 @@
 #include "game/camera.h"
 #include "math/rect.h"
 
-typedef struct Platforms Platforms;
 typedef struct RectLayer RectLayer;
 
-Platforms *create_platforms_from_rect_layer(const RectLayer *layer);
-void destroy_platforms(Platforms *platforms);
+typedef struct {
+    Rect *rects;
+    Color *colors;
+    size_t rects_size;
+} Platforms;
+
+Platforms create_platforms_from_rect_layer(const RectLayer *layer);
+void destroy_platforms(Platforms platforms);
 
 int platforms_render(const Platforms *platforms,
                      const Camera *camera);
index 8d18bea8c1a1e823ccc69b8c050510288e5e80d4..3f03d2d1fa660ae89ddd380d1fea3ce8ae2975e9 100644 (file)
@@ -2,9 +2,9 @@
 #define RIGID_BODIES_H_
 
 #include "math/mat3x3.h"
+#include "game/level/platforms.h"
 
 typedef struct RigidBodies RigidBodies;
-typedef struct Platforms Platforms;
 
 typedef size_t RigidBodyId;