]> git.lizzy.rs Git - nothing.git/blobdiff - src/game/level/level_editor/player_layer.c
Implement chop_player_layer
[nothing.git] / src / game / level / level_editor / player_layer.c
index 2cfc4f75169c7eacbc1d62a3bc62226b052dda09..f3c312fe12206034a8ae944c7d85c1e551213320 100644 (file)
@@ -8,17 +8,18 @@
 #include "system/nth_alloc.h"
 #include "system/log.h"
 #include "undo_history.h"
+#include "system/memory.h"
 
 typedef struct {
     PlayerLayer *layer;
-    Point position;
+    Vec2f position;
     Color color;
-} UndoContext;
+} PlayerUndoContext;
 
 static
-UndoContext player_layer_create_undo_context(PlayerLayer *player_layer)
+PlayerUndoContext player_layer_create_undo_context(PlayerLayer *player_layer)
 {
-    UndoContext context = {
+    PlayerUndoContext context = {
         .layer = player_layer,
         .position = player_layer->position,
         .color = player_layer->prev_color
@@ -31,9 +32,9 @@ static
 void player_layer_undo(void *context, size_t context_size)
 {
     trace_assert(context);
-    trace_assert(sizeof(UndoContext) == context_size);
+    trace_assert(sizeof(PlayerUndoContext) == context_size);
 
-    UndoContext *undo_context = context;
+    PlayerUndoContext *undo_context = context;
     PlayerLayer *player_layer = undo_context->layer;
 
     player_layer->position = undo_context->position;
@@ -41,7 +42,7 @@ void player_layer_undo(void *context, size_t context_size)
     player_layer->prev_color = undo_context->color;
 }
 
-PlayerLayer create_player_layer(Vec position, Color color)
+PlayerLayer create_player_layer(Vec2f position, Color color)
 {
     return (PlayerLayer) {
         .position = position,
@@ -58,7 +59,7 @@ PlayerLayer create_player_layer_from_line_stream(LineStream *line_stream)
     trace_assert(line);
 
     char colorstr[7] = "000000";
-    Point position = vec(0.0f, 0.0f);
+    Vec2f position = vec(0.0f, 0.0f);
 
     const int bound =
         sscanf(line, "%f%f%6s", &position.x, &position.y, colorstr);
@@ -73,6 +74,19 @@ PlayerLayer create_player_layer_from_line_stream(LineStream *line_stream)
     return create_player_layer(position, hexstr(colorstr));
 }
 
+PlayerLayer chop_player_layer(Memory *memory, String *input)
+{
+    trace_assert(memory);
+    trace_assert(input);
+
+    String line = chop_by_delim(input, '\n');
+    float x = strtof(string_to_cstr(memory, chop_word(&line)), NULL);
+    float y = strtof(string_to_cstr(memory, chop_word(&line)), NULL);
+    Color color = hexs(chop_word(&line));
+
+    return create_player_layer(vec(x, y), color);
+}
+
 LayerPtr player_layer_as_layer(PlayerLayer *player_layer)
 {
     LayerPtr layer = {
@@ -83,7 +97,7 @@ LayerPtr player_layer_as_layer(PlayerLayer *player_layer)
 }
 
 int player_layer_render(const PlayerLayer *player_layer,
-                        Camera *camera,
+                        const Camera *camera,
                         int active)
 {
     trace_assert(player_layer);
@@ -129,7 +143,7 @@ int player_layer_event(PlayerLayer *player_layer,
     }
 
     if (selected && !color_picker_drag(&player_layer->color_picker)) {
-        UndoContext context =
+        PlayerUndoContext context =
             player_layer_create_undo_context(player_layer);
         undo_history_push(
             undo_history,
@@ -143,7 +157,7 @@ int player_layer_event(PlayerLayer *player_layer,
         event->type == SDL_MOUSEBUTTONDOWN &&
         event->button.button == SDL_BUTTON_LEFT) {
 
-        UndoContext context =
+        PlayerUndoContext context =
             player_layer_create_undo_context(player_layer);
 
         undo_history_push(