diff options
| author | XScorpion2 <rcalt2vt@gmail.com> | 2019-04-02 19:24:14 -0500 |
|---|---|---|
| committer | Drashna Jaelre <drashna@live.com> | 2019-04-02 17:24:14 -0700 |
| commit | c98247e3dd2958bd2d8969dc75170e7e2757b895 (patch) | |
| tree | a566de223a9501809e1059c522b52adf7d37fe74 /quantum/rgb_matrix_animations/raindrops_anim.h | |
| parent | 68d8bb2b3fb8a35fda164539d27754b3f74e0819 (diff) | |
| download | qmk_firmware-c98247e3dd2958bd2d8969dc75170e7e2757b895.tar.gz qmk_firmware-c98247e3dd2958bd2d8969dc75170e7e2757b895.zip | |
RGB Matrix Overhaul (#5372)
* RGB Matrix overhaul
Breakout of animations to separate files
Integration of optimized int based math lib
Overhaul of rgb_matrix.c and animations for performance
* Updating effect function api for future extensions
* Combined the keypresses || keyreleases define checks into a single define so I stop forgetting it where necessary
* Moving define RGB_MATRIX_KEYREACTIVE_ENABLED earlier in the include chain
Diffstat (limited to 'quantum/rgb_matrix_animations/raindrops_anim.h')
| -rw-r--r-- | quantum/rgb_matrix_animations/raindrops_anim.h | 40 |
1 files changed, 40 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..fc721375b --- /dev/null +++ b/quantum/rgb_matrix_animations/raindrops_anim.h | |||
| @@ -0,0 +1,40 @@ | |||
| 1 | #pragma once | ||
| 2 | #ifndef DISABLE_RGB_MATRIX_RAINDROPS | ||
| 3 | #include "rgb_matrix_types.h" | ||
| 4 | |||
| 5 | extern rgb_counters_t g_rgb_counters; | ||
| 6 | extern rgb_config_t rgb_matrix_config; | ||
| 7 | |||
| 8 | static void raindrops_set_color(int i) { | ||
| 9 | HSV hsv = { 0 , rgb_matrix_config.sat, rgb_matrix_config.val }; | ||
| 10 | |||
| 11 | // Take the shortest path between hues | ||
| 12 | int16_t deltaH = ((rgb_matrix_config.hue + 180) % 360 - rgb_matrix_config.hue) / 4; | ||
| 13 | if (deltaH > 127) { | ||
| 14 | deltaH -= 256; | ||
| 15 | } else if (deltaH < -127) { | ||
| 16 | deltaH += 256; | ||
| 17 | } | ||
| 18 | |||
| 19 | hsv.h = rgb_matrix_config.hue + (deltaH * (rand() & 0x03)); | ||
| 20 | RGB rgb = hsv_to_rgb(hsv); | ||
| 21 | rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); | ||
| 22 | } | ||
| 23 | |||
| 24 | bool rgb_matrix_raindrops(effect_params_t* params) { | ||
| 25 | if (!params->init) { | ||
| 26 | // Change one LED every tick, make sure speed is not 0 | ||
| 27 | if (scale16by8(g_rgb_counters.tick, qadd8(rgb_matrix_config.speed, 16)) % 10 == 0) { | ||
| 28 | raindrops_set_color(rand() % DRIVER_LED_TOTAL); | ||
| 29 | } | ||
| 30 | return false; | ||
| 31 | } | ||
| 32 | |||
| 33 | RGB_MATRIX_USE_LIMITS(led_min, led_max); | ||
| 34 | for (int i = led_min; i < led_max; i++) { | ||
| 35 | raindrops_set_color(i); | ||
| 36 | } | ||
| 37 | return led_max < DRIVER_LED_TOTAL; | ||
| 38 | } | ||
| 39 | |||
| 40 | #endif // DISABLE_RGB_MATRIX_RAINDROPS | ||
