diff options
Diffstat (limited to 'quantum/rgb_matrix/animations/raindrops_anim.h')
| -rw-r--r-- | quantum/rgb_matrix/animations/raindrops_anim.h | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/quantum/rgb_matrix/animations/raindrops_anim.h b/quantum/rgb_matrix/animations/raindrops_anim.h new file mode 100644 index 000000000..38359cdca --- /dev/null +++ b/quantum/rgb_matrix/animations/raindrops_anim.h | |||
| @@ -0,0 +1,39 @@ | |||
| 1 | #ifndef DISABLE_RGB_MATRIX_RAINDROPS | ||
| 2 | RGB_MATRIX_EFFECT(RAINDROPS) | ||
| 3 | # ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS | ||
| 4 | |||
| 5 | static void raindrops_set_color(int i, effect_params_t* params) { | ||
| 6 | if (!HAS_ANY_FLAGS(g_led_config.flags[i], params->flags)) return; | ||
| 7 | HSV hsv = {0, rgb_matrix_config.hsv.s, rgb_matrix_config.hsv.v}; | ||
| 8 | |||
| 9 | // Take the shortest path between hues | ||
| 10 | int16_t deltaH = ((rgb_matrix_config.hsv.h + 180) % 360 - rgb_matrix_config.hsv.h) / 4; | ||
| 11 | if (deltaH > 127) { | ||
| 12 | deltaH -= 256; | ||
| 13 | } else if (deltaH < -127) { | ||
| 14 | deltaH += 256; | ||
| 15 | } | ||
| 16 | |||
| 17 | hsv.h = rgb_matrix_config.hsv.h + (deltaH * (rand() & 0x03)); | ||
| 18 | RGB rgb = rgb_matrix_hsv_to_rgb(hsv); | ||
| 19 | rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); | ||
| 20 | } | ||
| 21 | |||
| 22 | bool RAINDROPS(effect_params_t* params) { | ||
| 23 | if (!params->init) { | ||
| 24 | // Change one LED every tick, make sure speed is not 0 | ||
| 25 | if (scale16by8(g_rgb_timer, qadd8(rgb_matrix_config.speed, 16)) % 10 == 0) { | ||
| 26 | raindrops_set_color(rand() % DRIVER_LED_TOTAL, params); | ||
| 27 | } | ||
| 28 | return false; | ||
| 29 | } | ||
| 30 | |||
| 31 | RGB_MATRIX_USE_LIMITS(led_min, led_max); | ||
| 32 | for (int i = led_min; i < led_max; i++) { | ||
| 33 | raindrops_set_color(i, params); | ||
| 34 | } | ||
| 35 | return led_max < DRIVER_LED_TOTAL; | ||
| 36 | } | ||
| 37 | |||
| 38 | # endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS | ||
| 39 | #endif // DISABLE_RGB_MATRIX_RAINDROPS | ||
