package com.gebauz.pingK;
import java.util.Vector;
import com.gebauz.pingK.util.Vector2D;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffColorFilter;
public class WallImpactEffect
{
Bitmap mWallImpact
;
Vector<WallImpactInstance
> mInstances =
new Vector<WallImpactInstance
>();
static public final float INSTANCE_LIFE_TIME = 0.5f
;
class WallImpactInstance
{
Vector2D position =
new Vector2D
();
float lifeTime =
0;
float directionDegrees =
0;
public WallImpactInstance
(float x,
float y,
float direction
) {
position.
x = x
;
position.
y = y
;
directionDegrees = direction
;
}
public void update
(float deltaTime
) {
lifeTime += deltaTime
;
}
public void render
(Canvas canvas
) {
float width = mWallImpact.
getWidth();
Paint paint =
new Paint();
int alpha =
255;
alpha =
(int)((1.0f-
(lifeTime / INSTANCE_LIFE_TIME
))* 255.0f
);
int color =
Color.
argb(alpha,
255,
0,
153);
paint.
setColor(color
);
paint.
setColorFilter(new PorterDuffColorFilter
(color, PorterDuff.
Mode.
MULTIPLY));
Matrix matrix =
new Matrix
();
matrix.
setTranslate(position.
x - width/
2, position.
y - width/
2);
Matrix mirror =
new Matrix
();
mirror.
postRotate(directionDegrees, width/
2, width/
2);
matrix.
reset();
matrix.
postConcat(mirror
);
Matrix trans =
new Matrix
();
trans.
setTranslate(position.
x - width/
2, position.
y - width/
2);
matrix.
postConcat(trans
);
canvas.
drawBitmap(mWallImpact, matrix, paint
);
}
public float getLifeTime
() {
return lifeTime
;
}
}
public void init
(Resources resources
) {
mWallImpact = BitmapFactory.
decodeResource(resources, R.
drawable.
wallimpact);
}
public void update
(float deltaTime
) {
int i =
0;
while (i
< mInstances.
size()) {
WallImpactInstance instance = mInstances.
get(i
);
instance.
update(deltaTime
);
if (instance.
getLifeTime() > INSTANCE_LIFE_TIME
) {
mInstances.
remove(i
);
continue;
}
i++
;
}
}
public void render
(Canvas canvas
) {
for (int i =
0; i
< mInstances.
size(); i++
) {
mInstances.
get(i
).
render(canvas
);
}
}
public void spawnInstance
(float x,
float y,
float directionDegrees
) {
mInstances.
add(new WallImpactInstance
(x, y, directionDegrees
));
}
public void clearAllInstances
() {
mInstances.
removeAllElements();
}
}