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;
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,
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,
return -1;
}
- if (platforms_render(level->back_platforms, camera) < 0) {
+ if (platforms_render(&level->back_platforms, camera) < 0) {
return -1;
}
return -1;
}
- if (platforms_render(level->platforms, camera) < 0) {
+ if (platforms_render(&level->platforms, camera) < 0) {
return -1;
}
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);
#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,
#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);
#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;