aboutsummaryrefslogtreecommitdiff
path: root/quantum/led_matrix_runners/effect_runner_reactive_splash.h
diff options
context:
space:
mode:
Diffstat (limited to 'quantum/led_matrix_runners/effect_runner_reactive_splash.h')
-rw-r--r--quantum/led_matrix_runners/effect_runner_reactive_splash.h26
1 files changed, 26 insertions, 0 deletions
diff --git a/quantum/led_matrix_runners/effect_runner_reactive_splash.h b/quantum/led_matrix_runners/effect_runner_reactive_splash.h
new file mode 100644
index 000000000..d6eb9731e
--- /dev/null
+++ b/quantum/led_matrix_runners/effect_runner_reactive_splash.h
@@ -0,0 +1,26 @@
1#pragma once
2
3#ifdef LED_MATRIX_KEYREACTIVE_ENABLED
4
5typedef uint8_t (*reactive_splash_f)(uint8_t val, int16_t dx, int16_t dy, uint8_t dist, uint16_t tick);
6
7bool effect_runner_reactive_splash(uint8_t start, effect_params_t* params, reactive_splash_f effect_func) {
8 LED_MATRIX_USE_LIMITS(led_min, led_max);
9
10 uint8_t count = g_last_hit_tracker.count;
11 for (uint8_t i = led_min; i < led_max; i++) {
12 LED_MATRIX_TEST_LED_FLAGS();
13 uint8_t val = 0;
14 for (uint8_t j = start; j < count; j++) {
15 int16_t dx = g_led_config.point[i].x - g_last_hit_tracker.x[j];
16 int16_t dy = g_led_config.point[i].y - g_last_hit_tracker.y[j];
17 uint8_t dist = sqrt16(dx * dx + dy * dy);
18 uint16_t tick = scale16by8(g_last_hit_tracker.tick[j], led_matrix_eeconfig.speed);
19 val = effect_func(val, dx, dy, dist, tick);
20 }
21 led_matrix_set_value(i, scale8(val, led_matrix_eeconfig.val));
22 }
23 return led_max < DRIVER_LED_TOTAL;
24}
25
26#endif // LED_MATRIX_KEYREACTIVE_ENABLED