package vooga.towerdefense.controller.modes; import java.awt.Dimension; import java.awt.Point; import util.Location; import vooga.towerdefense.controller.Controller; import vooga.towerdefense.gameelements.GameElement; /** * A build mode used to aid in the placing and building of towers. * * @author Jimmy Longley * @author Angelica Schwartz */ public class BuildMode extends ControlMode { /** * item that the user wants to build. */ private GameElement myItemToBuild; private double myCost; /** * sets the item the user is trying to build. * * @param item * , gotten from shop */ public void setItemToBuild(GameElement item) { myItemToBuild = item; } /** * sets the cost of the item to be built. * @param cost */ public void setCost(double cost) { myCost = cost; } /** * handles a click on the map screen in Build mode. * * @param p * @param controller */ @Override public void handleMapClick(Point p, Controller controller) { Dimension tileSize = controller.getTileSize(); int tilesWide = (int) Math.ceil(myItemToBuild.getSize().getWidth() / tileSize.getWidth()); int tilesTall = (int) Math.ceil(myItemToBuild.getSize().getHeight() / tileSize.getHeight()); Location snappedLocation = controller .getPointSnappedToGrid(new Location(p.getX(), p.getY())); myItemToBuild.setCenter(snappedLocation.getX(), snappedLocation.getY()); if (controller.canBuildHere(p, tilesWide, tilesTall)) controller.fixItemOnMap(myItemToBuild, p); controller.spend(myCost); } /** * handles mouse dragging on the map screen in Build mode. * * @param p * @param controller */ @Override public void handleMapMouseDrag(Point p, Controller controller) { Location snappedLocation; try { snappedLocation = controller .getPointSnappedToGrid(new Location(p.getX(), p.getY())); } catch( NullPointerException e) { snappedLocation = new Location(); } Dimension tileSize = controller.getTileSize(); int tilesWide = (int) Math.ceil(myItemToBuild.getSize().getWidth() / tileSize.getWidth()); int tilesTall = (int) Math.ceil(myItemToBuild.getSize().getHeight() / tileSize.getHeight()); if (controller.canBuildHere(p, tilesWide, tilesTall)) controller.paintGhostImage(myItemToBuild.getPixmap(), snappedLocation, myItemToBuild.getSize()); } }