X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fgame%2Flevel%2Flevel_editor%2Flayer.c;h=1c3e1b8eefd5323a2c880187235c3f5eb3a12e43;hb=dfbfad94ef1d888cc4ca93b1fe6623b50d98273c;hp=bc858e6a669ad5bbcce2b28de2832f3c44f79f79;hpb=94061de6ca2450685edc2a3e1b7f2cd090448197;p=nothing.git diff --git a/src/game/level/level_editor/layer.c b/src/game/level/level_editor/layer.c index bc858e6a..1c3e1b8e 100644 --- a/src/game/level/level_editor/layer.c +++ b/src/game/level/level_editor/layer.c @@ -1,88 +1,78 @@ #include "game/camera.h" -#include "system/lt.h" -#include "system/stacktrace.h" -#include "system/nth_alloc.h" -#include "system/log.h" -#include "math/rect.h" -#include "color.h" -#include "layer.h" -#include "dynarray.h" - -struct Layer { - Lt *lt; - Dynarray *rects; - Dynarray *colors; -}; - -Layer *create_layer(void) +#include "rect_layer.h" +#include "point_layer.h" +#include "player_layer.h" +#include "label_layer.h" +#include "background_layer.h" +#include "./layer.h" + +int layer_render(LayerPtr layer, const Camera *camera, int active) { - Lt *lt = create_lt(); - if (lt == NULL) { - return NULL; - } + switch (layer.type) { + case LAYER_RECT: + return rect_layer_render(layer.ptr, camera, active); - Layer *layer = PUSH_LT(lt, nth_alloc(sizeof(Layer)), free); - if (layer == NULL) { - RETURN_LT(lt, NULL); - } - layer->lt = lt; - - layer->rects = PUSH_LT( - lt, - create_dynarray(sizeof(Rect)), - destroy_dynarray); - if (layer->rects == NULL) { - RETURN_LT(lt, NULL); - } + case LAYER_POINT: + return point_layer_render(layer.ptr, camera, active); - layer->colors = PUSH_LT( - lt, - create_dynarray(sizeof(Color)), - destroy_dynarray); - if (layer->colors == NULL) { - RETURN_LT(lt, NULL); - } + case LAYER_PLAYER: + return player_layer_render(layer.ptr, camera, active); - trace_assert(layer); + case LAYER_BACKGROUND: + return background_layer_render(layer.ptr, camera, active); - return layer; -} + case LAYER_LABEL: + return label_layer_render(layer.ptr, camera, active); + } -void destroy_layer(Layer *layer) -{ - trace_assert(layer); - RETURN_LT0(layer->lt); + return -1; } -int layer_render(const Layer *layer, Camera *camera) +int layer_event(LayerPtr layer, + const SDL_Event *event, + const Camera *camera, + UndoHistory *undo_history) { - trace_assert(layer); - trace_assert(camera); - return 0; -} + switch (layer.type) { + case LAYER_RECT: + return rect_layer_event(layer.ptr, event, camera, undo_history); -int layer_event(Layer *layer, const SDL_Event *event) -{ - trace_assert(layer); - trace_assert(event); - return 0; -} + case LAYER_POINT: + return point_layer_event(layer.ptr, event, camera, undo_history); -// TODO: layer_add_rect is not implemented -int layer_add_rect(Layer *layer, Rect rect, Color color) -{ - trace_assert(layer); - (void) rect; - (void) color; + case LAYER_PLAYER: + return player_layer_event(layer.ptr, event, camera, undo_history); + + case LAYER_BACKGROUND: + return background_layer_event(layer.ptr, event, camera, undo_history); - return 0; + case LAYER_LABEL: + return label_layer_event(layer.ptr, event, camera, undo_history); + } + + return -1; } -// TODO: layer_delete_rect_at is not implemented -int layer_delete_rect_at(Layer *layer, Vec position) +int layer_dump_stream(LayerPtr layer, + FILE *stream) { - trace_assert(layer); - (void) position; + switch (layer.type) { + case LAYER_RECT: + return rect_layer_dump_stream(layer.ptr, stream); + + case LAYER_POINT: + return point_layer_dump_stream(layer.ptr, stream); + + case LAYER_PLAYER: + return player_layer_dump_stream(layer.ptr, stream); + + case LAYER_BACKGROUND: { + return background_layer_dump_stream(layer.ptr, stream); + } + + case LAYER_LABEL: + return label_layer_dump_stream(layer.ptr, stream); + } - return 0; + return -1; }