5 #include "game/camera.h"
6 #include "system/stacktrace.h"
7 #include "player_layer.h"
8 #include "system/nth_alloc.h"
9 #include "system/log.h"
10 #include "undo_history.h"
12 PlayerLayer create_player_layer(Vec position, Color color)
14 return (PlayerLayer) {
16 .color_picker = create_color_picker_from_rgba(color)
20 PlayerLayer create_player_layer_from_line_stream(LineStream *line_stream)
22 trace_assert(line_stream);
24 const char *line = line_stream_next(line_stream);
27 char colorstr[7] = "000000";
28 Point position = vec(0.0f, 0.0f);
31 sscanf(line, "%f%f%6s", &position.x, &position.y, colorstr);
33 #define BOUND_EXPECTED 3
34 if (bound != BOUND_EXPECTED) {
35 log_fail("Could not read Player Layer properly. Parsed tokens: %d. Expected: %d\n",
36 bound, BOUND_EXPECTED);
40 return create_player_layer(position, hexstr(colorstr));
43 LayerPtr player_layer_as_layer(PlayerLayer *player_layer)
52 int player_layer_render(const PlayerLayer *player_layer,
56 trace_assert(player_layer);
62 player_layer->position,
65 color_picker_rgba(&player_layer->color_picker),
66 rgba(1.0f, 1.0f, 1.0f, active ? 1.0f : 0.5f))) < 0) {
70 if (active && color_picker_render(
71 &player_layer->color_picker,
79 static void player_layer_revert_position(void *layer, Context context)
83 PlayerLayer *player_layer = layer;
84 player_layer->position = *((Point*)context.data);
87 // TODO(#1013): PlayerLayer does not support undo color
89 int player_layer_event(PlayerLayer *player_layer,
90 const SDL_Event *event,
92 UndoHistory *undo_history)
94 trace_assert(player_layer);
97 trace_assert(undo_history);
100 if (color_picker_event(
101 &player_layer->color_picker,
109 event->type == SDL_MOUSEBUTTONDOWN &&
110 event->button.button == SDL_BUTTON_LEFT) {
112 .layer = player_layer,
113 .revert = player_layer_revert_position
115 trace_assert(sizeof(player_layer->position) <= CONTEXT_SIZE);
116 memcpy(action.context.data, &player_layer->position, sizeof(player_layer->position));
117 undo_history_push(undo_history, action);
119 player_layer->position =
120 camera_map_screen(camera,
128 int player_layer_dump_stream(const PlayerLayer *player_layer,
131 trace_assert(player_layer);
132 trace_assert(filedump);
134 fprintf(filedump, "%f %f ", player_layer->position.x, player_layer->position.y);
135 color_hex_to_stream(color_picker_rgba(&player_layer->color_picker), filedump);
136 fprintf(filedump, "\n");