package no.agens.depth.headers;
import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.graphics.Shader;
import android.graphics.Xfermode;
import com.github.florent37.depth.lib.MathHelper;
public class NoiseEffect extends Renderable {
private Paint paint = new Paint();
BitmapShader shader;
Matrix matrix;
float scale;
public NoiseEffect(Bitmap bitmap, int grainFPS, float scale) {
super(bitmap, 0, 0);
shader = new BitmapShader(bitmap, Shader.TileMode.REPEAT, Shader.TileMode.REPEAT);
matrix = new Matrix();
shader.setLocalMatrix(matrix);
paint.setShader(shader);
paint.setAlpha(144);
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SCREEN));
lastGrainOffset = System.currentTimeMillis();
this.grainFPS = grainFPS;
this.scale=scale;
}
@Override
public void draw(Canvas canvas) {
canvas.drawPaint(paint);
}
long lastGrainOffset;
private int grainFPS;
@Override
public void update(float deltaTime, float wind) {
if (lastGrainOffset + grainFPS < System.currentTimeMillis()) {
matrix.reset();
matrix.setScale(scale, scale);
matrix.postTranslate(MathHelper.randomRange(-bitmap.getWidth() * 10f, bitmap.getWidth() * 10f), MathHelper.randomRange(-bitmap.getHeight() * 10f, bitmap.getHeight() * 10f));
shader.setLocalMatrix(matrix);
lastGrainOffset = System.currentTimeMillis();
}
}
private static final Xfermode[] sModes = {
new PorterDuffXfermode(PorterDuff.Mode.CLEAR),
new PorterDuffXfermode(PorterDuff.Mode.SRC),
new PorterDuffXfermode(PorterDuff.Mode.DST),
new PorterDuffXfermode(PorterDuff.Mode.SRC_OVER),
new PorterDuffXfermode(PorterDuff.Mode.DST_OVER),
new PorterDuffXfermode(PorterDuff.Mode.SRC_IN),
new PorterDuffXfermode(PorterDuff.Mode.DST_IN),
new PorterDuffXfermode(PorterDuff.Mode.SRC_OUT),
new PorterDuffXfermode(PorterDuff.Mode.DST_OUT),
new PorterDuffXfermode(PorterDuff.Mode.SRC_ATOP),
new PorterDuffXfermode(PorterDuff.Mode.DST_ATOP),
new PorterDuffXfermode(PorterDuff.Mode.XOR),
new PorterDuffXfermode(PorterDuff.Mode.DARKEN),
new PorterDuffXfermode(PorterDuff.Mode.LIGHTEN),
new PorterDuffXfermode(PorterDuff.Mode.MULTIPLY),
new PorterDuffXfermode(PorterDuff.Mode.SCREEN)
};
public void setNoiseIntensity(float noiseIntensity) {
paint.setAlpha((int) (255f * noiseIntensity));
}
}