package vooga.towerdefense.view.gamescreens;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import javax.swing.JPanel;
import vooga.towerdefense.controller.Controller;
/**
* Displays the map and everything on the map.
*
* @author Angelica Schwartz
*
*/
public class MapScreen extends JPanel {
/**
* default serialized id.
*/
private static final long serialVersionUID = 1L;
/**
* controller to pass information to the back-end.
*/
private Controller myController;
/**
* mouse listener for clicking.
*/
private MouseAdapter myMouseAdapter;
/**
* mouse listener for movement & dragging.
*/
private MouseMotionAdapter myMouseMotionAdapter;
/**
* size of the MapScreen.
*/
private Dimension mySize;
/**
* Constructor.
*
* @param size
* @param controller
*/
public MapScreen (Dimension size, Controller controller) {
mySize = size;
setPreferredSize(mySize);
setFocusable(true);
setVisible(true);
setLayout(new BorderLayout());
myController = controller;
makeMouseAdapters();
addMouseListener(myMouseAdapter);
addMouseMotionListener(myMouseMotionAdapter);
repaint();
}
/**
* updates the MapScreen appropriately.
*/
public void update () {
revalidate();
repaint();
}
/**
* paints the MapScreen component.
*
* @param pen is the graphics object
*/
@Override
public void paintComponent (Graphics pen) {
super.paintComponent(pen);
myController.paintMap(pen);
}
/**
* helper method to create the listener for mouse input.
*/
private void makeMouseAdapters () {
myMouseAdapter = new MouseAdapter() {
@Override
public void mouseClicked (MouseEvent e) {
myController.handleMapClick(e.getPoint());
}
};
myMouseMotionAdapter = new MouseMotionAdapter() {
@Override
public void mouseMoved (MouseEvent e) {
myController.handleMapMouseDrag(e.getPoint());
}
};
}
}