X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fgame%2Flevel%2Flevel_editor%2Fplayer_layer.c;h=37955e1d857d40ea8fc647ccfb8f4dc1ded9ba5a;hb=1972913dd86216c3a501a35769324e2bc3e911bf;hp=2ef4124d12655dfe9c77312fabc1e80963511a86;hpb=0e96c7f648479e749ce8b0c9f525b2d21b6d20ad;p=nothing.git diff --git a/src/game/level/level_editor/player_layer.c b/src/game/level/level_editor/player_layer.c index 2ef4124d..37955e1d 100644 --- a/src/game/level/level_editor/player_layer.c +++ b/src/game/level/level_editor/player_layer.c @@ -8,40 +8,35 @@ #include "system/nth_alloc.h" #include "system/log.h" -PlayerLayer *create_player_layer_from_line_stream(LineStream *line_stream) +PlayerLayer create_player_layer(Vec position, Color color) +{ + return (PlayerLayer) { + .position = position, + .color_picker = create_color_picker_from_rgba(color), + }; +} + +PlayerLayer create_player_layer_from_line_stream(LineStream *line_stream) { trace_assert(line_stream); - Lt *lt = create_lt(); + const char *line = line_stream_next(line_stream); + trace_assert(line); - PlayerLayer *player_layer = PUSH_LT(lt, nth_calloc(1, sizeof(PlayerLayer)), free); - player_layer->lt = lt; + char colorstr[7] = "000000"; + Point position = vec(0.0f, 0.0f); - char colorstr[7]; + const int bound = + sscanf(line, "%f%f%6s", &position.x, &position.y, colorstr); - const char *line = line_stream_next(line_stream); - if (line == NULL) { - log_fail("Could not read Player Layer\n"); - RETURN_LT(lt, NULL); +#define BOUND_EXPECTED 3 + if (bound != BOUND_EXPECTED) { + log_fail("Could not read Player Layer properly. Parsed tokens: %d. Expected: %d\n", + bound, BOUND_EXPECTED); } +#undef BOUND_EXPECTED - if (sscanf(line, - "%f%f%6s", - &player_layer->position.x, - &player_layer->position.y, - colorstr) == EOF) { - log_fail("Could not read Player Layer\n"); - RETURN_LT(lt, NULL); - } - player_layer->color_picker.color = hexstr(colorstr); - - return player_layer; -} - -void destroy_player_layer(PlayerLayer *player_layer) -{ - trace_assert(player_layer); - destroy_lt(player_layer->lt); + return create_player_layer(position, hexstr(colorstr)); } LayerPtr player_layer_as_layer(PlayerLayer *player_layer) @@ -55,7 +50,7 @@ LayerPtr player_layer_as_layer(PlayerLayer *player_layer) int player_layer_render(const PlayerLayer *player_layer, Camera *camera, - float fa) + int active) { trace_assert(player_layer); trace_assert(camera); @@ -66,8 +61,12 @@ int player_layer_render(const PlayerLayer *player_layer, player_layer->position, vec(25.0f, 25.0f)), color_scale( - player_layer->color_picker.color, - rgba(1.0f, 1.0f, 1.0f, fa))) < 0) { + color_picker_rgba(&player_layer->color_picker), + rgba(1.0f, 1.0f, 1.0f, active ? 1.0f : 0.5f))) < 0) { + return -1; + } + + if (active && color_picker_render(&player_layer->color_picker, camera)) { return -1; } @@ -83,27 +82,36 @@ int player_layer_event(PlayerLayer *player_layer, trace_assert(event); trace_assert(camera); - switch (event->type) { - case SDL_MOUSEBUTTONDOWN: - case SDL_MOUSEBUTTONUP: { - bool selected = false; - if (color_picker_mouse_button( - &player_layer->color_picker, - &event->button, - &selected) < 0) { - return -1; - } - - if (!selected && - event->type == SDL_MOUSEBUTTONUP && - event->button.button == SDL_BUTTON_LEFT) { - player_layer->position = - camera_map_screen(camera, - event->button.x, - event->button.y); - } - } break; + + int selected = 0; + if (color_picker_event( + &player_layer->color_picker, + event, + &selected) < 0) { + return -1; } + if (!selected && + event->type == SDL_MOUSEBUTTONDOWN && + event->button.button == SDL_BUTTON_LEFT) { + player_layer->position = + camera_map_screen(camera, + event->button.x, + event->button.y); + } + + return 0; +} + +int player_layer_dump_stream(const PlayerLayer *player_layer, + FILE *filedump) +{ + trace_assert(player_layer); + trace_assert(filedump); + + fprintf(filedump, "%f %f ", player_layer->position.x, player_layer->position.y); + color_hex_to_stream(color_picker_rgba(&player_layer->color_picker), filedump); + fprintf(filedump, "\n"); + return 0; }