import greenfoot.*; // (World, Actor, GreenfootImage, and Greenfoot)
import java.util.*;
/**
* An explosion. It starts by expanding and then collapsing.
* The explosion will explode other obejcts that the explosion intersects.
*
* @author Poul Henriksen
* @author Michael Kölling
* @version 1.1
*/
public class Explosion extends Actor
{
/** How many images should be used in the animation of the explostion */
private final static int IMAGE_COUNT= 8;
/**
* The images in the explosion. This is static so the images are not
* recreated for every object (improves performance significantly).
*/
private static GreenfootImage[] images;
/** Current size of the explosion */
private int imageNo = 0;
/** How much do we increment the index in the explosion animation. */
private int increment=1;
/**
* Create an explosion.
*/
public Explosion()
{
initialiseImages();
setImage(images[0]);
GreenfootImage baseImage = new GreenfootImage("explosion-big.png");
}
/**
* EXPLODE!
*/
public void act()
{
setImage(images[imageNo]);
imageNo += increment;
if (imageNo >= IMAGE_COUNT) {
increment = -increment;
imageNo += increment;
}
if (imageNo < 0) {
getWorld().removeObject(this);
}
}
/**
* Create the images for explosion.
*/
public synchronized static void initialiseImages()
{
GreenfootImage baseImage = new GreenfootImage("explosion-big.png");
if (images == null) {
//GreenfootImage baseImage = new GreenfootImage("explosion-big.png");
int maxSize = baseImage.getWidth();
int delta = maxSize / IMAGE_COUNT;
int size = 0;
images = new GreenfootImage[IMAGE_COUNT];
for (int i=0; i < IMAGE_COUNT; i++) {
size = size + delta;
images[i] = new GreenfootImage(baseImage);
images[i].scale(size, size);
}
}
}
}

