rgb_matrix_kb.inc (2141B)
1 #ifdef RGB_MATRIX_KEYREACTIVE_ENABLED 2 RGB_MATRIX_EFFECT(my_solid_reactive_multiwide_col) 3 RGB_MATRIX_EFFECT(my_solid_reactive_col) 4 RGB_MATRIX_EFFECT(my_party_rocks) 5 6 # ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS 7 8 static hsv_t my_solid_reactive_multiwide_col_math(hsv_t hsv, int16_t dx, int16_t dy, uint8_t dist, uint16_t tick) { 9 uint16_t effect = tick + dist; 10 dx = dx < 0 ? dx * -1 : dx; 11 dx = dx * 16 > 255 ? 255 : dx * 16; 12 effect += dx; 13 if (effect > 255) effect = 255; 14 hsv.v = qadd8(hsv.v, 255 - effect); 15 // hsv.h += qsub8(130, effect); 16 return hsv; 17 } 18 19 bool my_solid_reactive_multiwide_col(effect_params_t* params) { 20 return effect_runner_reactive_splash(0, params, &my_solid_reactive_multiwide_col_math); 21 } 22 23 24 bool my_solid_reactive_col(effect_params_t* params) { 25 RGB_MATRIX_USE_LIMITS(led_min, led_max); 26 27 uint16_t max_tick = 65535 / rgb_matrix_config.speed; 28 for (uint8_t i = led_min; i < led_max; i++) { 29 RGB_MATRIX_TEST_LED_FLAGS(); 30 hsv_t hsv = rgb_matrix_config.hsv; 31 uint16_t tick = max_tick; 32 // Reverse search to find most recent key hit 33 for (int8_t j = g_last_hit_tracker.count - 1; j >= 0; j--) { 34 if (g_last_hit_tracker.x[j] == g_led_config.point[i].x && g_last_hit_tracker.tick[j] < tick) { 35 tick = g_last_hit_tracker.tick[j]; 36 break; 37 } 38 } 39 40 uint16_t offset = scale16by8(tick, rgb_matrix_config.speed); 41 hsv.h += qsub8(130, offset); 42 rgb_t rgb = rgb_matrix_hsv_to_rgb(hsv); 43 rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); 44 } 45 return led_max < RGB_MATRIX_LED_COUNT; 46 } 47 48 bool my_party_rocks(effect_params_t* params) { 49 RGB_MATRIX_USE_LIMITS(led_min, led_max); 50 hsv_t hsv = {rand() & 0xFF, rand() & 0xFF, rgb_matrix_config.hsv.v}; 51 rgb_t rgb = rgb_matrix_hsv_to_rgb(hsv); 52 // rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); 53 rgb_matrix_set_color_all(rgb.r, rgb.g, rgb.b); 54 return led_max < RGB_MATRIX_LED_COUNT; 55 } 56 57 # endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS 58 #endif // RGB_MATRIX_KEYREACTIVE_ENABLED