changed wagoncolor by speed
This commit is contained in:
parent
153a9f0d83
commit
0cc531c7b3
|
@ -11,6 +11,8 @@
|
|||
|
||||
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
|
||||
|
||||
|
||||
|
||||
long lastPixelUpdate=0;
|
||||
#define PIXELUPDATETIME 10
|
||||
long lastRoutineUpdate=0;
|
||||
|
@ -19,6 +21,7 @@ long lastRoutineUpdate=0;
|
|||
long loopmillis=0;
|
||||
|
||||
uint8_t height[NUMPIXELS];
|
||||
#define MAXHEIGHT 45
|
||||
|
||||
std::vector <Wagon> wagon_arr;
|
||||
uint8_t maxid=0;
|
||||
|
@ -77,15 +80,15 @@ void setup() {
|
|||
previewHeightmap();
|
||||
|
||||
spawnWagon();
|
||||
spawnWagon();
|
||||
|
||||
}
|
||||
|
||||
void previewHeightmap(){
|
||||
int maxheight=45;
|
||||
for (int i=0;i<NUMPIXELS;i++){
|
||||
|
||||
//uint32_t c=Wheel(height[i]*255/45);
|
||||
uint8_t b=height[i]*255/45;
|
||||
uint8_t b=height[i]*255/MAXHEIGHT;
|
||||
uint32_t c=strip.Color(255-b,b,0);
|
||||
strip.setPixelColor(i,c);
|
||||
}
|
||||
|
@ -94,11 +97,14 @@ void previewHeightmap(){
|
|||
}
|
||||
|
||||
void spawnWagon(){
|
||||
Wagon tmpr = Wagon(maxid++,NUMPIXELS,&strip, height, 35, 6, 0.5,0); //spawn new wagon
|
||||
//Wagon tmpr = Wagon(maxid++,NUMPIXELS,&strip, height, 35, 6, 0.5,0); //spawn new wagon
|
||||
Wagon tmpr = Wagon(maxid++,NUMPIXELS,&strip, height, random(30, 200), 6, random(0.2, 10)/10.0,0); //spawn new wagon
|
||||
|
||||
wagon_arr.push_back(tmpr);
|
||||
Serial.println("Spawned Wagon");
|
||||
}
|
||||
|
||||
|
||||
void loop() {
|
||||
loopmillis=millis();
|
||||
|
||||
|
|
71
wagon.cpp
71
wagon.cpp
|
@ -1,7 +1,6 @@
|
|||
#include "wagon.h"
|
||||
|
||||
|
||||
|
||||
Wagon::Wagon(int id,int numpixels, Adafruit_NeoPixel *strip,uint8_t *height,float pos, float wagonlength,float startvel,float startacc)
|
||||
{
|
||||
_id = id;
|
||||
|
@ -12,6 +11,7 @@ Wagon::Wagon(int id,int numpixels, Adafruit_NeoPixel *strip,uint8_t *height,floa
|
|||
_height=height;
|
||||
_vel=startvel;
|
||||
_acc=startacc;
|
||||
_spawntime=millis();
|
||||
|
||||
}
|
||||
|
||||
|
@ -44,8 +44,7 @@ void Wagon::updatePhysics(float updatedelayms)
|
|||
//rho Massendichte luft 1,2041
|
||||
//A = 1m^2
|
||||
|
||||
float m=50/_wagonlength; //mass of part of a wagon
|
||||
|
||||
float m=40/_wagonlength; //mass of part of a wagon
|
||||
|
||||
_acc=0;
|
||||
int cpos=(int)_pos;
|
||||
|
@ -68,7 +67,7 @@ void Wagon::updatePhysics(float updatedelayms)
|
|||
if (_vel<0){
|
||||
bb*=-1;
|
||||
}
|
||||
float cc=AIRRES/m*_vel*_vel; //air resistance
|
||||
float cc=AIRRES/m*pow(_vel,2); //air resistance
|
||||
if (_vel<0){
|
||||
cc*=-1;
|
||||
}
|
||||
|
@ -84,34 +83,56 @@ void Wagon::updatePhysics(float updatedelayms)
|
|||
}
|
||||
|
||||
_acc*=updatedelayms/1000;
|
||||
|
||||
|
||||
|
||||
_vel += _acc;
|
||||
_pos += _vel/PIXELDISTANCE;
|
||||
/*Serial.print(" Vel=");
|
||||
Serial.print(" Vel=");
|
||||
Serial.print(_vel);
|
||||
Serial.print(" Acc=");
|
||||
Serial.println(_acc);*/
|
||||
Serial.println(_acc);
|
||||
}
|
||||
|
||||
float Wagon::getHeight(int p){
|
||||
if (p<0){
|
||||
p=0;
|
||||
//p=0;
|
||||
return (-p)*10;
|
||||
}else if(p>=_numpixels){
|
||||
p=_numpixels-1;
|
||||
//p=_numpixels-1;
|
||||
return (p-_numpixels)*10;
|
||||
}
|
||||
return _height[p];
|
||||
}
|
||||
|
||||
void Wagon::updateGraphics()
|
||||
{
|
||||
for(int i=_pos;i>_pos-_wagonlength;i--){
|
||||
uint32_t c=_strip->Color(0,255,0);
|
||||
if (i==int(_pos)){
|
||||
c=_strip->Color(0,255,100);
|
||||
float wagonfeathering=2;
|
||||
for(int i=_pos+wagonfeathering;i>_pos-_wagonlength-wagonfeathering;i--){
|
||||
float featherbrightness=1;
|
||||
if (i>_pos){ //in front of wagon
|
||||
featherbrightness=1 - (i-_pos)/wagonfeathering;
|
||||
|
||||
}else if (i<_pos-_wagonlength){ //behind of wagon
|
||||
featherbrightness=1 - (_pos-_wagonlength -i)/wagonfeathering;
|
||||
}
|
||||
|
||||
if (featherbrightness<=0){ //distpercent between 0 and 1. 1-> full brightness, 0-> feathering distance away
|
||||
featherbrightness=0;
|
||||
}
|
||||
|
||||
//uint32_t c=_strip->Color(0,255*featherbrightness,0);
|
||||
|
||||
//uint32_t c=Wheel(_height[i]/45.0*255,featherbrightness);
|
||||
|
||||
//uint8_t b=_height[i]*255/45;
|
||||
uint8_t b=abs(_vel)*255.0;
|
||||
uint32_t c=_strip->Color(b*featherbrightness,(255-b)*featherbrightness,0);
|
||||
|
||||
|
||||
|
||||
_strip->setPixelColor(i,c);
|
||||
}
|
||||
//_strip->setPixelColor(10,_strip->Color(255,0,0));
|
||||
}
|
||||
|
||||
int Wagon::pos()
|
||||
|
@ -124,11 +145,33 @@ int Wagon::id()
|
|||
return _id;
|
||||
}
|
||||
|
||||
long Wagon::spawntime()
|
||||
{
|
||||
return _spawntime;
|
||||
}
|
||||
|
||||
bool Wagon::alive()
|
||||
{
|
||||
if (_pos>_numpixels){
|
||||
/*if (_pos>_numpixels){
|
||||
return false;
|
||||
}*/
|
||||
|
||||
if (millis()>_spawntime+30*1000){ //too old
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
uint32_t Wagon::Wheel(byte WheelPos,float brightness) {
|
||||
WheelPos = 255 - WheelPos;
|
||||
if(WheelPos < 85) {
|
||||
return _strip->Color(255 - WheelPos * 3*brightness, 0, WheelPos * 3*brightness);
|
||||
}
|
||||
if(WheelPos < 170) {
|
||||
WheelPos -= 85;
|
||||
return _strip->Color(0, WheelPos * 3*brightness, 255 - WheelPos * 3*brightness);
|
||||
}
|
||||
WheelPos -= 170;
|
||||
return _strip->Color(WheelPos * 3*brightness, 255 - WheelPos * 3*brightness, 0);
|
||||
}
|
||||
|
|
3
wagon.h
3
wagon.h
|
@ -13,8 +13,10 @@ class Wagon
|
|||
void updatePhysics(float updatedelayms);
|
||||
void updateGraphics();
|
||||
float getHeight(int p);
|
||||
uint32_t Wheel(byte WheelPos,float brightness);
|
||||
int pos();
|
||||
int id();
|
||||
long spawntime();
|
||||
bool alive();
|
||||
private:
|
||||
int _numpixels;
|
||||
|
@ -24,6 +26,7 @@ class Wagon
|
|||
float _acc;
|
||||
float _wagonlength;
|
||||
uint8_t *_height;
|
||||
long _spawntime;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue