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"
11 // TODO(#1001): PlayerLayer does not support UndoHistory
13 PlayerLayer create_player_layer(Vec position, Color color)
15 return (PlayerLayer) {
17 .color_picker = create_color_picker_from_rgba(color),
21 PlayerLayer create_player_layer_from_line_stream(LineStream *line_stream)
23 trace_assert(line_stream);
25 const char *line = line_stream_next(line_stream);
28 char colorstr[7] = "000000";
29 Point position = vec(0.0f, 0.0f);
32 sscanf(line, "%f%f%6s", &position.x, &position.y, colorstr);
34 #define BOUND_EXPECTED 3
35 if (bound != BOUND_EXPECTED) {
36 log_fail("Could not read Player Layer properly. Parsed tokens: %d. Expected: %d\n",
37 bound, BOUND_EXPECTED);
41 return create_player_layer(position, hexstr(colorstr));
44 LayerPtr player_layer_as_layer(PlayerLayer *player_layer)
53 int player_layer_render(const PlayerLayer *player_layer,
57 trace_assert(player_layer);
63 player_layer->position,
66 color_picker_rgba(&player_layer->color_picker),
67 rgba(1.0f, 1.0f, 1.0f, active ? 1.0f : 0.5f))) < 0) {
71 if (active && color_picker_render(&player_layer->color_picker, camera)) {
79 int player_layer_event(PlayerLayer *player_layer,
80 const SDL_Event *event,
82 UndoHistory *undo_history)
84 trace_assert(player_layer);
87 trace_assert(undo_history);
90 if (color_picker_event(
91 &player_layer->color_picker,
98 event->type == SDL_MOUSEBUTTONDOWN &&
99 event->button.button == SDL_BUTTON_LEFT) {
100 player_layer->position =
101 camera_map_screen(camera,
109 int player_layer_dump_stream(const PlayerLayer *player_layer,
112 trace_assert(player_layer);
113 trace_assert(filedump);
115 fprintf(filedump, "%f %f ", player_layer->position.x, player_layer->position.y);
116 color_hex_to_stream(color_picker_rgba(&player_layer->color_picker), filedump);
117 fprintf(filedump, "\n");