From af2244518b05095825e10fc155208e0331a08a36 Mon Sep 17 00:00:00 2001 From: rexim Date: Sun, 26 Jan 2020 00:01:50 +0700 Subject: [PATCH] Make platforms a transparent entity --- src/game/level.c | 27 ++++++------------- src/game/level/platforms.c | 51 +++++++++++------------------------ src/game/level/platforms.h | 11 +++++--- src/game/level/rigid_bodies.h | 2 +- 4 files changed, 33 insertions(+), 58 deletions(-) diff --git a/src/game/level.c b/src/game/level.c index eeb5b654..433b8a50 100644 --- a/src/game/level.c +++ b/src/game/level.c @@ -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); diff --git a/src/game/level/platforms.c b/src/game/level/platforms.c index 67b552ff..460e77d7 100644 --- a/src/game/level/platforms.c +++ b/src/game/level/platforms.c @@ -12,51 +12,32 @@ #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, diff --git a/src/game/level/platforms.h b/src/game/level/platforms.h index a3c8cb57..112e98ee 100644 --- a/src/game/level/platforms.h +++ b/src/game/level/platforms.h @@ -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); diff --git a/src/game/level/rigid_bodies.h b/src/game/level/rigid_bodies.h index 8d18bea8..3f03d2d1 100644 --- a/src/game/level/rigid_bodies.h +++ b/src/game/level/rigid_bodies.h @@ -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; -- 2.44.0