package vooga.rts.state;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.util.Observer;
import javax.swing.ImageIcon;
import vooga.rts.commands.ClickCommand;
import vooga.rts.commands.Command;
import vooga.rts.gui.Window;
import vooga.rts.resourcemanager.ResourceManager;
/**
* The state of the game while its loading. Once it is done, a simple click will
* advance to the menu state.
* @author challenherzberg-brovold
*
*/
public class LoadingState extends SubState {
AffineTransform myTransform;
BufferedImage myBGImage;
ImageIcon myLoadingImage;
public static final String DEFAULT_BGIMAGE_LOCATION = "images/backgrounds/loading_bg.png";
public static final String DEFAULT_LOADING_LOCATION = "images/ajax_loader_gray_300.gif";
private MainState myMain;
public LoadingState (Observer observer) {
super(observer);
if (observer instanceof MainState) {
myMain = (MainState) observer;
}
myBGImage =
ResourceManager.getInstance().<BufferedImage> getFile(DEFAULT_BGIMAGE_LOCATION,
BufferedImage.class);
myLoadingImage =
new ImageIcon(ResourceManager.getInstance()
.<BufferedImage> getFile(DEFAULT_LOADING_LOCATION, BufferedImage.class));
}
@Override
public void update (double elapsedTime) {
if (!isLoading()) {
setChanged();
notifyObservers();
}
}
@Override
public void paint (Graphics2D pen) {
myTransform = new AffineTransform();
double sx = Window.D_X;
sx /= myBGImage.getWidth();
double sy = Window.D_Y;
sy /= myBGImage.getHeight();
myTransform.scale(sx, sy);
pen.drawImage(myBGImage, myTransform, null);
Rectangle screen = pen.getDeviceConfiguration().getBounds();
pen.setColor(Color.white);
pen.setFont(new Font("Georgia", Font.PLAIN, 72));
pen.drawString("Game is Loading...", 200, 300);
pen.setFont(new Font("Georgia", Font.PLAIN, 30));
pen.drawString("Please Wait...", 200, 380);
if (!isLoading()) {
pen.setFont(new Font("Georgia", Font.PLAIN, 30));
pen.drawString("Click to start.", 200, 380);
}
}
@Override
public void receiveCommand (Command command) {
if (command.getMethodName().equals(ClickCommand.LEFT_CLICK)) {
update(0);
}
}
/**
*
* @return whether or not the game is finished loadings
*/
private boolean isLoading () {
return ResourceManager.getInstance().isLoading() || !myMain.isReady();
}
@Override
public void activate () {
ResourceManager.getInstance().load();
}
}