/*
|
|
Part of the GARLAND MODULE
|
|
Copyright (C) 2020 by Dmitry Blinov <dblinov76 at gmail dot com>
|
|
|
|
Inspired by https://github.com/Vasil-Pahomov/ArWs2812 (currently https://github.com/Vasil-Pahomov/Liana)
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "color.h"
|
|
|
|
#define BRA_AMP_SHIFT 1 // brigthness animation amplitude shift. true BrA amplitude is calculated
|
|
// as (0..127) value shifted right by this amount
|
|
#define BRA_OFFSET 127 //(222-64) // brigthness animation amplitude offset
|
|
|
|
class Palette;
|
|
|
|
class Anim {
|
|
public:
|
|
Anim(const char* name);
|
|
const char* name() { return _name; }
|
|
void Setup(Palette* palette, uint16_t numLeds, Color* leds, Color* _ledstmp, byte* seq);
|
|
virtual bool finishedycle() const { return true; };
|
|
virtual void Run() = 0;
|
|
virtual void setCycleFactor(float new_cycle_factor) { cycleFactor = new_cycle_factor; }
|
|
virtual float getCycleFactor() { return cycleFactor; }
|
|
|
|
protected:
|
|
uint16_t numLeds = 0;
|
|
Palette* palette = nullptr;
|
|
Color* leds = nullptr;
|
|
Color* ledstmp = nullptr;
|
|
byte* seq = nullptr;
|
|
|
|
int phase;
|
|
int pos;
|
|
int inc;
|
|
|
|
//brigthness animation (BrA) current initial phase
|
|
byte braPhase;
|
|
//braPhase change speed
|
|
byte braPhaseSpd = 5;
|
|
//BrA frequency (spatial)
|
|
byte braFreq = 150;
|
|
|
|
Color curColor = Color(0);
|
|
Color prevColor = Color(0);
|
|
const Color sparkleColor = Color(0xFFFFFF);
|
|
|
|
// Reversed analog of speed. To control speed for particular animation (fine tuning for one).
|
|
// Lower - faster. Set cycleFactor < 1 speed up animation, while cycleFactor > 1 slow it down.
|
|
float cycleFactor = 1.0;
|
|
|
|
virtual void SetupImpl() = 0;
|
|
|
|
// helper functions for animations
|
|
void initSeq();
|
|
void shuffleSeq();
|
|
|
|
//glow animation setup
|
|
void glowSetUp();
|
|
|
|
//glow animation - must be called for each LED after it's BASIC color is set
|
|
//note this overwrites the LED color, so the glow assumes that color will be stored elsewhere (not in leds[])
|
|
//or computed each time regardless previous leds[] value
|
|
void glowForEachLed(int i);
|
|
|
|
//glow animation - must be called at the end of each animaton run
|
|
void glowRun();
|
|
|
|
private:
|
|
const char* _name;
|
|
};
|
|
|
|
unsigned int rng();
|
|
byte rngb();
|