#include "color.h"
#include "game/camera.h"
-typedef struct LineStream LineStream;
-
typedef struct {
Color base_color;
} Background;
typedef struct Boxes Boxes;
typedef struct Player Player;
-typedef struct LineStream LineStream;
typedef struct Player Player;
typedef struct RectLayer RectLayer;
float angle;
};
-Goals *create_goals_from_line_stream(LineStream *line_stream)
-{
- trace_assert(line_stream);
-
- Lt *lt = create_lt();
-
- Goals *const goals = PUSH_LT(lt, nth_calloc(1, sizeof(Goals)), free);
- if (goals == NULL) {
- RETURN_LT(lt, NULL);
- }
-
- goals->count = 0;
- if (sscanf(
- line_stream_next(line_stream),
- "%zu",
- &goals->count) == EOF) {
- log_fail("Could not read amount of goals\n");
- RETURN_LT(lt, NULL);
- }
-
- goals->ids = PUSH_LT(
- lt,
- nth_calloc(1, sizeof(char*) * goals->count),
- free);
- if (goals->ids == NULL) {
- RETURN_LT(lt, NULL);
- }
- for (size_t i = 0; i < goals->count; ++i) {
- goals->ids[i] = PUSH_LT(lt, nth_calloc(1, sizeof(char) * ENTITY_MAX_ID_SIZE), free);
- if (goals->ids[i] == NULL) {
- RETURN_LT(lt, NULL);
- }
- }
-
- goals->positions = PUSH_LT(lt, nth_calloc(1, sizeof(Vec2f) * goals->count), free);
- if (goals->positions == NULL) {
- RETURN_LT(lt, NULL);
- }
-
- goals->colors = PUSH_LT(lt, nth_calloc(1, sizeof(Color) * goals->count), free);
- if (goals->colors == NULL) {
- RETURN_LT(lt, NULL);
- }
-
- goals->cue_states = PUSH_LT(lt, nth_calloc(1, sizeof(int) * goals->count), free);
- if (goals->cue_states == NULL) {
- RETURN_LT(lt, NULL);
- }
-
- goals->visible = PUSH_LT(lt, nth_calloc(1, sizeof(bool) * goals->count), free);
- if (goals->visible == NULL) {
- RETURN_LT(lt, NULL);
- }
-
- char color[7];
- for (size_t i = 0; i < goals->count; ++i) {
- if (sscanf(
- line_stream_next(line_stream),
- "%" STRINGIFY(ENTITY_MAX_ID_SIZE) "s%f%f%6s",
- goals->ids[i],
- &goals->positions[i].x,
- &goals->positions[i].y,
- color) < 0) {
- log_fail("Could not read %dth goal\n", i);
- RETURN_LT(lt, NULL);
- }
- goals->colors[i] = hexstr(color);
- goals->cue_states[i] = CUE_STATE_VIRGIN;
- goals->visible[i] = true;
- }
-
- goals->lt = lt;
- goals->angle = 0.0f;
-
- return goals;
-}
-
Goals *create_goals_from_point_layer(const PointLayer *point_layer)
{
trace_assert(point_layer);
#include "config.h"
typedef struct Goals Goals;
-typedef struct LineStream LineStream;
typedef struct PointLayer PointLayer;
-Goals *create_goals_from_line_stream(LineStream *line_stream);
Goals *create_goals_from_point_layer(const PointLayer *point_layer);
void destroy_goals(Goals *goals);
enum LabelState *states;
};
-Labels *create_labels_from_line_stream(LineStream *line_stream)
-{
- trace_assert(line_stream);
-
- Lt *lt = create_lt();
-
- Labels * const labels = PUSH_LT(lt, nth_calloc(1, sizeof(Labels)), free);
- if (labels == NULL) {
- RETURN_LT(lt, NULL);
- }
- labels->lt = lt;
-
- if (sscanf(
- line_stream_next(line_stream),
- "%zu",
- &labels->count) == EOF) {
- log_fail("Could not read amount of labels\n");
- RETURN_LT(lt, NULL);
- }
-
- labels->ids = PUSH_LT(lt, nth_calloc(labels->count, sizeof(char) * ENTITY_MAX_ID_SIZE), free);
- if (labels->ids == NULL) {
- RETURN_LT(lt, NULL);
- }
-
- labels->positions = PUSH_LT(lt, nth_calloc(1, sizeof(Vec2f) * labels->count), free);
- if (labels->positions == NULL) {
- RETURN_LT(lt, NULL);
- }
-
- labels->colors = PUSH_LT(lt, nth_calloc(1, sizeof(Color) * labels->count), free);
- if (labels->colors == NULL) {
- RETURN_LT(lt, NULL);
- }
-
- labels->texts = PUSH_LT(lt, nth_calloc(1, sizeof(char*) * labels->count), free);
- if (labels->texts == NULL) {
- RETURN_LT(lt, NULL);
- }
-
- labels->alphas = PUSH_LT(lt, nth_calloc(1, sizeof(float) * labels->count), free);
- if (labels->alphas == NULL) {
- RETURN_LT(lt, NULL);
- }
-
- labels->delta_alphas = PUSH_LT(lt, nth_calloc(1, sizeof(float) * labels->count), free);
- if (labels->delta_alphas == NULL) {
- RETURN_LT(lt, NULL);
- }
-
- labels->states = PUSH_LT(lt, nth_calloc(1, sizeof(enum LabelState) * labels->count), free);
- if (labels->states == NULL) {
- RETURN_LT(lt, NULL);
- }
-
- char color[7];
- for (size_t i = 0; i < labels->count; ++i) {
- if (sscanf(
- line_stream_next(line_stream),
- "%" STRINGIFY(ENTITY_MAX_ID_SIZE) "s%f%f%6s\n",
- labels->ids + i * ENTITY_MAX_ID_SIZE,
- &labels->positions[i].x,
- &labels->positions[i].y,
- color) == EOF) {
- log_fail("Could not read position and color of %dth label\n", i);
- RETURN_LT(lt, NULL);
- }
-
- labels->colors[i] = hexstr(color);
-
- const char *label_text = line_stream_next(line_stream);
- if (label_text == NULL) {
- log_fail("Could not read text of %dth label\n", i);
- RETURN_LT(lt, NULL);
- }
-
- labels->texts[i] = PUSH_LT(
- lt,
- string_duplicate(label_text, NULL),
- free);
- if (labels->texts[i] == NULL) {
- RETURN_LT(lt, NULL);
- }
-
- trim_endline(labels->texts[i]);
- }
-
- return labels;
-}
-
Labels *create_labels_from_label_layer(const LabelLayer *label_layer)
{
trace_assert(label_layer);
#include "config.h"
typedef struct Labels Labels;
-typedef struct LineStream LineStream;
typedef struct LabelLayer LabelLayer;
-Labels *create_labels_from_line_stream(LineStream *line_stream);
Labels *create_labels_from_label_layer(const LabelLayer *label_layer);
void destroy_labels(Labels *label);
Wavy_rect **rects;
};
-Lava *create_lava_from_line_stream(LineStream *line_stream)
-{
- trace_assert(line_stream);
-
- Lt *lt = create_lt();
-
- Lava *lava = PUSH_LT(lt, nth_calloc(1, sizeof(Lava)), free);
- if (lava == NULL) {
- RETURN_LT(lt, NULL);
- }
-
- if (sscanf(
- line_stream_next(line_stream),
- "%zu",
- &lava->rects_count) < 0) {
- log_fail("Could not read amount of lava\n");
- RETURN_LT(lt, NULL);
- }
-
- lava->rects = PUSH_LT(lt, nth_calloc(1, sizeof(Wavy_rect*) * lava->rects_count), free);
- if (lava->rects == NULL) {
- RETURN_LT(lt, NULL);
- }
-
- for (size_t i = 0; i < lava->rects_count; ++i) {
- lava->rects[i] = PUSH_LT(lt, create_wavy_rect_from_line_stream(line_stream), destroy_wavy_rect);
- if (lava->rects[i] == NULL) {
- RETURN_LT(lt, NULL);
- }
- }
-
- lava->lt = lt;
-
- return lava;
-}
-
Lava *create_lava_from_rect_layer(const RectLayer *rect_layer)
{
Lt *lt = create_lt();
#include "math/rect.h"
typedef struct Lava Lava;
-typedef struct LineStream LineStream;
typedef struct RectLayer RectLayer;
-Lava *create_lava_from_line_stream(LineStream *line_stream);
Lava *create_lava_from_rect_layer(const RectLayer *rect_layer);
void destroy_lava(Lava *lava);
return wavy_rect;
}
-Wavy_rect *create_wavy_rect_from_line_stream(LineStream *line_stream)
-{
- trace_assert(line_stream);
- char color_name[7];
- Rect rect;
-
- if (sscanf(
- line_stream_next(line_stream),
- "%f%f%f%f%6s\n",
- &rect.x, &rect.y,
- &rect.w, &rect.h,
- color_name) < 0) {
- log_fail("Could not read a wavy rect\n");
- return NULL;
- }
-
- Color color = hexstr(color_name);
-
- return create_wavy_rect(rect, color);
-}
-
void destroy_wavy_rect(Wavy_rect *wavy_rect)
{
trace_assert(wavy_rect);
#include "math/rect.h"
typedef struct Wavy_rect Wavy_rect;
-typedef struct LineStream LineStream;
Wavy_rect *create_wavy_rect(Rect rect, Color color);
-Wavy_rect *create_wavy_rect_from_line_stream(LineStream *line_stream);
void destroy_wavy_rect(Wavy_rect *wavy_rect);
int wavy_rect_render(const Wavy_rect *wavy_rect,
#include "math/rect.h"
typedef struct Platforms Platforms;
-typedef struct LineStream LineStream;
typedef struct RectLayer RectLayer;
Platforms *create_platforms_from_rect_layer(const RectLayer *layer);
typedef struct Player Player;
typedef struct Goals Goals;
-typedef struct LineStream LineStream;
typedef struct RigidBodies RigidBodies;
Player *create_player_from_player_layer(const PlayerLayer *player_layer,
typedef struct Regions Regions;
typedef struct Player Player;
-typedef struct LineStream LineStream;
typedef struct Level Level;
typedef struct RectLayer RectLayer;
typedef struct Labels Labels;
typedef struct RigidBodies RigidBodies;
typedef struct Platforms Platforms;
-typedef struct LineStream LineStream;
typedef size_t RigidBodyId;