package no.agens.depth; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.util.AttributeSet; import android.view.View; import no.agens.depth.headers.NoiseEffect; import no.agens.depth.headers.Renderable; import com.github.florent37.depth.lib.tween.FrameRateCounter; /** * Created by danielzeller on 01.10.14. */ public class WaterSceneView extends View { private Renderable[] renderables; private Water water; private NoiseEffect noiseScratchEffect; private NoiseEffect noise; public WaterSceneView(Context context) { super(context); } public WaterSceneView(Context context, AttributeSet attrs) { super(context, attrs); } public WaterSceneView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { super.onLayout(changed, left, top, right, bottom); if (renderables == null) { init(); } } private void init() { renderables = new Renderable[4]; Bitmap waterBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.water); Bitmap foam = BitmapFactory.decodeResource(getResources(), R.drawable.foam); setLayerType(View.LAYER_TYPE_HARDWARE, null); water = new Water(waterBitmap, foam, getYCoordByPercent(0.65f), getYCoordByPercent(1f), getXCoordByPercent(1f), 6); renderables[0] = water; Bitmap aura = BitmapFactory.decodeResource(getResources(), R.drawable.sun_aura); renderables[1] = new Renderable(aura, getXCoordByPercent(0.5f), getYCoordByPercent(0.35f)); Bitmap noiseScratch = BitmapFactory.decodeResource(getResources(), R.drawable.noise_scratch); Bitmap noiseReg = BitmapFactory.decodeResource(getResources(), R.drawable.noise); noiseScratchEffect = new NoiseEffect(noiseScratch, 100, 2f); renderables[2] = noiseScratchEffect; noise = new NoiseEffect(noiseReg, 30, 1.5f); renderables[3] = noise; setNoiseIntensity(0.5f); setWaveHeight(50); } @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); destroyResources(); } private void destroyResources() { for (Renderable renderable : renderables) renderable.destroy(); } @Override protected void onAttachedToWindow() { super.onAttachedToWindow(); if (renderables == null && getWidth() != 0) init(); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); float deltaTime = FrameRateCounter.timeStep(); for (Renderable renderable : renderables) { renderable.draw(canvas); renderable.update(deltaTime, 0); } if (!pasuse) invalidate(); } public void setPause(boolean pause) { // this.pasuse = pause; // if (!pause) { // FrameRateCounter.timeStep(); // invalidate(); // for (Renderable renderable : renderables) // renderable.resume(); // } else { // for (Renderable renderable : renderables) // renderable.pause(); // } } private boolean pasuse = false; private float getYCoordByPercent(float percent) { return getHeight() * percent; } private float getXCoordByPercent(float percent) { return getWidth() * percent; } public void setWaveHeight(float height) { water.setWaveHeight(height); } public void setNoiseIntensity(float noiseAmount) { noiseScratchEffect.setNoiseIntensity(noiseAmount); noise.setNoiseIntensity(noiseAmount); } }