4 #include "./glitchy_rect.h"
9 #define GLITCHY_RECTS_COUNT 10
10 #define GLITCHY_RECTS_X_BUFFER 0.0f
11 #define GLITCHY_RECTS_Y_BUFFER 40.0f
12 #define GLITCHY_RECTS_INTERVAL 1500
25 glitchy_rect_t *create_glitchy_rect(rect_t rect, color_t color)
27 lt_t *lt = create_lt();
33 glitchy_rect_t * const glitchy_rect = PUSH_LT(
35 malloc(sizeof(glitchy_rect_t)),
38 glitchy_rect->rect = rect;
39 glitchy_rect->color = color;
40 glitchy_rect->glitchy = 0;
41 glitchy_rect->timer = 0;
42 glitchy_rect->interval = (Uint32) (rand() % GLITCHY_RECTS_INTERVAL);
43 glitchy_rect->seed = 0;
44 glitchy_rect->lt = lt;
49 glitchy_rect_t *create_glitchy_rect_from_stream(FILE *stream)
54 if (fscanf(stream, "%f%f%f%f%6s\n",
58 throw_error(ERROR_TYPE_LIBC);
62 color_t color = color_from_hexstr(color_name);
64 return create_glitchy_rect(rect, color);
67 void destroy_glitchy_rect(glitchy_rect_t *glitchy_rect)
70 RETURN_LT0(glitchy_rect->lt);
73 int glitchy_rect_render(const glitchy_rect_t *glitchy_rect,
74 SDL_Renderer *renderer,
75 const camera_t *camera)
81 if (glitchy_rect->glitchy) {
82 srand(glitchy_rect->seed);
84 const float x_range = glitchy_rect->rect.w + GLITCHY_RECTS_X_BUFFER;
85 const float y_range = glitchy_rect->rect.h + GLITCHY_RECTS_Y_BUFFER;
87 for (int i = 0; i < GLITCHY_RECTS_COUNT; i++) {
88 const float x = fmodf((float) rand(), x_range) - GLITCHY_RECTS_X_BUFFER * 0.5f;
89 const float y = fmodf((float) rand(), y_range) - GLITCHY_RECTS_Y_BUFFER * 0.5f;
90 const float w = fmodf((float) rand(), (x_range - x)) - GLITCHY_RECTS_X_BUFFER * 0.5f;
91 const float h = fmodf((float) rand(), (y_range - y)) - GLITCHY_RECTS_Y_BUFFER * 0.5f;
97 glitchy_rect->rect.x + x,
98 glitchy_rect->rect.y + y,
101 glitchy_rect->color) < 0) {
106 srand((unsigned int) time(NULL));
109 return camera_fill_rect(
113 glitchy_rect->color);
119 int glitchy_rect_update(glitchy_rect_t *glitchy_rect,
122 assert(glitchy_rect);
123 assert(delta_time > 0);
125 glitchy_rect->timer += delta_time;
127 if (!glitchy_rect->glitchy) {
128 if (glitchy_rect->timer >= glitchy_rect->interval) {
129 glitchy_rect->glitchy = 1;
130 glitchy_rect->timer = 0;
131 glitchy_rect->seed = (unsigned int) time(NULL) + (unsigned int) rand();
134 if (glitchy_rect->timer >= 100) {
135 glitchy_rect->glitchy = 0;
136 glitchy_rect->timer = 0;
137 glitchy_rect->interval = (Uint32) (rand() % GLITCHY_RECTS_INTERVAL);
144 int glitchy_rect_overlaps(const glitchy_rect_t *glitchy_rect,
147 return rects_overlap(glitchy_rect->rect, rect);