diff --git a/src/c/main.c b/src/c/main.c index 458a491..4c0ee75 100644 --- a/src/c/main.c +++ b/src/c/main.c @@ -54,11 +54,12 @@ static GBitmap *s_clock_bmp; static GBitmap *s_check_bmp; // global vars +static WakeupReason s_alarm_reason; static GColor s_setter_highlight_color; static uint8_t s_highlight_pos = 0; static bool s_skip_current_day = false; //// alarm -static WakeupReason s_alarm_reason; +static uint8_t s_demotion_promotion_clocks[2]; static uint8_t s_solution_indices[3]; static uint8_t s_selected_indices[3] = {9, 9, 9}; static uint8_t s_awareness_countdown_int = 0; diff --git a/src/c/triangles.c b/src/c/triangles.c index bde1ac3..8714852 100644 --- a/src/c/triangles.c +++ b/src/c/triangles.c @@ -37,14 +37,7 @@ static void right_triangle_layer_update_proc(Layer *layer, GContext *ctx) { graphics_draw_circle(ctx, GPoint(tri->theta_angle_is_left ? start_x : end_x, base_y), 5); } -RightTriangleLayer *right_triangle_layer_create(GRect frame, GColor color) { - RightTriangleLayer *tri = malloc(sizeof(RightTriangleLayer)); - if (!tri) - return NULL; - - // set color - tri->color = color; - +static void right_triangle_layer_generate_properties(RightTriangleLayer *tri, GRect frame) { // determine angles tri->angle_A = 90; // right angle at apex tri->theta_angle_is_left = rand() % 2; @@ -66,6 +59,18 @@ RightTriangleLayer *right_triangle_layer_create(GRect frame, GColor color) { tri->side_b = (uint16_t)(((uint32_t)sin_B * tri->side_a) / TRIG_MAX_RATIO); tri->side_c = (uint16_t)(((uint32_t)sin_C * tri->side_a) / TRIG_MAX_RATIO); } while (tri->side_a == tri->side_b || tri->side_a == tri->side_c || tri->side_b == tri->side_c); +} + +RightTriangleLayer *right_triangle_layer_create(GRect frame, GColor color) { + RightTriangleLayer *tri = malloc(sizeof(RightTriangleLayer)); + if (!tri) + return NULL; + + // set color + tri->color = color; + + // generate this triangle's angles and side lengths + right_triangle_layer_generate_properties(tri, frame); // create layer with room for a pointer-sized data slot & store the RightTriangleLayer* there tri->layer = layer_create_with_data(frame, sizeof(RightTriangleLayer *)); @@ -75,6 +80,14 @@ RightTriangleLayer *right_triangle_layer_create(GRect frame, GColor color) { return tri; } +void right_triangle_layer_regen(RightTriangleLayer *tri) { + if (!tri || !tri->layer) + return; + + right_triangle_layer_generate_properties(tri, layer_get_bounds(tri->layer)); + layer_mark_dirty(tri->layer); +} + void right_triangle_layer_destroy(RightTriangleLayer *tri) { if (!tri) return; diff --git a/src/c/triangles.h b/src/c/triangles.h index 659dbff..2581750 100644 --- a/src/c/triangles.h +++ b/src/c/triangles.h @@ -20,4 +20,5 @@ typedef struct { } __attribute__((__packed__)) RightTriangleLayer; RightTriangleLayer *right_triangle_layer_create(GRect frame, GColor color); +void right_triangle_layer_regen(RightTriangleLayer *tri); void right_triangle_layer_destroy(RightTriangleLayer *tri);