Bläddra i källkod

Finished Sidebar, see loadDrawableObjects() method in Sidebar.java for implementation of new facilities. It's VERY easy to use!

DaveyMathijssen 10 år sedan
förälder
incheckning
a678ac0e02

+ 5 - 0
src/gui/simulator/AccessPoint.java

@@ -18,6 +18,11 @@ public class AccessPoint extends DrawEngine implements Serializable {
         this.terrain = terrain;
     }
     
+    public AccessPoint(int x, int y, double scale, double distance) {
+        super(imageLocation, x, y, scale, distance, SimulatorPane.Objects.ENTRANCE);
+        this.terrain = terrain;
+    }
+    
     public String getFacilityName(){
     	return facilityName;
     }

+ 0 - 2
src/gui/simulator/DrawEngine.java

@@ -102,6 +102,4 @@ public abstract class DrawEngine {
     public Rectangle2D.Double getRect(){
         return new Rectangle2D.Double(-distanceToOtherObjects, - distanceToOtherObjects, Images.getImage(image).getWidth(null)  + 2* distanceToOtherObjects, Images.getImage(image).getHeight(null) + 2*distanceToOtherObjects);
     }
-
-
 }

+ 5 - 0
src/gui/simulator/ExitPoint.java

@@ -14,6 +14,11 @@ public class ExitPoint extends DrawEngine implements Serializable {
         this.terrain = terrain;
     }
     
+    public ExitPoint(int x, int y, double scale, double distance) {
+        super(imageLocation, x, y, scale, distance, SimulatorPane.Objects.EXIT);
+        this.terrain = terrain;
+    }
+    
     public String getFacilityName(){
     	return facilityName;
     }

+ 69 - 86
src/gui/simulator/Sidebar.java

@@ -8,10 +8,14 @@ import java.awt.BasicStroke;
 import java.awt.Color;
 import java.awt.Font;
 import java.awt.Graphics2D;
+import java.awt.Rectangle;
 import java.awt.event.MouseEvent;
 import java.awt.geom.Point2D;
 import java.awt.geom.Rectangle2D;
 import java.io.Serializable;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.LinkedHashMap;
 
@@ -22,7 +26,18 @@ public class Sidebar implements Serializable  {
 	private LinkedHashMap<String, DrawEngine> drawableStages = new LinkedHashMap<String, DrawEngine>();
 	private LinkedHashMap<String, DrawEngine> drawableFacilities = new LinkedHashMap<String, DrawEngine>();
 	private LinkedHashMap<String, DrawEngine> drawablePaths = new LinkedHashMap<String, DrawEngine>();
-	public enum SideBarTab{STAGES, FACILITIES, PATHS}
+	private ArrayList<LinkedHashMap<String, DrawEngine>> drawableArrays = new ArrayList<LinkedHashMap<String, DrawEngine>>();
+	public enum SideBarTab{
+		STAGES(0), FACILITIES(1), PATHS(2);
+		
+		public final int value;
+		SideBarTab(int value){
+			this.value = value;
+		}
+		int getValue(){
+			return value;
+		}
+	}
 	private SideBarTab currentTab = SideBarTab.STAGES;
 	private int tabWidth, tab1X, tab2X, tab3X;
 	
@@ -45,30 +60,35 @@ public class Sidebar implements Serializable  {
 	/*
 	 * Add your new objects to this method. This method is run when the sidebar is drawn and will automatically align and place 
 	 * all inserted objects. Only thing YOU have to do is insert nice parameter values to the object instantiation.
+	 * 
+	 * Important: only the scaling parameter matters, the x and y values will be overwritten by the system
 	 */
 	public void loadDrawableObjects(){
 		//stages
-		drawableStages.put("Stage1",new SimulatorStage(0, 62, 0.26, 1));
-		drawableStages.put("Stage2",new SimulatorStage(0, 62, 0.26, 1));
-		drawableStages.put("Stage3",new SimulatorStage(0, 62, 0.26, 1));
-		drawableStages.put("Stage4",new SimulatorStage(0, 62, 0.26, 1));
-		drawableStages.put("Stage5",new SimulatorStage(0, 62, 0.26, 1));
-		drawableStages.put("Stage6",new SimulatorStage(0, 62, 0.26, 1));
-		drawableStages.put("Stage7",new SimulatorStage(0, 62, 0.26, 1));
-		drawableStages.put("Stage8",new SimulatorStage(0, 62, 0.26, 1));
-		drawableStages.put("Stage9",new SimulatorStage(0, 62, 0.26, 1));
-		drawableStages.put("Stage10",new SimulatorStage(0, 62, 0.26, 1));
-		drawableStages.put("Stage11",new SimulatorStage(0, 62, 0.26, 1));
+		drawableStages.put("Stage1",new SimulatorStage(0, 0, 0.26, 1));
+		drawableStages.put("Stage2",new SimulatorStage(0, 0, 0.26, 1));
+		drawableStages.put("Stage3",new SimulatorStage(0, 0, 0.26, 1));
+		drawableStages.put("Stage4",new SimulatorStage(0, 0, 0.26, 1));
+		drawableStages.put("Stage5",new SimulatorStage(0, 0, 0.26, 1));
+		drawableStages.put("Stage6",new SimulatorStage(0, 0, 0.26, 1));
+		drawableStages.put("Stage7",new SimulatorStage(0, 0, 0.26, 1));
+		drawableStages.put("Stage8",new SimulatorStage(0, 0, 0.26, 1));
+		drawableStages.put("Stage9",new SimulatorStage(0, 0, 0.26, 1));
+		drawableStages.put("Stage10",new SimulatorStage(0, 0, 0.26, 1));
+		drawableStages.put("Stage11",new SimulatorStage(0, 0, 0.26, 1));
 		
 		//facilities
-		drawableFacilities.put("Toilet",new RestRoom(60, 275, 1 , 1));
-		drawableFacilities.put("Ingang",new AccessPoint(terrain, 0, 425, 0.5, 1));
-		drawableFacilities.put("Uitgang",new ExitPoint(terrain, 0, 525, 0.5, 1));
-		drawableFacilities.put("Snackbar",new SnackBar(0, 620, 0.5, 1));
+		drawableFacilities.put("Toilet",new RestRoom(0, 0, 0.8, 1));
+		drawableFacilities.put("Ingang",new AccessPoint(terrain, 0, 0, 0.26, 1));
+		drawableFacilities.put("Uitgang",new ExitPoint(terrain, 0, 0, 0.26, 1));
+		drawableFacilities.put("Snackbar",new SnackBar(0, 0, 0.2, 1));
 		
 		//paths
 		//drawablePaths.add("My awesome path name", new AwesomePath());
 
+		drawableArrays.add(drawableStages);
+		drawableArrays.add(drawableFacilities);
+		drawableArrays.add(drawablePaths);		
 	}
 	
 	public void draw(Graphics2D g2){
@@ -83,22 +103,22 @@ public class Sidebar implements Serializable  {
         g2.fill3DRect(tab2X, 30, tabWidth, 30, true);
         g2.fill3DRect(tab3X, 30, tabWidth, 30, true);       
         g2.setColor(Color.WHITE);
-        g2.setFont(new Font("Serif", Font.BOLD, 20));
+        g2.setFont(new Font("SansSerif", Font.BOLD, 20));
         //g2.drawString(str, x, y);
-        g2.drawString("Drag and drop", 30, 25);  
-        g2.setFont(new Font("Serif", Font.BOLD, 16));
+        g2.drawString("Drag and drop", 30, 23);  
+        g2.setFont(new Font("SansSerif", Font.PLAIN, 16));
         g2.drawString("Stages", tab1X+10, 50);
         g2.drawString("Facilities", tab2X+3, 50);
         g2.drawString("Paths", tab3X+15, 50);
         switch (currentTab) {
 		case STAGES:
-			g2.drawLine(tab1X+10, 55, tab1X+55, 55);
+			g2.drawLine(tab1X+10, 55, tab1X+60, 55);
 			break;
 		case FACILITIES:
-			g2.drawLine(tab2X+3, 55, tab2X+63, 55);
+			g2.drawLine(tab2X+3, 55, tab2X+64, 55);
 			break;
 		case PATHS:
-			g2.drawLine(tab3X+15, 55, tab3X+50, 55);
+			g2.drawLine(tab3X+15, 55, tab3X+55, 55);
 			break;
 		default:
 			break;
@@ -108,42 +128,19 @@ public class Sidebar implements Serializable  {
         g2.setColor(Color.BLACK);
         int objectPlacementX = 0;
         int objectPlacementY = 61;
-		switch (currentTab) {
-		case STAGES:
-			for(HashMap.Entry<String, DrawEngine> object : drawableStages.entrySet()){
-				object.getValue().draw(g2);
-				g2.drawString(object.getKey(), objectPlacementX, objectPlacementY + 95);
-				g2.drawRect(objectPlacementX, objectPlacementY, sideBarWidth/2, 100);
+
+		for(HashMap.Entry<String, DrawEngine> object : drawableArrays.get(currentTab.getValue()).entrySet()){
+			object.getValue().setX(objectPlacementX);
+			object.getValue().setY(objectPlacementY);
+			object.getValue().draw(g2);
+			g2.drawString(object.getKey(), objectPlacementX+2, objectPlacementY + 95);
+			g2.drawRect(objectPlacementX, objectPlacementY, sideBarWidth/2, 100);
+			objectPlacementX += 100;
+			//switch to next row
+			if(objectPlacementX % 200 == 0){
+				objectPlacementX = 0;
 				objectPlacementY += 100;
-				//switch to column2 if colum1 is filled
-				if(objectPlacementY > sideBarHeight)
-					objectPlacementY += sideBarWidth/2;
-	            //System.out.println(object.getKey() +" :: "+ object.getValue());
 			}
-			break;
-		case FACILITIES:
-			//toilet
-			DrawEngine restroom = new RestRoom(60,275, 1 , 10);
-			restroom.draw(g2);
-	        g2.drawString("Toilettage", 65, 400);
-	        //accespoint
-	        DrawEngine accesPoint = new AccessPoint(terrain, 0,425, 0.5, 10);
-	        accesPoint.draw(g2);
-	        g2.drawString("Ingang", 70, 500);
-	        //exitpoint
-	        DrawEngine exitPoint = new ExitPoint(terrain, 0,525, 0.5, 10);
-	        exitPoint.draw(g2);
-	        g2.drawString("Uitgang", 70, 600);
-	        //snackbar
-	        DrawEngine snackBar = new SnackBar(0, 620, 0.5, 10);
-	        snackBar.draw(g2);
-	        g2.drawString("Snackbar", 70, 825);
-			break;
-		case PATHS:
-			
-			break;
-		default:
-			break;
 		}
 		
 		//draw seperation line between sidebar and field
@@ -172,37 +169,23 @@ public class Sidebar implements Serializable  {
     			}
     		}
     		//check for object selection
-    		switch (currentTab) {
-    		case STAGES:
-    			
-    			break;
-    		case FACILITIES:
-    			
-    			break;
-    		case PATHS:
-    			
-    			break;
-    		default:
-    			break;
+    		int objectPlacementX = 0;
+            int objectPlacementY = 61;
+    
+            for(HashMap.Entry<String, DrawEngine> object : drawableArrays.get(currentTab.getValue()).entrySet()){
+    			if(object.getValue().contains(e.getPoint())){
+    				if(object.getValue() instanceof DrawEngine){
+	    				try {
+							Constructor<?> constructor = object.getValue().getClass().getConstructor(int.class, int.class, double.class, double.class);
+							dragObject = (DrawEngine) constructor.newInstance(new Object[] { (int)clickPoint.getX(),(int)clickPoint.getY(), 0.5, 10 });
+							terrain.setDragObject(dragObject);					
+	    				} catch (NoSuchMethodException | SecurityException |  IllegalArgumentException | InstantiationException | IllegalAccessException | InvocationTargetException e1) {
+							e1.printStackTrace();
+						}
+    				}
+    			}
     		}
-			if(e.getY() > 100 && e.getY() < 260){
-				dragObject = new SimulatorStage((int)clickPoint.getX(),(int)clickPoint.getY(), 0.5, 10);
-				terrain.setDragObject(dragObject);
-			}else if(e.getY() >= 260 && e.getY() < 425){
-				dragObject = new RestRoom((int)clickPoint.getX(),(int)clickPoint.getY(), 0.5, 10);
-				terrain.setDragObject(dragObject);
-			}else if(e.getY() >= 430 && e.getY() < 510){
-				dragObject = new AccessPoint(terrain, (int)clickPoint.getX(),(int)clickPoint.getY(), 0.5, 10);
-				terrain.setDragObject(dragObject);
-			}
-			else if(e.getY() >= 510 && e.getY() < 610){
-				dragObject = new ExitPoint(terrain, (int)clickPoint.getX(),(int)clickPoint.getY(), 0.5, 10);
-				terrain.setDragObject(dragObject);
-			}
-			else if(e.getY() > 610 && e.getY() < terrain.getFestivalHeight()){
-				dragObject = new SnackBar((int)clickPoint.getX(),(int)clickPoint.getY(), 0.5, 10);
-				terrain.setDragObject(dragObject);
-			}
+
 			if(dragObject != null)
 				terrain.addEntity(dragObject);
 		}