import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import com.genuts.gameui.*;
/**
* Display moving balls and scrolling playfield with all tiles of the example.
* A special wrapper follow the selected ball.
* The size of each tile is automaticaly computed.
*/
public class FollowPathFinder extends Applet implements MouseListener {
private PlayField playfield = null;
private Sprite currentSprite;
private Image ballImage = null;
private Image redBallImage = null;
public void init() {
setLayout(null);
// Loading images
ballImage = getImage(getClass().getResource("anim-split.gif"));
redBallImage = getImage(getClass().getResource("anim-split-red.gif"));
Image tileImage = getImage(getClass().getResource("tile.gif"));
MediaTracker tracker = new MediaTracker(this);
tracker.addImage(ballImage, 0);
tracker.addImage(redBallImage, 0);
tracker.addImage(tileImage, 0);
try {
tracker.waitForID(0);
} catch (InterruptedException e) {
System.out.println("Loading interrupted");
}
// Gets the size of a tile
Tiles.tileSize = tileImage.getWidth(null);
// Creates the playfield
SpriteCollisionManager collisionManager = new SpriteCollisionManager(10);
playfield = new PlayField(collisionManager,
10*Tiles.tileSize,
5*Tiles.tileSize);
playfield.setPreferredSize(Tiles.tiles[0].length*Tiles.tileSize,
Tiles.tiles.length*Tiles.tileSize);
playfield.setBackground(Color.white);
// Disposes tiles from class Tiles
for (int y = 0; y < Tiles.tiles.length; y++) {
for (int x = 0; x < Tiles.tiles[y].length; x++) {
if (Tiles.tiles[y][x]) {
Sprite tile = new Sprite(tileImage);
tile.setPosition(x*Tiles.tileSize, y*Tiles.tileSize);
playfield.addSprite(tile);
}
}
}
// Disposes 20 balls
for (int cpt = 0; cpt < 19; cpt++) {
AnimatedSprite anim = new AnimatedSprite(ballImage, 8, 1, 2);
anim.setCurrentPictureNumber((int) (Math.random()*8));
MovingBall moving = new MovingBall(anim, 1, 1);
if ((int) (Math.random()*2) == 0) {
moving.setClockWise(false);
}
playfield.addSprite(moving);
while (!moving.setPosition((int) (Math.random()*playfield.getPreferredWidth()),
(int) (Math.random()*playfield.getPreferredHeight())));
}
// Adds a ball with the follow wrapper
AnimatedSprite anim = new AnimatedSprite(redBallImage, 8, 1, 2);
anim.setCurrentPictureNumber((int) (Math.random()*8));
MovingBall moving = new MovingBall(new FollowWrapper(anim), 1, 1);
if ((int) (Math.random()*2) == 0) {
moving.setClockWise(false);
}
playfield.addSprite(moving);
while (!moving.setPosition((int) (Math.random()*playfield.getPreferredWidth()),
(int) (Math.random()*playfield.getPreferredHeight())));
currentSprite = moving;
// Displays the playfield
add(playfield);
setSize(10*Tiles.tileSize,
5*Tiles.tileSize);
// Adds mouse listeners
playfield.addMouseListener(this);
}
public void start() {
// Activate the playfield
playfield.setPause(false);
}
public void stop() {
if (playfield != null) {
playfield.stop();
}
}
////////////////////////////////////////////////////
///////// MouseListener //////////////////////////
////////////////////////////////////////////////////
public void mouseClicked(MouseEvent e) {
}
public void mousePressed(MouseEvent e) {
Sprite sprite = ((SpriteCollisionManager) playfield.getCollisionManager()).getSpriteAt(playfield.getXOffset() + e.getX(), playfield.getYOffset() + e.getY());
if ((sprite != null) && (sprite != currentSprite)) {
Sprite actionSprite = sprite.getFinalActionSprite();
if (actionSprite instanceof AnimatedSprite) {
playfield.removeSprite(currentSprite);
playfield.removeSprite(sprite);
FollowWrapper followWrapper = (FollowWrapper) currentSprite.getActionSprite();
((SpriteWrapper) currentSprite).setActionSprite(followWrapper.getActionSprite());
((AnimatedSprite) currentSprite.getFinalActionSprite()).setSequence(ballImage, 8, 1);
((SpriteWrapper) followWrapper).setActionSprite(sprite.getActionSprite());
((SpriteWrapper) sprite).setActionSprite(followWrapper);
((AnimatedSprite) actionSprite).setSequence(redBallImage, 8, 1);
playfield.addSprite(currentSprite);
playfield.addSprite(sprite);
currentSprite = sprite;
}
}
}
public void mouseReleased(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
}