Added FireworkEffect, which needs a lot more tweaking.
This commit is contained in:
parent
de180b9b28
commit
a2b0f7106f
7
include/effect_firework.h
Normal file
7
include/effect_firework.h
Normal file
@ -0,0 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
#include "Effect.h"
|
||||
|
||||
class FireworkEffect : public Effect {
|
||||
void loop();
|
||||
};
|
@ -5,7 +5,7 @@
|
||||
#include "my_fastled.h"
|
||||
#include "config.h"
|
||||
|
||||
int XYsafe(int x, int y);
|
||||
uint16_t XYsafe(int x, int y);
|
||||
|
||||
void setPixel(int x, int y, CRGB color);
|
||||
|
||||
@ -21,6 +21,12 @@ void clear(Window window);
|
||||
|
||||
void clear();
|
||||
|
||||
void blur(fract8 blur_amount);
|
||||
|
||||
void blur_row(uint8_t row_index, fract8 blur_amount);
|
||||
|
||||
void blur_column(uint8_t column_index, fract8 blur_amount);
|
||||
|
||||
inline double sines(double x, double y) {
|
||||
return ((cos(x) * sin(y)) * 0.5) + 0.5;
|
||||
}
|
||||
|
11
src/effect_firework.cpp
Normal file
11
src/effect_firework.cpp
Normal file
@ -0,0 +1,11 @@
|
||||
#include "effect_firework.h"
|
||||
#include "my_fastled.h"
|
||||
#include "functions.h"
|
||||
#include "config.h"
|
||||
|
||||
void FireworkEffect::loop() {
|
||||
if (random8(EFFECT_FIREWORK_SHOT_CHANCE)==0) {
|
||||
leds[random16(LED_COUNT)] = CHSV(random8(), 255, 255);
|
||||
}
|
||||
blur(EFFECT_FIREWORK_BLUR);
|
||||
}
|
@ -2,7 +2,7 @@
|
||||
#include "prototypes.h"
|
||||
#include "my_fastled.h"
|
||||
|
||||
int XYsafe(int x, int y) {
|
||||
uint16_t XYsafe(int x, int y) {
|
||||
if ( x >= LED_WIDTH) return 0;
|
||||
if ( y >= LED_HEIGHT) return 0;
|
||||
if ( x < 0) return 0;
|
||||
@ -25,15 +25,9 @@ void setPixel(int x, int y, CRGB color) {
|
||||
if ( x < 0) return;
|
||||
if ( y < 0) return;
|
||||
|
||||
// Invert y
|
||||
y = LED_HEIGHT - 1 - y;
|
||||
uint16_t index = XYsafe(x, y);
|
||||
|
||||
if (y & 1) x = LED_WIDTH - 1 - x;
|
||||
|
||||
// Invert x
|
||||
//x = LED_WIDTH - 1 - x;
|
||||
|
||||
leds[y*LED_WIDTH+x] = color;
|
||||
leds[index] = color;
|
||||
}
|
||||
|
||||
void setPixel(int i, CRGB color) {
|
||||
@ -68,6 +62,45 @@ void clear() {
|
||||
clear(w);
|
||||
}
|
||||
|
||||
void blur(fract8 blur_amount) {
|
||||
// Based on FastLED code
|
||||
for (uint8_t i=0; i<LED_HEIGHT; i++) blur_row(i, blur_amount);
|
||||
for (uint8_t i=0; i<LED_WIDTH; i++) blur_column(i, blur_amount);
|
||||
}
|
||||
|
||||
void blur_row(uint8_t row_index, fract8 blur_amount) {
|
||||
CRGB* row = &leds[row_index * LED_WIDTH];
|
||||
uint8_t keep = 255 - blur_amount;
|
||||
uint8_t seep = 17; // 15 is zu wenig
|
||||
CRGB carryover = CRGB::Black;
|
||||
for (uint8_t x=0; x<LED_WIDTH; x++) {
|
||||
CRGB currentColor = row[x];
|
||||
CRGB part = currentColor;
|
||||
part.nscale8(seep);
|
||||
currentColor.nscale8(keep);
|
||||
currentColor += carryover;
|
||||
if (x>0) row[x-1]+=part;
|
||||
row[x]=currentColor;
|
||||
carryover = part;
|
||||
}
|
||||
}
|
||||
|
||||
void blur_column(uint8_t col_index, fract8 blur_amount) {
|
||||
uint8_t keep = 255 - blur_amount;
|
||||
uint8_t seep = 17;
|
||||
CRGB carryover = CRGB::Black;
|
||||
for (uint8_t y=0; y<LED_HEIGHT; y++) {
|
||||
CRGB currentColor = leds[XYsafe(col_index, y)];
|
||||
CRGB part = currentColor;
|
||||
part.nscale8(seep);
|
||||
currentColor.nscale8(keep);
|
||||
currentColor += carryover;
|
||||
if (y>0) leds[XYsafe(col_index, y-1)]+=part;
|
||||
leds[XYsafe(col_index, y)]=currentColor;
|
||||
carryover = part;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
struct Matrix multiply(struct Matrix m1, struct Matrix m2) {
|
||||
|
Loading…
Reference in New Issue
Block a user