package vooga.towerdefense.view.introscreens;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.HashMap;
import java.util.Map;
import javax.swing.JButton;
import util.Location;
import vooga.towerdefense.util.Pixmap;
import vooga.towerdefense.view.TDView;
/**
*
* THIS CLASS IS NOT USED IN THE GAME AS OUR IDEA OF WHAT LEVELS ARE
* CHANGED TOWARDS THE END OF THE PROJECT. LEVELS ARE NOW DEFINED IN
* TERMS OF WAVES.
*
* This view screen enables the player to select the mode they want to play in.
* There is easy, medium and hard modes.
*
* @author Leonard K. Ng'eno
*
*/
public class LevelsSelectorScreen extends SelectScreen {
private static final String CHECKED_IMAGE = "checked.gif";
private static final long serialVersionUID = 1L;
private static final Dimension SIZE = new Dimension(150, 150);
private MouseAdapter myMouseListener;
private Pixmap myEasyLevel;
private Pixmap myMediumLevel;
private Pixmap myHardLevel;
private Map<Pixmap, Rectangle> myLevelsImages;
private JButton myNextScreenButton;
private boolean myLevelSelected = false;
private String myPrevName = "";
public LevelsSelectorScreen(Dimension size, TDView view) {
super(size, view);
setInputListener();
add(makeNextScreenButton(), BorderLayout.SOUTH);
myLevelsImages = new HashMap<Pixmap, Rectangle>();
initLevelsImages();
addMouseListener(myMouseListener);
}
// TODO Placeholder!! Need to fix how images are created
private void initLevelsImages () {
myEasyLevel = new Pixmap("easy.gif");
myMediumLevel = new Pixmap("medium.gif");
myHardLevel = new Pixmap("hard.gif");
myLevelsImages.put(myEasyLevel, new Rectangle(new Point(100, 200), SIZE));
myLevelsImages.put(myMediumLevel, new Rectangle(new Point(300, 200), SIZE));
myLevelsImages.put(myHardLevel, new Rectangle(new Point(500, 200), SIZE));
}
@Override
public void paintComponent (Graphics pen) {
super.paintComponent(pen);
displayImages((Graphics2D) pen);
}
@Override
public void displayImages (Graphics2D pen) {
for (Map.Entry<Pixmap, Rectangle> entry : myLevelsImages.entrySet()) {
entry.getKey().paint(pen,
new Location(entry.getValue().getCenterX(), entry.getValue()
.getCenterY()), SIZE);
}
}
private JButton makeNextScreenButton () {
myNextScreenButton = new JButton("NEXT");
myNextScreenButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed (ActionEvent e) {
if (myLevelSelected == true) {
// getView().createGUI();
}
}
});
return myNextScreenButton;
}
private void setInputListener () {
myMouseListener = new MouseAdapter() {
@Override
public void mouseClicked (MouseEvent e) {
checkPositionClicked(e.getPoint());
}
};
}
@Override
public void checkPositionClicked (Point point) {
if (!myPrevName.isEmpty()) {
for (Map.Entry<Pixmap, Rectangle> entry1 : myLevelsImages.entrySet()) {
if (entry1.getKey().getFilePath().equals(CHECKED_IMAGE)) {
entry1.getKey().setImage(myPrevName);
repaint();
}
}
}
for (Map.Entry<Pixmap, Rectangle> entry : myLevelsImages.entrySet()) {
if (entry.getValue().contains(point)) {
myLevelSelected = true;
selectedImage(entry.getKey());
}
}
}
private void selectedImage (Pixmap myImage) {
myPrevName = myImage.getFilePath();
myImage.setImage(CHECKED_IMAGE);
repaint();
}
}