فهرست منبع

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

DaveyMathijssen 10 سال پیش
والد
کامیت
a678ac0e02
4فایلهای تغییر یافته به همراه79 افزوده شده و 88 حذف شده
  1. 5 0
      src/gui/simulator/AccessPoint.java
  2. 0 2
      src/gui/simulator/DrawEngine.java
  3. 5 0
      src/gui/simulator/ExitPoint.java
  4. 69 86
      src/gui/simulator/Sidebar.java

+ 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);
 		}