Ver código fonte

Walking paths in the sidebar, fixed multiple draw for walkingpaths. Right click will remove last point of the walkingpath

jancoow 11 anos atrás
pai
commit
5b30849705

BIN
res/dirt.png


BIN
res/stones.jpg


+ 6 - 3
src/gui/simulator/Images.java

@@ -28,7 +28,8 @@ public class Images{
 			images.add(ImageIO.read(Main.class.getResource("/ground_stone.jpg")));
 			images.add(ImageIO.read(Main.class.getResource("/ground_stone.jpg")));
 			images.add(ImageIO.read(Main.class.getResource("/rotate.gif")));
 			images.add(ImageIO.read(Main.class.getResource("/rotate.gif")));
 			images.add(ImageIO.read(Main.class.getResource("/path.gif")));
 			images.add(ImageIO.read(Main.class.getResource("/path.gif")));
-			
+			images.add(ImageIO.read(Main.class.getResource("/dirt.png")));
+			images.add(ImageIO.read(Main.class.getResource("/stones.jpg")));
 			//images.add(ImageIO.read(Main.class.getResource("")));
 			//images.add(ImageIO.read(Main.class.getResource("")));
 			
 			
 		}catch(IOException e){
 		}catch(IOException e){
@@ -53,9 +54,11 @@ public class Images{
 		Border,
 		Border,
 		Visitor,
 		Visitor,
 		Add,
 		Add,
-		Pad,
+		PathGroundStone,
 		RotateCursor,
 		RotateCursor,
-		PathCursor
+		PathCursor,
+		PathDirt,
+		PathStone
 	}
 	}
 }
 }
 //enum ImageEnum
 //enum ImageEnum

+ 51 - 22
src/gui/simulator/Sidebar.java

@@ -1,5 +1,6 @@
 package gui.simulator;
 package gui.simulator;
 
 
+import gui.simulator.Images.ImageType;
 import gui.simulator.facilities.RestRoom;
 import gui.simulator.facilities.RestRoom;
 import gui.simulator.facilities.SimulatorStage;
 import gui.simulator.facilities.SimulatorStage;
 import gui.simulator.facilities.SnackBar;
 import gui.simulator.facilities.SnackBar;
@@ -18,6 +19,7 @@ import java.lang.reflect.InvocationTargetException;
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.LinkedHashMap;
+import java.util.Map.Entry;
 
 
 public class Sidebar implements Serializable  {
 public class Sidebar implements Serializable  {
 	private int sideBarWidth;
 	private int sideBarWidth;
@@ -25,7 +27,7 @@ public class Sidebar implements Serializable  {
 	private Terrain terrain;
 	private Terrain terrain;
 	private LinkedHashMap<String, DrawEngine> drawableStages = new LinkedHashMap<String, DrawEngine>();
 	private LinkedHashMap<String, DrawEngine> drawableStages = new LinkedHashMap<String, DrawEngine>();
 	private LinkedHashMap<String, DrawEngine> drawableFacilities = new LinkedHashMap<String, DrawEngine>();
 	private LinkedHashMap<String, DrawEngine> drawableFacilities = new LinkedHashMap<String, DrawEngine>();
-	private LinkedHashMap<String, DrawEngine> drawablePaths = new LinkedHashMap<String, DrawEngine>();
+	private LinkedHashMap<String, Images.ImageType> drawablePaths = new LinkedHashMap<String, Images.ImageType>();
 	private ArrayList<LinkedHashMap<String, DrawEngine>> drawableArrays = new ArrayList<LinkedHashMap<String, DrawEngine>>();
 	private ArrayList<LinkedHashMap<String, DrawEngine>> drawableArrays = new ArrayList<LinkedHashMap<String, DrawEngine>>();
 	public enum SideBarTab{
 	public enum SideBarTab{
 		STAGES(0), FACILITIES(1), PATHS(2);
 		STAGES(0), FACILITIES(1), PATHS(2);
@@ -84,11 +86,14 @@ public class Sidebar implements Serializable  {
 		drawableFacilities.put("Snackbar",new SnackBar(0, 0, 0.2, 1));
 		drawableFacilities.put("Snackbar",new SnackBar(0, 0, 0.2, 1));
 		
 		
 		//paths
 		//paths
+		drawablePaths.put("Ground-stone", Images.ImageType.PathGroundStone);
+		drawablePaths.put("Dirt", Images.ImageType.PathDirt);
+		drawablePaths.put("Stone", Images.ImageType.PathStone);
+
 		//drawablePaths.add("My awesome path name", new AwesomePath());
 		//drawablePaths.add("My awesome path name", new AwesomePath());
 
 
 		drawableArrays.add(drawableStages);
 		drawableArrays.add(drawableStages);
 		drawableArrays.add(drawableFacilities);
 		drawableArrays.add(drawableFacilities);
-		drawableArrays.add(drawablePaths);		
 	}
 	}
 	
 	
 	public void draw(Graphics2D g2){
 	public void draw(Graphics2D g2){
@@ -129,20 +134,33 @@ public class Sidebar implements Serializable  {
         int objectPlacementX = 0;
         int objectPlacementX = 0;
         int objectPlacementY = 61;
         int objectPlacementY = 61;
 
 
-		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;
+        if(currentTab == SideBarTab.PATHS){
+        	for(Entry<String, ImageType> object : drawablePaths.entrySet()){
+        		g2.drawImage(Images.getImage(object.getValue()), objectPlacementX +10, objectPlacementY +10, sideBarWidth/2 -20, 80, null);
+        		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;
+				}
+        	}
+        }else{
+			for(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;
+				}
 			}
 			}
-		}
-		
+        }
 		//draw seperation line between sidebar and field
 		//draw seperation line between sidebar and field
         g2.setColor(Color.BLACK);
         g2.setColor(Color.BLACK);
         g2.setStroke(new BasicStroke(5));
         g2.setStroke(new BasicStroke(5));
@@ -172,9 +190,21 @@ public class Sidebar implements Serializable  {
     		int objectPlacementX = 0;
     		int objectPlacementX = 0;
             int objectPlacementY = 61;
             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){
+            if(currentTab == SideBarTab.PATHS){
+              	for(Entry<String, ImageType> object : drawablePaths.entrySet()){
+	    			if(new Rectangle(objectPlacementX, objectPlacementY, sideBarWidth/2, 100).contains(e.getPoint())){
+	    				terrain.newWalkingPath(object.getValue());
+	    			}
+	        		objectPlacementX += 100;
+					//switch to next row
+					if(objectPlacementX % 200 == 0){
+						objectPlacementX = 0;
+						objectPlacementY += 100;
+					}
+              	}
+            }else{
+            	for(Entry<String, DrawEngine> object : drawableArrays.get(currentTab.getValue()).entrySet()){
+	    			if(object.getValue().contains(e.getPoint())){
 	    				try {
 	    				try {
 							Constructor<?> constructor = object.getValue().getClass().getConstructor(int.class, int.class, double.class, double.class);
 							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 });
 							dragObject = (DrawEngine) constructor.newInstance(new Object[] { (int)clickPoint.getX(),(int)clickPoint.getY(), 0.5, 10 });
@@ -182,10 +212,9 @@ public class Sidebar implements Serializable  {
 	    				} catch (NoSuchMethodException | SecurityException |  IllegalArgumentException | InstantiationException | IllegalAccessException | InvocationTargetException e1) {
 	    				} catch (NoSuchMethodException | SecurityException |  IllegalArgumentException | InstantiationException | IllegalAccessException | InvocationTargetException e1) {
 							e1.printStackTrace();
 							e1.printStackTrace();
 						}
 						}
-    				}
-    			}
-    		}
-
+	    			}
+	    		}
+            }
 			if(dragObject != null)
 			if(dragObject != null)
 				terrain.addEntity(dragObject);
 				terrain.addEntity(dragObject);
 		}
 		}

+ 53 - 30
src/gui/simulator/Terrain.java

@@ -1,12 +1,19 @@
 package gui.simulator;
 package gui.simulator;
 
 
-import agenda.Agenda;
 import gui.simulator.Images.ImageType;
 import gui.simulator.Images.ImageType;
-import gui.simulator.facilities.RestRoom;
-import gui.simulator.facilities.SimulatorStage;
-import gui.simulator.facilities.SnackBar;
 
 
-import java.awt.*;
+import java.awt.BasicStroke;
+import java.awt.Color;
+import java.awt.Cursor;
+import java.awt.Dimension;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.Point;
+import java.awt.Rectangle;
+import java.awt.RenderingHints;
+import java.awt.Shape;
+import java.awt.TexturePaint;
+import java.awt.Toolkit;
 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
 import java.awt.event.MouseEvent;
 import java.awt.event.MouseMotionAdapter;
 import java.awt.event.MouseMotionAdapter;
@@ -17,15 +24,16 @@ import java.awt.geom.Area;
 import java.awt.geom.NoninvertibleTransformException;
 import java.awt.geom.NoninvertibleTransformException;
 import java.awt.geom.Point2D;
 import java.awt.geom.Point2D;
 import java.awt.geom.Rectangle2D;
 import java.awt.geom.Rectangle2D;
-import java.awt.image.BufferedImage;
-import java.io.File;
-import java.io.IOException;
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.LinkedList;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.List;
 
 
-import javax.imageio.ImageIO;
-import javax.swing.*;
+import javax.swing.JDialog;
+import javax.swing.JPanel;
+import javax.swing.SwingUtilities;
+
+import agenda.Agenda;
+
 
 
 public class Terrain extends JPanel {
 public class Terrain extends JPanel {
 
 
@@ -40,7 +48,7 @@ public class Terrain extends JPanel {
     private int festivalheight, festivalwidth;
     private int festivalheight, festivalwidth;
     private int sideBarWidth = 200;
     private int sideBarWidth = 200;
     
     
-    private int pathgenerate = 1;
+    private int pathgenerate; 
     private WalkingPath currentpath;
     private WalkingPath currentpath;
     
     
     private SimulatorPane.Terrains terrain;
     private SimulatorPane.Terrains terrain;
@@ -54,7 +62,7 @@ public class Terrain extends JPanel {
 	Point2D lastClickPosition;
 	Point2D lastClickPosition;
 	Point lastMousePosition;
 	Point lastMousePosition;
 	Point2D lastMovedMousePosition;
 	Point2D lastMovedMousePosition;
-
+	TexturePaint p;
 
 
 	private Agenda agenda;
 	private Agenda agenda;
 
 
@@ -62,16 +70,16 @@ public class Terrain extends JPanel {
     	//get values
     	//get values
     	setFestivalHeight(length);
     	setFestivalHeight(length);
     	setFestivalWidth(width);
     	setFestivalWidth(width);
-    	grid = true;
     	this.terrain = terrain;
     	this.terrain = terrain;
     	visitors = new ArrayList<Visitor>();
     	visitors = new ArrayList<Visitor>();
     	paths = new ArrayList<WalkingPath>();
     	paths = new ArrayList<WalkingPath>();
 
 
     	createCustomCursors();
     	createCustomCursors();
-    	//initialize sidebar
+    	//initialize sidebar & topbar    	
     	sidebar = new Sidebar(sideBarWidth, 3000, this);
     	sidebar = new Sidebar(sideBarWidth, 3000, this);
     	topbar = new Topbar(this);
     	topbar = new Topbar(this);
     	addMouseListener(topbar);
     	addMouseListener(topbar);
+    	
     	//set terrainbackground
     	//set terrainbackground
     	switch(terrain){
     	switch(terrain){
 		case BEACH: 
 		case BEACH: 
@@ -84,6 +92,7 @@ public class Terrain extends JPanel {
 			background = Images.ImageType.Street;
 			background = Images.ImageType.Street;
 			break;
 			break;
 		}
 		}
+        p = new TexturePaint(Images.getImage(background), new Rectangle2D.Double(0, 0, 200, 200));
     	
     	
         this.dragObject = null;
         this.dragObject = null;
         this.entities = new LinkedList();
         this.entities = new LinkedList();
@@ -108,20 +117,14 @@ public class Terrain extends JPanel {
 	                for(DrawEngine drawObject: entities){
 	                for(DrawEngine drawObject: entities){
 	                    if(drawObject.contains(clickPoint)){
 	                    if(drawObject.contains(clickPoint)){
 	                    	if(pathgenerate  == 1){
 	                    	if(pathgenerate  == 1){
-	                    		currentpath = new WalkingPath();
 	                    		currentpath.addPoint(new Point((int)drawObject.getCenter().getX(), (int)drawObject.getCenter().getY()));
 	                    		currentpath.addPoint(new Point((int)drawObject.getCenter().getX(), (int)drawObject.getCenter().getY()));
 	                    		currentpath.setObject1(drawObject);
 	                    		currentpath.setObject1(drawObject);
 	                    		pathgenerate = 2;
 	                    		pathgenerate = 2;
 	                    		return;
 	                    		return;
 	                    	}else if(pathgenerate > 1){
 	                    	}else if(pathgenerate > 1){
-	                    		
 	                    		currentpath.addPoint(new Point((int)drawObject.getCenter().getX(), (int)drawObject.getCenter().getY()));
 	                    		currentpath.addPoint(new Point((int)drawObject.getCenter().getX(), (int)drawObject.getCenter().getY()));
 	                    		currentpath.setObject2(drawObject);
 	                    		currentpath.setObject2(drawObject);
 	                    		paths.add(currentpath);
 	                    		paths.add(currentpath);
-	                        	for(int i=0; i< 200; i++){
-	                            	visitors.add(new Visitor(new Point(100+(i*15),100)));	
-	                            	visitors.get(i).walkRoute(paths.get(0));
-	                        	}
 	                    		pathgenerate = 0;
 	                    		pathgenerate = 0;
 	                    		return; 
 	                    		return; 
 	                    	}else{
 	                    	}else{
@@ -154,8 +157,19 @@ public class Terrain extends JPanel {
 	                    	}
 	                    	}
 	                    }
 	                    }
 	                }
 	                }
-	                if(pathgenerate > 1){
-                		currentpath.addPoint(new Point((int)getClickPoint(e.getPoint()).getX(), (int)getClickPoint(e.getPoint()).getY()));
+	                if(pathgenerate == 1){
+                		if(SwingUtilities.isRightMouseButton(e)){
+                			pathgenerate = 0;
+                		}
+	                }else if(pathgenerate > 1){
+                		if(SwingUtilities.isRightMouseButton(e)){
+                			currentpath.removeLastPoint();
+                			if(currentpath.getPath().size() == 0){
+                				pathgenerate = 0;
+                			}
+                		}else{
+                			currentpath.addPoint(new Point((int)getClickPoint(e.getPoint()).getX(), (int)getClickPoint(e.getPoint()).getY()));
+                		}
 	                }
 	                }
                 }
                 }
                 repaint();
                 repaint();
@@ -310,13 +324,15 @@ public class Terrain extends JPanel {
         a1.subtract(a2);  
         a1.subtract(a2);  
         
         
         g2.setClip(a1);
         g2.setClip(a1);
-		//g2.setClip(new Rectangle2D.Double(sideBarWidth, 0, getWidth()-sideBarWidth, getHeight()));
 		AffineTransform oldTransform = g2.getTransform();
 		AffineTransform oldTransform = g2.getTransform();
 		g2.translate(sideBarWidth,0);
 		g2.translate(sideBarWidth,0);
 		g2.setTransform(getCamera());
 		g2.setTransform(getCamera());
-        TexturePaint p = new TexturePaint(Images.getImage(background), new Rectangle2D.Double(0, 0, 200, 200));
+		
+		
 		g2.setPaint(p);
 		g2.setPaint(p);
 		g2.fill(new Rectangle2D.Double(0,0,festivalwidth,festivalheight));
 		g2.fill(new Rectangle2D.Double(0,0,festivalwidth,festivalheight));
+		
+		
 		if(grid){
 		if(grid){
 			g2.setColor(new Color(160,160,160,120));
 			g2.setColor(new Color(160,160,160,120));
 			g2.setStroke(new BasicStroke(1));
 			g2.setStroke(new BasicStroke(1));
@@ -329,21 +345,22 @@ public class Terrain extends JPanel {
 		}
 		}
 
 
 		if(pathgenerate > 1){
 		if(pathgenerate > 1){
-			g2.setStroke(new BasicStroke(10));
 			currentpath.paint(g2);
 			currentpath.paint(g2);
 			g2.drawLine((int)currentpath.get(currentpath.getPath().size()-1).getX(),(int)currentpath.get(currentpath.getPath().size()-1).getY(), (int)lastMovedMousePosition.getX(), (int)lastMovedMousePosition.getY());
 			g2.drawLine((int)currentpath.get(currentpath.getPath().size()-1).getX(),(int)currentpath.get(currentpath.getPath().size()-1).getY(), (int)lastMovedMousePosition.getX(), (int)lastMovedMousePosition.getY());
-		}else{
-			for(WalkingPath path:paths){
-				path.paint(g2);
-			}
 		}
 		}
+		for(WalkingPath path:paths){
+			path.paint(g2);
+		}
+		g2.setStroke(new BasicStroke(4));
+
     	for(Visitor v:visitors){
     	for(Visitor v:visitors){
     		v.paint(g2);
     		v.paint(g2);
     	}
     	}
 		for(DrawEngine drawObject: entities){
 		for(DrawEngine drawObject: entities){
             drawObject.draw(g2); 
             drawObject.draw(g2); 
             if(pathgenerate > 0){
             if(pathgenerate > 0){
-            	g2.fill(drawObject.getAffineTransform().createTransformedShape(new Rectangle((int)(drawObject.getX()-(drawObject.getWidth()/2)-10),(int)(drawObject.getY()-(drawObject.getHeight()/2)-10), 20, 20)));
+            	g2.setColor(new Color(180,100,100,120));
+            	g2.fill(new Rectangle((int)drawObject.getCenter().getX()-20, (int)drawObject.getCenter().getY()-20, 40,40));
             }
             }
         }
         }
 
 
@@ -452,4 +469,10 @@ public class Terrain extends JPanel {
     public void toggleGrid(){
     public void toggleGrid(){
     	grid = !grid;
     	grid = !grid;
     }
     }
+    public void newWalkingPath(Images.ImageType imagetype){
+		if(pathgenerate == 0){
+			currentpath = new WalkingPath(imagetype);
+			pathgenerate = 1;
+		}
+    }
 }
 }

+ 9 - 6
src/gui/simulator/WalkingPath.java

@@ -15,13 +15,18 @@ public class WalkingPath implements Serializable {
 	private DrawEngine object1,object2;
 	private DrawEngine object1,object2;
 	private ImageType texture;
 	private ImageType texture;
 	
 	
-	public WalkingPath(){
+	public WalkingPath(ImageType itype){
 		path = new ArrayList<Point>();
 		path = new ArrayList<Point>();
-		texture = Images.ImageType.Pad;
+		texture = itype;
 	}
 	}
 	public void addPoint(Point p){
 	public void addPoint(Point p){
 		path.add(p);
 		path.add(p);
 	}
 	}
+	public void removeLastPoint(){
+		if(path.size() != 0){
+			path.remove(path.size()-1);
+		}
+	}
 	public Point get(int i){
 	public Point get(int i){
 		return path.get(i);
 		return path.get(i);
 	}
 	}
@@ -50,13 +55,11 @@ public class WalkingPath implements Serializable {
 		}
 		}
 	}
 	}
 	public void paint(Graphics2D g2){
 	public void paint(Graphics2D g2){
-		
+		g2.setStroke(new BasicStroke(30,BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
+		g2.setPaint(new TexturePaint(Images.getImage(texture), new Rectangle(0,0,100,100)));
 		for(int i = 1; i < getPath().size(); i++){
 		for(int i = 1; i < getPath().size(); i++){
-			g2.setStroke(new BasicStroke(40,BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
-			g2.setPaint(new TexturePaint(Images.getImage(texture), new Rectangle(0,0,100,100)));
 			g2.drawLine((int)get(i-1).getX(),(int)get(i-1).getY(), (int)get(i).getX(),(int)get(i).getY());
 			g2.drawLine((int)get(i-1).getX(),(int)get(i-1).getY(), (int)get(i).getX(),(int)get(i).getY());
 		}
 		}
-		g2.setStroke(new BasicStroke(10,BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
 	}
 	}