import greenfoot.*;
public class EnemyDeathEffect extends Actor
{
private GreenfootImage[] frames;
private int frameInterval = 5;
private int currentFrame = 0;
private int frameCounter = 0;
private boolean fadingOut = false;
private int fadeSteps = 20;
private int fadeCounter = 0;
private GreenfootImage originalImage;
public EnemyDeathEffect()
{
frames = new GreenfootImage[]
{
new GreenfootImage("splat1.png"),
new GreenfootImage("splat2.png"),
new GreenfootImage("splat3.png"),
new GreenfootImage("splat4.png")
};
setImage(frames[0]);
}
public void act()
{
if (!fadingOut)
{
frameCounter++;
if (frameCounter >= frameInterval)
{
frameCounter = 0;
currentFrame++;
if (currentFrame >= frames.length)
{
//start fading out
fadingOut = true;
currentFrame = frames.length - 1;
originalImage = new GreenfootImage(frames[currentFrame]); //clone once
setImage(new GreenfootImage(originalImage)); //set a fresh copy
}
else
{
setImage(frames[currentFrame]);
}
}
}
else
{
fadeCounter++;
float alphaRatio = 1.0f - ((float)fadeCounter / fadeSteps);
if (alphaRatio < 0)
{
alphaRatio = 0;
}
GreenfootImage img = new GreenfootImage(originalImage); //reuse original
img.setTransparency((int)(255 * alphaRatio));
setImage(img);
if (fadeCounter >= fadeSteps)
{
if (getWorld() != null)
{
getWorld().removeObject(this);
}
}
}
}
}

