diff --git a/main.c b/main.c index cbb5022..93345d9 100644 --- a/main.c +++ b/main.c @@ -1,11 +1,27 @@ +#include "SDL_mouse.h" +#include "aliases/aliases.h" +#include "drawing.h" #include #include #include #include #include +#include -#define WINDOW_WIDTH 800 -#define WINDOW_HEIGHT 600 +#define WINDOW_WIDTH 1280 +#define WINDOW_HEIGHT 720 + +typedef struct state state_t; +struct state { + i32 mouse_x; + i32 mouse_y; + i32 current_origin_x; + i32 current_origin_y; + bool running; + bool drawing; + arrows_t arrows; + arrow_t tmp_arrow; +}; int main(void) { SDL_Init(SDL_INIT_EVERYTHING); @@ -17,15 +33,55 @@ int main(void) { SDL_Renderer *renderer = SDL_CreateRenderer( window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); - bool running = true; + state_t st = { + .mouse_x = -1, + .mouse_y = -1, + .current_origin_x = -1, + .current_origin_y = -1, + .running = true, + .drawing = false, + .arrows = {0}, + .tmp_arrow = {0}, + }; SDL_Event event = {0}; - while (running) { + if (!init_arrows_default(&(st.arrows))) { + return EXIT_FAILURE; + } + + while (st.running) { while (SDL_PollEvent(&event)) { switch (event.type) { case SDL_QUIT: - running = false; + st.running = false; + break; + case SDL_MOUSEBUTTONUP: + if (event.button.button == SDL_BUTTON_LEFT) { + if (st.drawing) { + add_arrow(&(st.arrows), st.tmp_arrow); + + st.tmp_arrow = (arrow_t){0}; + + st.drawing = false; + } else { + st.current_origin_x = event.button.x; + st.current_origin_y = event.button.y; + + st.drawing = true; + } + } else if (event.button.button == SDL_BUTTON_RIGHT) { + st.current_origin_x = -1; + st.current_origin_y = -1; + + st.drawing = false; + } + + break; + case SDL_MOUSEMOTION: + st.mouse_x = event.motion.x; + st.mouse_y = event.motion.y; + break; } } @@ -34,6 +90,16 @@ int main(void) { SDL_RenderClear(renderer); + if (st.drawing) { + st.tmp_arrow.origin = (point_t){st.current_origin_x, st.current_origin_y}; + st.tmp_arrow.direction = (vec2_t){st.mouse_x - st.current_origin_x, + st.mouse_y - st.current_origin_y}; + + draw_arrow(renderer, &(st.tmp_arrow), (colour_t){.abgr = 0xff0000ff}); + } + + draw_arrows(renderer, &(st.arrows), (colour_t){.abgr = 0xff000000}); + SDL_RenderPresent(renderer); } @@ -43,5 +109,5 @@ int main(void) { SDL_Quit(); - return 0; + return EXIT_SUCCESS; }