blob: 3f4af0472180c7f62da41dcbe38b1b57435b90ca [file] [log] [blame]
/*
* RovastarFractalSpiral.hpp
*
* Created on: Jun 22, 2008
* Author: pete
*/
#include "Pipeline.hpp"
#include "Transformation.hpp"
#include "MilkdropCompatability.hpp"
#include "NativePreset.hpp"
class RovastarFractalSpiral : public Pipeline
{
public:
Border border;
float dx, dy, cx, cy, time;
RovastarFractalSpiral() : Pipeline()
{
drawables.push_back(&border);
textureWrap = true;
screenDecay = 1.0;
border.outer_size = 0.01;
border.outer_a = 1.0;
border.inner_size = 0.02;
border.inner_a = 1.0;
}
virtual void Render(const BeatDetect &music, const PipelineContext &context)
{
time = context.time;
border.outer_r = 0.3 - 0.3*(0.5*sin(time*0.701)+ 0.3*cos(time*0.438));
border.outer_g = 0.6- 0.4*sin(time*2.924);
border.outer_b = 0.35 - 0.3*cos(time*0.816);
cx = 0.5 - 0.1*sin(time*0.342);
cy = 0.5 + 0.1*sin(time*0.433);
border.inner_r = 0.5 + 0.5*sin(time*3.034);
border.inner_g = 0.5 + 0.5*sin(time*2.547);
border.inner_b = 0.5 + 0.5*sin(time*1.431);
dx = -0.008*sin(time*0.23);
dy = -0.008*sin(time*0.2);
}
virtual PixelPoint PerPixel(PixelPoint p, const PerPixelContext context)
{
float q1 = 8.05+(sin(p.x+0.137*time)-cos(p.y+0.213*time));
int val1 = abs(p.x*3-0.4*sin(q1));
int val2 = abs(p.y*3+0.4*sin(q1));
val1 = val1%2;
val2 = val2%2;
float box=(1-context.rad)+ 0.5 * val1 + 0.5*val2;
float zoom = if_milk(above(box,1),q1*.1,0.998531);
float rot = if_milk(above(box,1),1*sin(0.385*time),0.02);
Transforms::Zoom(p,context,zoom,1.01);
Transforms::Rotate(p,context,rot,cx,cy);
Transforms::Transform(p,context,dx,dy);
return p;
}
};
typedef NativePreset<RovastarFractalSpiral> RovastarFractalSpiralPreset;
extern "C" RovastarFractalSpiralPreset * create(const char * url) {
return new RovastarFractalSpiralPreset(std::string(url));
}
extern "C" void destroy(RovastarFractalSpiralPreset * preset) {
delete preset;
}