package nl.tudelft.bw4t.environmentstore.editor.controller; import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.Stack; import nl.tudelft.bw4t.environmentstore.editor.model.MapConverter; import nl.tudelft.bw4t.map.BlockColor; import nl.tudelft.bw4t.map.Entity; import nl.tudelft.bw4t.map.MapFormatException; import nl.tudelft.bw4t.map.Zone; import nl.tudelft.bw4t.map.renderer.AbstractMapController; import nl.tudelft.bw4t.map.renderer.MapRendererInterface; import nl.tudelft.bw4t.map.view.ViewBlock; import nl.tudelft.bw4t.map.view.ViewEPartner; import nl.tudelft.bw4t.map.view.ViewEntity; /** * The MapPreviewController class controls the map preview that is generated. * */ public class MapPreviewController extends AbstractMapController { private MapPanelController mapController; /** * Constructor for the MapPreviewController. * * @param mc * this is the controller for the environment we preview */ public MapPreviewController(MapPanelController mc) { super(MapConverter.createMap(mc.getEnvironmentMap())); this.mapController = mc; this.getRenderSettings().setUpdateDelay(100); } @Override public List<BlockColor> getSequence() { return getMap().getSequence(); } @Override public int getSequenceIndex() { return 0; } @Override public boolean isOccupied(Zone room) { return false; } @Override public Zone getDropZone() { try { return super.getDropZone(); } catch (MapFormatException e) { return null; } } @Override public Set<ViewBlock> getVisibleBlocks() { Set<ViewBlock> blocks = new HashSet<ViewBlock>(); for (Zone z : getMap().getZones()) { Rectangle2D roomBox = z.getBoundingbox().getRectangle(); double x = roomBox.getMinX(); double y = roomBox.getMinY() + 2; double roomsizeX = roomBox.getMinX() + roomBox.getWidth(); for (BlockColor color : z.getBlocks()) { if (x < roomsizeX - 2) { x = x + 2; } else { x = roomBox.getMinX() + 2; y = y + 3; } Rectangle2D newpos = new Rectangle2D.Double(x, y, ViewBlock.BLOCK_SIZE, ViewBlock.BLOCK_SIZE); Point2D point = new Point2D.Double(newpos.getX(), newpos.getY()); ViewBlock block = new ViewBlock(0, color, point); blocks.add(block); } } return blocks; } @Override public Set<ViewEntity> getVisibleEntities() { Set<ViewEntity> entities = new HashSet<ViewEntity>(); for (Entity e : getMap().getEntities()) { ViewEntity viewe = new ViewEntity(0, e.getName(), e.getPosition() .getX(), e.getPosition().getY(), new Stack<ViewBlock>(), 2); entities.add(viewe); } return entities; } @Override public Set<ViewEPartner> getVisibleEPartners() { return new HashSet<ViewEPartner>(); } @Override protected void updateRenderer(MapRendererInterface mri) { this.setMap(MapConverter.createMap(mapController.getEnvironmentMap())); mri.validate(); mri.repaint(); } @Override public void addVisibleBlock(ViewBlock b) { throw new UnsupportedOperationException(); } }