#include "game/camera.h"
-#include "system/lt.h"
-#include "system/stacktrace.h"
-#include "layer.h"
-#include "dynarray.h"
-
-struct Layer {
- Lt *lt;
- Dynarray *rects;
- Dynarray *colors;
-};
-
-Layer *create_layer(void)
-{
- return NULL;
-}
+#include "rect_layer.h"
+#include "point_layer.h"
+#include "player_layer.h"
+#include "label_layer.h"
+#include "background_layer.h"
+#include "./layer.h"
-void destroy_layer(Layer *layer)
+int layer_render(LayerPtr layer, const Camera *camera, int active)
{
- trace_assert(layer);
+ switch (layer.type) {
+ case LAYER_RECT:
+ return rect_layer_render(layer.ptr, camera, active);
+
+ case LAYER_POINT:
+ return point_layer_render(layer.ptr, camera, active);
+
+ case LAYER_PLAYER:
+ return player_layer_render(layer.ptr, camera, active);
+
+ case LAYER_BACKGROUND:
+ return background_layer_render(layer.ptr, camera, active);
+
+ case LAYER_LABEL:
+ return label_layer_render(layer.ptr, camera, active);
+ }
+
+ 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);
+
+ case LAYER_POINT:
+ return point_layer_event(layer.ptr, event, camera, undo_history);
+
+ 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);
+
+ case LAYER_LABEL:
+ return label_layer_event(layer.ptr, event, camera, undo_history);
+ }
+
+ return -1;
}
-int layer_event(Layer *layer, const SDL_Event *event)
+int layer_dump_stream(LayerPtr layer,
+ FILE *stream)
{
- trace_assert(layer);
- trace_assert(event);
- return 0;
+ 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 -1;
}