random effects and improved flashing
This commit is contained in:
parent
4bee3e6286
commit
761a077162
|
@ -24,6 +24,10 @@ long lastCheckspawn=0;
|
|||
#define CHECKSPAWNDELAY 4000 //delay in ms to check random spawn
|
||||
#define SPAWNCHANCE 20 //1 out of x times wagon will spawn
|
||||
#define SPAWNCHANCEDOUBLE 5 //change of spawning a two trains simultaneously
|
||||
long lastCheckspawnEffect=0;
|
||||
#define CHECKSPAWNDELAY_EFFECT 2000 //delay in ms to check random effect
|
||||
#define SPAWNCHANCE_EFFECT_SCANNER 100 //1 out of x times spawn effect
|
||||
#define SPAWNCHANCE_EFFECT_FLASH 80 //1 out of x times spawn effect
|
||||
|
||||
#define BRIGHTNESS_RUN 200
|
||||
#define BRIGHTNESS_DEBUG 150
|
||||
|
@ -389,7 +393,7 @@ void checkSerial(){
|
|||
effect=new FX_Scanner(NUMPIXELS,&strip,height,255,-200,strip.Color(100,0,0));
|
||||
}else if (serialstring.equals("fx_flash")){
|
||||
Serial.println("Effect Flash");
|
||||
effect=new FX_Flash(NUMPIXELS,&strip,strip.Color(200,200,200));
|
||||
effect=new FX_Flash(NUMPIXELS,&strip,height,strip.Color(200,200,200));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -494,11 +498,18 @@ void loop_achterbahn(){
|
|||
if (random(0,SPAWNCHANCEDOUBLE)==0){
|
||||
spawnWagon();
|
||||
}
|
||||
}//else{
|
||||
//Serial.println("no spawn");
|
||||
//}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//Check Effect Spawning
|
||||
if (effect==NULL && lastCheckspawnEffect+CHECKSPAWNDELAY_EFFECT<loopmillis) {
|
||||
lastCheckspawnEffect=loopmillis;
|
||||
if (random(0,SPAWNCHANCE_EFFECT_SCANNER)==0){
|
||||
effect=new FX_Scanner(NUMPIXELS,&strip,height,255,-200,strip.Color(100,0,0));
|
||||
}else if (random(0,SPAWNCHANCE_EFFECT_FLASH)==0){
|
||||
effect=new FX_Flash(NUMPIXELS,&strip,height,strip.Color(200,200,200));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
71
fx_flash.cpp
71
fx_flash.cpp
|
@ -1,14 +1,15 @@
|
|||
#include "fx_flash.h"
|
||||
#include "effect.h"
|
||||
|
||||
#define FLASHTIME 10 //in ms
|
||||
|
||||
FX_Flash::FX_Flash(int numpixels,Adafruit_NeoPixel *strip,uint32_t flashcolor)
|
||||
FX_Flash::FX_Flash(int numpixels,Adafruit_NeoPixel *strip,uint8_t *height,uint32_t flashcolor)
|
||||
{
|
||||
_numpixels=numpixels;
|
||||
_strip=strip;
|
||||
_flashcolor=flashcolor;
|
||||
_starttime=millis();
|
||||
_brightness=0;
|
||||
_flashtime=random(200,3000);
|
||||
_height=height;
|
||||
}
|
||||
|
||||
FX_Flash::FX_Flash()
|
||||
|
@ -17,41 +18,61 @@ FX_Flash::FX_Flash()
|
|||
|
||||
void FX_Flash::updateRoutine(float updatedelayms)
|
||||
{
|
||||
|
||||
float negativelikelihood=pow(( (millis()-_starttime)*1.0/_flashtime ),2); // 0=most likely, 1=unlikely
|
||||
_brightness*=0.2;
|
||||
if (random(0,negativelikelihood*20)==0){
|
||||
_brightness=random(100,255);
|
||||
}
|
||||
//_brightness=(1.0-pow((255-_brightness)/255.0,4))*255.0;
|
||||
}
|
||||
|
||||
void FX_Flash::updateGraphics()
|
||||
{
|
||||
#define STARTFLASHHEIGHT 100
|
||||
#define BRIGHTFLASHHEIGHT 150
|
||||
for(int i=0;i<_numpixels;i++){
|
||||
|
||||
uint8_t _r = _flashcolor >> 16;
|
||||
uint8_t _g = _flashcolor >> 8;
|
||||
uint8_t _b = _flashcolor;
|
||||
if (_height[i]>=STARTFLASHHEIGHT){
|
||||
uint8_t heightbrightness=map(_height[i],STARTFLASHHEIGHT,BRIGHTFLASHHEIGHT,0,255);
|
||||
|
||||
uint8_t _r = _flashcolor >> 16;
|
||||
uint8_t _g = _flashcolor >> 8;
|
||||
uint8_t _b = _flashcolor;
|
||||
|
||||
_r*=_brightness/255.0;
|
||||
_g*=_brightness/255.0;
|
||||
_b*=_brightness/255.0;
|
||||
|
||||
|
||||
uint32_t _pxcolor=_strip->getPixelColor(i); //get current color of that pixel
|
||||
uint8_t _pxr = _pxcolor >> 16;
|
||||
uint8_t _pxg = _pxcolor >> 8;
|
||||
uint8_t _pxb = _pxcolor;
|
||||
uint16_t _tmpr=_pxr+_r; //add colors
|
||||
uint16_t _tmpg=_pxg+_g;
|
||||
uint16_t _tmpb=_pxb+_b;
|
||||
if (_tmpr>255){ //clamp
|
||||
_tmpr=255;
|
||||
_r*=heightbrightness/255.0;
|
||||
_g*=heightbrightness/255.0;
|
||||
_b*=heightbrightness/255.0;
|
||||
|
||||
|
||||
uint32_t _pxcolor=_strip->getPixelColor(i); //get current color of that pixel
|
||||
uint8_t _pxr = _pxcolor >> 16;
|
||||
uint8_t _pxg = _pxcolor >> 8;
|
||||
uint8_t _pxb = _pxcolor;
|
||||
uint16_t _tmpr=_pxr+_r; //add colors
|
||||
uint16_t _tmpg=_pxg+_g;
|
||||
uint16_t _tmpb=_pxb+_b;
|
||||
if (_tmpr>255){ //clamp
|
||||
_tmpr=255;
|
||||
}
|
||||
if (_tmpg>255){
|
||||
_tmpg=255;
|
||||
}
|
||||
if (_tmpb>255){
|
||||
_tmpb=255;
|
||||
}
|
||||
_strip->setPixelColor(i,_tmpr,_tmpg,_tmpb); //draw pixel
|
||||
}
|
||||
if (_tmpg>255){
|
||||
_tmpg=255;
|
||||
}
|
||||
if (_tmpb>255){
|
||||
_tmpb=255;
|
||||
}
|
||||
_strip->setPixelColor(i,_tmpr,_tmpg,_tmpb); //draw pixel
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
bool FX_Flash::active()
|
||||
{
|
||||
if (millis()-_starttime>FLASHTIME){
|
||||
if (millis()-_starttime>_flashtime){
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
class FX_Flash : public Effect
|
||||
{
|
||||
public:
|
||||
FX_Flash(int numpixels,Adafruit_NeoPixel *strip,uint32_t flashcolor);
|
||||
FX_Flash(int numpixels,Adafruit_NeoPixel *strip,uint8_t *height,uint32_t flashcolor);
|
||||
FX_Flash();
|
||||
void updateRoutine(float updatedelayms);
|
||||
void updateGraphics();
|
||||
|
@ -18,6 +18,9 @@ class FX_Flash : public Effect
|
|||
Adafruit_NeoPixel *_strip;
|
||||
uint32_t _flashcolor;
|
||||
long _starttime;
|
||||
uint8_t _brightness;
|
||||
long _flashtime;
|
||||
uint8_t *_height;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue