]> git.lizzy.rs Git - nothing.git/blobdiff - src/game/level/level_editor/layer.c
(#1139) Implement Move snap for Label Layer
[nothing.git] / src / game / level / level_editor / layer.c
index ea53dedb723c0a60845815f9e37a481a706e6ee8..1c3e1b8eefd5323a2c880187235c3f5eb3a12e43 100644 (file)
@@ -1,35 +1,78 @@
 #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;
 }