package no.agens.depth;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import no.agens.depth.headers.PathBitmapMesh;
import no.agens.depth.headers.Renderable;
public class Water extends Renderable {
public static final int VERTS = 6;
private float height, width;
Foam[] foams = new Foam[4];
int numberOfWaves;
PathBitmapMesh water;
private float waveHeight;
public Water(Bitmap bitmap, Bitmap foam, float y, float height, float width, int waves) {
super(bitmap, 0, y);
this.height = height;
this.width = width;
numberOfWaves = waves;
debugPaint.setColor(Color.RED);
debugPaint.setStyle(Paint.Style.STROKE);
lastEmit = System.currentTimeMillis();
water = new PathBitmapMesh(VERTS, 1, bitmap, 1500);
foams[0] = new Foam(VERTS, 1, foam, 0, height / 12, 1500);
foams[1] = new Foam(VERTS, 1, foam, -height / 5, height / 5, 1500);
foams[1].setAlpha(100);
foams[2] = new Foam(VERTS, 1, foam, -height / 12, height / 12, 1450);
foams[2].setVerticalOffset(height / 7);
foams[3] = new Foam(VERTS, 1, foam, -height / 12, height / 12, 1400);
foams[3].setVerticalOffset(height / 4);
waveHeight = height / 10;
createPath();
}
@Override
public void pause() {
super.pause();
water.pause();
for (Foam foam : foams)
foam.pause();
}
@Override
public void resume() {
super.resume();
water.resume();
for (Foam foam : foams)
foam.resume();
}
@Override
public void destroy() {
super.destroy();
for (Foam foam : foams)
foam.destroy();
}
Paint debugPaint = new Paint();
@Override
public void draw(Canvas canvas) {
water.draw(canvas);
for (Foam foam : foams) {
foam.draw(canvas);
}
}
@Override
public void update(float deltaTime, float wind) {
super.update(deltaTime, wind);
for (Foam foam : foams) {
foam.update(deltaTime);
}
water.matchVertsToPath(waterPath, height, ((bitmap.getWidth() / numberOfWaves) * 4f));
for (Foam foam : foams) {
foam.matchVertsToPath(waterPath, foam.getBitmap().getWidth() / numberOfWaves * 4f);
}
if (lastEmit + emitInterWall < System.currentTimeMillis()) {
for (Foam foam : foams) {
foam.calcWave();
}
lastEmit = System.currentTimeMillis();
}
}
private Path waterPath = new Path();
private void createPath() {
waterPath.reset();
waterPath.moveTo(0, y);
int step = (int) (width / numberOfWaves);
boolean goLeft = true;
for (int i = 0; i < numberOfWaves; i++) {
if (goLeft)
waterPath.cubicTo(x + step * i, y, x + step * i + step / 2f, y + waveHeight, x + step * i + step, y);
else
waterPath.cubicTo(x + step * i, y, x + step * i + step / 2f, y - waveHeight, x + step * i + step, y);
goLeft = !goLeft;
}
}
long lastEmit;
private int emitInterWall = 1000;
public void setWaveHeight(float waveHeight) {
this.waveHeight = waveHeight;
createPath();
}
}