package vooga.towerdefense.view.gamescreens; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JButton; import javax.swing.JPanel; import vooga.towerdefense.controller.Controller; /** * This class enables the player to click on items * on the ShopScreen section, buy these * items, and then place them on the map screen. * * @author Leonard K. Ng'eno * */ public class ShopScreen extends JPanel { private static final long serialVersionUID = 1L; private static final int XCOORD = 0; private static final int YCOORD = 0; private static final String CANCEL_BUTTON_KEYWORD = "CancelButtonName"; private Color myBackgroundColor = Color.WHITE; private MouseAdapter myMouseListener; private Controller myController; private JButton myCancelButton; /** * constructor. * * @param size * @param controller */ public ShopScreen (Dimension size, Controller controller) { setPreferredSize(size); setFocusable(true); setLayout(new BorderLayout()); myController = controller; makeMouseListener(); addMouseListener(myMouseListener); setVisible(true); makeCancelButton(); } /** * paints the ShopScreen. * * @param pen */ @Override public void paintComponent (Graphics pen) { super.paintComponent(pen); pen.setColor(myBackgroundColor); pen.fillRect(XCOORD, YCOORD, getSize().width, getSize().height); myController.paintShop((Graphics2D) pen); repaint(); } /** * helper method to make the mouse listener. */ private void makeMouseListener () { myMouseListener = new MouseAdapter() { @Override public void mouseClicked (MouseEvent e) { if (e.getSource().equals(myCancelButton)) { myController.cancelPurchaseFromShop(); } else { setCancelButtonVisibility(true); myController.handleShopClickOnItem(e.getPoint()); } } }; } private void makeCancelButton () { myCancelButton = new JButton(myController.getStringFromResources(CANCEL_BUTTON_KEYWORD)); myCancelButton.addMouseListener(myMouseListener); this.add(myCancelButton, BorderLayout.PAGE_END); setCancelButtonVisibility(false); } /** * Sets the visibility of the Cancel Button to the value of the parameter * * @param visibility */ public void setCancelButtonVisibility (boolean visibility) { myCancelButton.setVisible(visibility); } }