mirror of
https://github.com/projectM-visualizer/projectm.git
synced 2026-03-01 21:16:01 +00:00
git-svn-id: https://projectm.svn.sourceforge.net/svnroot/projectm/personal/carm/represet@1192 6778bc44-b910-0410-a7a0-be141de4315d
222 lines
4.8 KiB
C++
222 lines
4.8 KiB
C++
|
|
|
|
#include "Pipeline.hpp"
|
|
#include "Transformation.hpp"
|
|
#include "MilkdropCompatability.hpp"
|
|
#include "Waveform.hpp"
|
|
#include "NativePreset.hpp"
|
|
|
|
class Dancer : public Waveform
|
|
{
|
|
public:
|
|
|
|
float meanbass;
|
|
float meanmid;
|
|
float meantreb;
|
|
float mi2_prg;
|
|
float gam;
|
|
float mi_prg;
|
|
float ba_prg;
|
|
float tr_prg;
|
|
|
|
float dim;
|
|
float xpos;
|
|
float ypos;
|
|
|
|
|
|
float rand_offset1;
|
|
float rand_offset2;
|
|
float rand_offset3;
|
|
|
|
|
|
Dancer():Waveform(16)
|
|
{
|
|
thick = true;
|
|
smoothing = 0.5;
|
|
|
|
meanbass = 0;
|
|
meanmid = 0;
|
|
meantreb = 0;
|
|
mi2_prg = 0;
|
|
gam = 0;
|
|
mi_prg = 0;
|
|
ba_prg = 0;
|
|
tr_prg = 0;
|
|
|
|
dim = (rand()%20)*.01;
|
|
//dim *= 0.5;
|
|
dim += 0.4;
|
|
|
|
|
|
ypos = ((rand()%60)*.01)-0.3;
|
|
xpos = ((rand()%60)*.01)-0.3;
|
|
xpos+=(1-dim) * 0.5;
|
|
ypos+=(1-dim) * 0.5;
|
|
|
|
rand_offset1= (rand()%200)*.01;
|
|
rand_offset2= (rand()%400)*.01;
|
|
rand_offset3= (rand()%600)*.01;
|
|
|
|
}
|
|
|
|
ColoredPoint PerPoint(ColoredPoint p, const WaveformContext context)
|
|
{
|
|
|
|
|
|
meanbass = 0.01*(meanbass*99+context.music->bass);
|
|
meantreb = 0.01*(meantreb*99+context.music->treb);
|
|
meanmid = 0.01*(meanmid*99+context.music->mid);
|
|
float bassdiff = (context.music->bass - meanbass)*15;
|
|
float trebdiff = (context.music->treb - meantreb)*15;
|
|
float middiff = (context.music->mid - meanmid)*15;
|
|
float ba = min(above(bassdiff,0)*bassdiff*.005,.11);
|
|
float tr = min(above(trebdiff,0)*trebdiff*.005,.11);
|
|
float mi = min(above(middiff,0)*middiff*.005,.11);
|
|
|
|
mi2_prg = mi2_prg+mi;
|
|
gam = abs(gam-above(mi2_prg,5));
|
|
mi2_prg= if_milk(above(mi2_prg,5),0,mi2_prg);
|
|
|
|
float s = context.sample_int;
|
|
//Gambe
|
|
p.x= if_milk(equal(int(s),1),.4,.4);
|
|
p.y= if_milk(equal(int(s),1),.2+((ba+tr)*.5)*gam,.2+((ba+tr)*.5)*gam);
|
|
|
|
p.x= if_milk(equal(int(s),2),.5+sin(ba*100)*.03,p.x);
|
|
p.y= if_milk(equal(int(s),2),.4,p.y);
|
|
|
|
p.x= if_milk(equal(int(s),3),.6,p.x);
|
|
p.y= if_milk(equal(int(s),3),.2+((ba+tr)*.5)*(1-gam),p.y);
|
|
|
|
p.x= if_milk(equal(int(s),4),.5+sin(ba*100)*.03,p.x);
|
|
p.y= if_milk(equal(int(s),4),.4,p.y);
|
|
|
|
//Corpo
|
|
p.x= if_milk(equal(int(s),5),.5,p.x);
|
|
p.y= if_milk(equal(int(s),5),.6,p.y);
|
|
|
|
//Braccia
|
|
p.x= if_milk(equal(int(s),6),.4-mi*.23,p.x);
|
|
p.y= if_milk(equal(int(s),6),.5+mi,p.y);
|
|
|
|
p.x= if_milk(equal(int(s),7),.5,p.x);
|
|
p.y= if_milk(equal(int(s),7),.6,p.y);
|
|
|
|
p.x= if_milk(equal(int(s),8),.6+tr*.23,p.x);
|
|
p.y= if_milk(equal(int(s),8),.5+tr,p.y);
|
|
|
|
p.x= if_milk(equal(int(s),9),.5,p.x);
|
|
p.y= if_milk(equal(int(s),9),.6,p.y);
|
|
|
|
//Testa
|
|
p.x= if_milk(equal(int(s),10),.5,p.x);
|
|
p.y= if_milk(equal(int(s),10),.62,p.y);
|
|
|
|
p.x= if_milk(equal(int(s),11),.47-ba*.23,p.x);
|
|
p.y= if_milk(equal(int(s),11),.62,p.y);
|
|
p.x= if_milk(equal(int(s),12),.47-ba*.23,p.x);
|
|
p.y= if_milk(equal(int(s),12),.67+ba*.23,p.y);
|
|
|
|
p.x= if_milk(equal(int(s),13),.53+ba*.23,p.x);
|
|
p.y= if_milk(equal(int(s),13),.67+ba*.23,p.y);
|
|
|
|
p.x= if_milk(equal(int(s),14),.53+ba*.23,p.x);
|
|
p.y= if_milk(equal(int(s),14),.62,p.y);
|
|
|
|
p.x= if_milk(equal(int(s),15),.50,p.x);
|
|
p.y= if_milk(equal(int(s),15),.62,p.y);
|
|
|
|
|
|
|
|
mi_prg= if_milk(above(mi_prg,5),0,mi_prg+mi*.1);
|
|
ba_prg= if_milk(above(ba_prg,5),0,ba_prg+ba*.1);
|
|
tr_prg= if_milk(above(tr_prg,5),0,tr_prg+tr*.1);
|
|
|
|
float temp_dim = dim + 0.2 * sin(mi_prg + rand_offset1);
|
|
float temp_xpos = xpos + 0.2 * cos(ba_prg + rand_offset2);
|
|
float temp_ypos = ypos + 0.2* sin(tr_prg + rand_offset3);
|
|
|
|
p.x=p.x*temp_dim+temp_xpos;
|
|
p.y=p.y*temp_dim+temp_ypos;
|
|
|
|
float hm=context.sample+mi2_prg;
|
|
float ht=context.sample+tr_prg;
|
|
float hb=context.sample+ba_prg;
|
|
|
|
p.r=hm;
|
|
p.g=ht;
|
|
p.b=hb;
|
|
p.a=.8;
|
|
return p;
|
|
}
|
|
};
|
|
|
|
class MstressJuppyDancer : public Pipeline
|
|
{
|
|
public:
|
|
Dancer dancer[10];
|
|
|
|
float dx, dy, cx, cy, time;
|
|
|
|
float q1,meanmid,middiff,mi_prg,gam, bass;
|
|
|
|
MstressJuppyDancer() : Pipeline()
|
|
{
|
|
|
|
for(int x = 0; x< 10; x++)
|
|
drawables.push_back(&dancer[x]);
|
|
|
|
textureWrap = false;
|
|
screenDecay = 0.3;
|
|
|
|
|
|
q1 = 0;
|
|
meanmid = 0;
|
|
middiff = 0;
|
|
mi_prg = 0;
|
|
gam = 0;
|
|
|
|
}
|
|
|
|
virtual void Render(const BeatDetect &music, const PipelineContext &context)
|
|
{
|
|
meanmid = 0.01*(meanmid*99+music.mid);
|
|
middiff = (music.mid - meanmid)*15;
|
|
float mi = min(above(middiff,0)*middiff*.005,.11);
|
|
mi_prg = mi_prg+mi;
|
|
gam = abs(gam-above(mi_prg,.5));
|
|
mi_prg= if_milk(above(mi_prg,.5),0,mi_prg);
|
|
q1 = gam;
|
|
bass = music.bass;
|
|
}
|
|
|
|
virtual Point PerPixel(Point p, const PerPixelContext context)
|
|
{
|
|
|
|
float sx = -below(p.y,0.8)*.001;
|
|
float dx = .01*bass*(1-q1*2)*below(p.y,0.8);
|
|
float rot=rot+.051*below(p.y,0.8);
|
|
float cx=trunc(p.x*16)/16;
|
|
float cy=trunc(p.y*16)/16;
|
|
|
|
Transforms::Scale(p,context,sx,1,cx,cy);
|
|
Transforms::Rotate(p,context,rot,cx,cy);
|
|
Transforms::Transform(p,context,dx,0);
|
|
|
|
return p;
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
typedef NativePreset<MstressJuppyDancer> MstressJuppyDancerPreset;
|
|
|
|
extern "C" MstressJuppyDancerPreset * create(const char * url) {
|
|
return new MstressJuppyDancerPreset(std::string(url));
|
|
}
|
|
|
|
extern "C" void destroy(MstressJuppyDancerPreset * preset) {
|
|
delete preset;
|
|
}
|