/**
SPACE : lägg till vatten i mitten.
R : Ta bort vatten från mitten.
W : lägg till vatten slumpmässigt.
1-9 : modifiera våg-parametern.
Q : slå av/på visning av separat terräng (påverkar hastigheten!).
A,S,D : modifiera renderingen av vattnet (gourad,textureBlending,wireframe).
Z,X,C : modifiera renderingen av terrängen (gourad,textureBlending,wireframe).
T : slumpa fram ny terräng.
Det som slukar mest resurser är renderingen. Utan rendering har appletten skrämts upp i 30 fps för ett 333*333 grid, alltså en miljon celler. :D
Inte särskilt spektakulärt, men det händer någonting iaf.
Vitt vatten betyder starka strömmar.
*/
Terrain terrain;
Water water;
float rotX=PI/3, rotZ=PI/6;
int mousePX=0, mousePY=0;
boolean drawTerrain = false;
//-------------------------
void setup(){
size(500,500, P3D);
terrain = new Terrain(64);
water = new Water( terrain, 100 );
frameRate(30);
}
//-------------------------
void draw(){
background(255);
//println( "total volume: "+(int)water.volume+"/"+(int)water.addedVolume );
//println( "fps: "+frameRate );
directionalLight(155,155,155, 0,0,-1);
ambientLight(100,100,100);
//lights();
translate(width/2,width/2,0);
if( mousePressed ){
rotateX( rotX - (mouseY-mousePY)*PI/height );
rotateZ( rotZ - (mouseX-mousePX)*TWO_PI/width );
} else {
rotateX( rotX );
rotateZ( rotZ );
}
translate(0,0,-width*0.25);
scale(1.0);
water.update();
water.visualize();
if(drawTerrain) terrain.visualize();
}
//-------------------------
void mousePressed(){
mousePX = mouseX;
mousePY = mouseY;
}
//-------------------------
void mouseReleased(){
rotX -= (mouseY-mousePY)*PI/height;
rotZ -= (mouseX-mousePX)*TWO_PI/width;
}
//-------------------------
void keyPressed(){
if(key>='1' && key<='9') water.flowDecay = 0.5+(key-'1'+1.5)/20;
if(key==' ') water.addMoreWater( 30 );
if(key=='r') water.removeWater();
if(key=='w') water.randomWater( 30 );
if(key=='q') drawTerrain = !drawTerrain;
if(key=='a') water.gouraud = !water.gouraud;
if(key=='s') water.textureBlend = !water.textureBlend;
if(key=='d') water.wireframe = !water.wireframe;
if(key=='z') terrain.gouraud = !terrain.gouraud;
if(key=='x') terrain.textureBlend = !terrain.textureBlend;
if(key=='c') terrain.wireframe = !terrain.wireframe;
if(key=='t') water = new Water( terrain = new Terrain(64) , 0 );
}
//#########################