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_from_line_stream(LineStream *line_stream)
13 trace_assert(line_stream);
17 PlayerLayer *player_layer = PUSH_LT(lt, nth_calloc(1, sizeof(PlayerLayer)), free);
18 player_layer->lt = lt;
22 const char *line = line_stream_next(line_stream);
24 log_fail("Could not read Player Layer\n");
30 &player_layer->position.x,
31 &player_layer->position.y,
33 log_fail("Could not read Player Layer\n");
36 player_layer->color_picker.color = hexstr(colorstr);
38 line = line_stream_next(line_stream);
40 log_fail("Could not read Player Layer\n");
45 if (sscanf(line, "%lu", &n) == EOF) {
46 log_fail("Could not read Player Layer\n");
50 player_layer->source_code = PUSH_LT(
51 lt, line_stream_collect_n_lines(line_stream, n), free);
52 if (player_layer->source_code == NULL) {
53 log_fail("Could not read Player Layer\n");
60 void destroy_player_layer(PlayerLayer *player_layer)
62 trace_assert(player_layer);
63 destroy_lt(player_layer->lt);
66 LayerPtr player_layer_as_layer(PlayerLayer *player_layer)
75 int player_layer_render(const PlayerLayer *player_layer,
79 trace_assert(player_layer);
85 player_layer->position,
88 player_layer->color_picker.color,
89 rgba(1.0f, 1.0f, 1.0f, fa))) < 0) {
96 // TODO(#859): PlayerLayer does not allow to change to position of the Player
98 int player_layer_event(PlayerLayer *player_layer,
99 const SDL_Event *event,
100 const Camera *camera)
102 trace_assert(player_layer);
104 trace_assert(camera);
106 switch (event->type) {
107 case SDL_MOUSEBUTTONDOWN:
108 case SDL_MOUSEBUTTONUP: {
109 bool selected = false;
110 if (color_picker_mouse_button(
111 &player_layer->color_picker,
118 event->type == SDL_MOUSEBUTTONUP &&
119 event->button.button == SDL_BUTTON_LEFT) {
120 player_layer->position =
121 camera_map_screen(camera,