Make platforms a transparent entity

master
rexim 2020-01-26 00:01:50 +07:00
parent 6793a7879c
commit af2244518b
4 changed files with 33 additions and 58 deletions

View 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);

View File

@ -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,

View 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);

View 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;