package advanced.plasmaPole;
import java.io.IOException;
import msafluid.MSAFluidSolver2D;
import org.mt4j.components.MTComponent;
import processing.core.PApplet;
import processing.core.PGraphics;
import de.sciss.jcollider.Synth;
public class Pole extends MTComponent{
float height = 0;
float width = 0;
float x=width/2;
float y=height/2;
float vx=0;
float vy=0;
float yPadding = 20;
float upperBoundsY = yPadding;
float lowerBoundsY = height - yPadding;
String paramX;
String paramY;
SynthParamMapper mapper;
float scaleX;
float scaleY;
float scalingFactor = 2000;
MSAFluidSolver2D fluidSolver;
Synth associatedSynth;
public Pole(PApplet applet, MSAFluidSolver2D fluidSolver ) {
super(applet);
height = applet.height;
width = applet.width;
vx=0;
vy=0;
yPadding = 20;
upperBoundsY = yPadding;
lowerBoundsY = height - yPadding;
scalingFactor = 2000;
this.fluidSolver = fluidSolver;
}
public void setSynthAndParams(Synth associatedSynth, String paramX, String paramY, SynthParamMapper mapper) {
this.associatedSynth = associatedSynth;
this.paramX = paramX;
this.paramY = paramY;
this.mapper = mapper;
}
public void placeBall(float x, float y) {
this.x = x;
this.y = y;
}
public static class SynthParamMapper {
public float mapX(float x) {
return x;
}
public float mapY(float y) {
return y;
}
}
@Override
public void drawComponent(PGraphics g) {
draw(g, fluidSolver);
}
public void draw(PGraphics p, MSAFluidSolver2D fluidSolver) {
p.pushStyle();
p.fill(150,100,150,150);
p.stroke(0);
p.strokeWeight(3);
int index = fluidSolver.getIndexForNormalizedPosition(x/width,y/height);
float fluidvy = fluidSolver.v[index]*scalingFactor;
float fluidvx = fluidSolver.u[index]*scalingFactor;
float fluidvscale = 10;
if (Math.abs(fluidvx + fluidvy) < 3) {
fluidvscale = 100; //now it flys a lot better when you push it
}
//fluidvscale = 100/abs(fluidvx + fluidvy+0.001);
vy = (fluidvy)/fluidvscale+(fluidvscale-1)*vy/fluidvscale;
vx = (fluidvx)/fluidvscale+(fluidvscale-1)*vx/fluidvscale;
p.ellipse(x,y,50,50);
p.line(x, y, x+vx*3, y+vy*3);
p.popStyle();
if (associatedSynth != null) {
try {
associatedSynth.set(new String[] { paramX, paramY },
new float[] { mapper.mapX(vx), mapper.mapY(vy) });
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}