2D Haloween eyes

Misc fix.
This commit is contained in:
Blaz Kristan 2022-05-11 09:37:38 +02:00
parent 4963a5797b
commit 4484721a9f
4 changed files with 25 additions and 16 deletions

View File

@ -2506,6 +2506,7 @@ uint16_t WS2812FX::mode_halloween_eyes()
if (state == 0) { //spawn eyes
SEGENV.aux0 = random16(0, SEGLEN - eyeLength); //start pos
SEGENV.aux1 = random8(); //color
if (isMatrix) SEGMENT.offset = random16(SEGMENT.virtualHeight()-1); // a hack: reuse offset since it is not used in matrices
state = 1;
}
@ -2517,20 +2518,22 @@ uint16_t WS2812FX::mode_halloween_eyes()
if (fadestage > 255) fadestage = 255;
uint32_t c = color_blend(color_from_palette(SEGENV.aux1 & 0xFF, false, false, 0), SEGCOLOR(1), fadestage);
for (uint16_t i = 0; i < HALLOWEEN_EYE_WIDTH; i++)
{
setPixelColor(startPos + i, c);
setPixelColor(start2ndEye + i, c);
for (uint16_t i = 0; i < HALLOWEEN_EYE_WIDTH; i++) {
if (isMatrix) {
setPixelColorXY(startPos + i, SEGMENT.offset, c);
setPixelColorXY(start2ndEye + i, SEGMENT.offset, c);
} else {
setPixelColor(startPos + i, c);
setPixelColor(start2ndEye + i, c);
}
}
}
if (now - SEGENV.step > stateTime)
{
if (now - SEGENV.step > stateTime) {
state++;
if (state > 2) state = 0;
if (state < 2)
{
if (state < 2) {
stateTime = 100 + (255 - SEGMENT.intensity)*10; //eye fade time
} else {
uint16_t eyeOffTimeBase = (255 - SEGMENT.speed)*10;

View File

@ -330,19 +330,19 @@ class WS2812FX {
uint16_t virtualWidth() {
uint16_t groupLen = groupLength();
uint16_t vWidth = (width() + groupLen - 1) / groupLen;
if (options & MIRROR) vWidth = (vWidth + 1) /2; // divide by 2 if mirror, leave at least a single LED
if (getOption(SEG_OPTION_MIRROR)) vWidth = (vWidth + 1) /2; // divide by 2 if mirror, leave at least a single LED
return vWidth;
}
uint16_t virtualHeight() {
uint16_t groupLen = groupLength();
uint16_t vHeight = (height() + groupLen - 1) / groupLen;
if (options & MIRROR_Y_2D) vHeight = (vHeight + 1) /2; // divide by 2 if mirror, leave at least a single LED
if (getOption(SEG_OPTION_MIRROR_Y)) vHeight = (vHeight + 1) /2; // divide by 2 if mirror, leave at least a single LED
return vHeight;
}
uint16_t virtualLength() {
uint16_t groupLen = groupLength();
uint16_t vLength = (length() + groupLen - 1) / groupLen;
if (options & MIRROR) vLength = (vLength + 1) /2; // divide by 2 if mirror, leave at least a single LED
if (getOption(SEG_OPTION_MIRROR)) vLength = (vLength + 1) /2; // divide by 2 if mirror, leave at least a single LED
return vLength;
}
uint8_t differs(Segment& b);
@ -879,6 +879,7 @@ class WS2812FX {
void
setUpMatrix(),
setPixelColorXY(uint16_t x, uint16_t y, uint8_t r, uint8_t g, uint8_t b, uint8_t w = 0),
blendPixelColorXY(uint16_t x, uint16_t y, uint32_t color, uint8_t blend),
blur1d(CRGB* leds, fract8 blur_amount),
blur2d(CRGB* leds, fract8 blur_amount),
blurRow(uint16_t row, fract8 blur_amount, CRGB* leds=nullptr),

View File

@ -187,8 +187,14 @@ uint32_t WS2812FX::getPixelColorXY(uint16_t x, uint16_t y) {
return busses.getPixelColor(index);
}
/*
* Blends the specified color with the existing pixel color.
*/
void WS2812FX::blendPixelColorXY(uint16_t x, uint16_t y, uint32_t color, uint8_t blend) {
setPixelColorXY(x, y, color_blend(getPixelColorXY(x,y), color, blend));
}
// blurRows: perform a blur1d on every row of a rectangular matrix
// blurRow: perform a blur on a row of a rectangular matrix
void WS2812FX::blurRow(uint16_t row, fract8 blur_amount, CRGB* leds) {
uint16_t width = SEGMENT.virtualWidth();
uint16_t height = SEGMENT.virtualHeight();
@ -209,9 +215,8 @@ void WS2812FX::blurRow(uint16_t row, fract8 blur_amount, CRGB* leds) {
}
}
// blurColumns: perform a blur1d on each column of a rectangular matrix
void WS2812FX::blurCol(uint16_t col, fract8 blur_amount, CRGB* leds)
{
// blurCol: perform a blur on a column of a rectangular matrix
void WS2812FX::blurCol(uint16_t col, fract8 blur_amount, CRGB* leds) {
uint16_t width = SEGMENT.virtualWidth();
uint16_t height = SEGMENT.virtualHeight();
if (col >= width) return;

View File

@ -1367,7 +1367,7 @@ const char JSON_mode_names[] PROGMEM = R"=====([
"Two Dots@!,Dot size;1,2,Bg;!",
"Fairy Twinkle",
"Running Dual",
"Halloween",
"Halloween@Duration,Eye fade time;Fx,Bg,;!",
"Chase 3@!,Size;1,2,3;0",
"Tri Wipe@!,Width;1,2,3;0",
"Tri Fade",