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 PlayerLayer create_player_layer(Vec position, Color color)
13 return (PlayerLayer) {
15 .color_picker = create_color_picker_from_rgba(color),
19 PlayerLayer create_player_layer_from_line_stream(LineStream *line_stream)
21 trace_assert(line_stream);
23 const char *line = line_stream_next(line_stream);
26 char colorstr[7] = "000000";
27 Point position = vec(0.0f, 0.0f);
30 sscanf(line, "%f%f%6s", &position.x, &position.y, colorstr);
32 #define BOUND_EXPECTED 3
33 if (bound != BOUND_EXPECTED) {
34 log_fail("Could not read Player Layer properly. Parsed tokens: %d. Expected: %d\n",
35 bound, BOUND_EXPECTED);
39 return create_player_layer(position, hexstr(colorstr));
42 LayerPtr player_layer_as_layer(PlayerLayer *player_layer)
51 int player_layer_render(const PlayerLayer *player_layer,
55 trace_assert(player_layer);
61 player_layer->position,
64 color_picker_rgba(&player_layer->color_picker),
65 rgba(1.0f, 1.0f, 1.0f, active ? 1.0f : 0.5f))) < 0) {
69 if (active && color_picker_render(&player_layer->color_picker, camera)) {
77 int player_layer_event(PlayerLayer *player_layer,
78 const SDL_Event *event,
81 trace_assert(player_layer);
87 if (color_picker_event(
88 &player_layer->color_picker,
95 event->type == SDL_MOUSEBUTTONDOWN &&
96 event->button.button == SDL_BUTTON_LEFT) {
97 player_layer->position =
98 camera_map_screen(camera,
106 int player_layer_dump_stream(const PlayerLayer *player_layer,
109 trace_assert(player_layer);
110 trace_assert(filedump);
112 fprintf(filedump, "%f %f ", player_layer->position.x, player_layer->position.y);
113 color_hex_to_stream(color_picker_rgba(&player_layer->color_picker), filedump);
114 fprintf(filedump, "\n");