Quellcode durchsuchen

Code cleanup & optimalisation

jancoow vor 10 Jahren
Ursprung
Commit
fe40f230e8

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

@@ -3,6 +3,7 @@ package gui.simulator;
 import gui.main.Main;
 import gui.simulator.facilities.ImageType;
 
+import java.awt.Rectangle;
 import java.awt.TexturePaint;
 import java.awt.Window;
 import java.awt.geom.Rectangle2D;
@@ -55,6 +56,9 @@ public class Images implements Serializable{
 			tp.add(new TexturePaint(Images.getImage(ImageType.Sand), new Rectangle2D.Double(0, 0, 200, 200)));
 			tp.add(new TexturePaint(Images.getImage(ImageType.Grass), new Rectangle2D.Double(0, 0, 200, 200)));
 			tp.add(new TexturePaint(Images.getImage(ImageType.Street), new Rectangle2D.Double(0, 0, 200, 200)));
+			tp.add(new TexturePaint(Images.getImage(ImageType.PathGroundStone), new Rectangle(0,0,100,100)));
+			tp.add(new TexturePaint(Images.getImage(ImageType.PathDirt), new Rectangle(0,0,100,100)));
+			tp.add(new TexturePaint(Images.getImage(ImageType.PathStone), new Rectangle(0,0,100,100)));
 
 		}catch(IOException e){
 			e.printStackTrace();
@@ -68,9 +72,12 @@ public class Images implements Serializable{
 
 	public enum TextPaint
 	{
-		TPSand,
-		TPGrass,
-		TPStreet
+		TPTerrainSand,
+		TPTerrainGrass,
+		TPTerrainStreet,
+		TPPathGroundStone,
+		TPPathDirt,
+		TPPathStone
 	}
 
 	public static TexturePaint getTextPaint(TextPaint textp)

+ 11 - 9
src/gui/simulator/Sidebar.java

@@ -1,6 +1,6 @@
 package gui.simulator;
 
-import gui.simulator.facilities.ImageType;
+import gui.simulator.Images.TextPaint;
 import gui.simulator.facilities.Fence;
 import gui.simulator.facilities.PalmTree1;
 import gui.simulator.facilities.RestRoom;
@@ -21,7 +21,6 @@ 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;
 import java.util.Map.Entry;
 
@@ -32,7 +31,7 @@ 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> drawableOrnaments = new LinkedHashMap<String, DrawEngine>();
-	private LinkedHashMap<String, ImageType> drawablePaths = new LinkedHashMap<String, ImageType>();
+	private LinkedHashMap<String, TextPaint> drawablePaths = new LinkedHashMap<String, Images.TextPaint>();
 	private ArrayList<LinkedHashMap<String, DrawEngine>> drawableArrays = new ArrayList<LinkedHashMap<String, DrawEngine>>();
 	public enum SideBarTab{
 		STAGES(0), FACILITIES(1), ORNAMENTS(2), PATHS(3);
@@ -92,9 +91,9 @@ public class Sidebar implements Serializable  {
 		drawableFacilities.put("Wegwijzer", new WayPoint(0, 0, 0.8, 1, this.terrain));
 		
 		//paths
-		drawablePaths.put("Ground-stone", ImageType.PathGroundStone);
-		drawablePaths.put("Dirt", ImageType.PathDirt);
-		drawablePaths.put("Stone", ImageType.PathStone);
+		drawablePaths.put("Repak", Images.TextPaint.TPPathGroundStone);
+		drawablePaths.put("Dirt", Images.TextPaint.TPPathDirt);
+		drawablePaths.put("Stone", Images.TextPaint.TPPathStone);
 		
 		//ornaments
 		drawableOrnaments.put("Tree1", new Tree1(0, 0, 0.7, 1, this.terrain));
@@ -150,10 +149,13 @@ public class Sidebar implements Serializable  {
         int objectPlacementY = 91;
 
         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);
+        	for(Entry<String, TextPaint> object : drawablePaths.entrySet()){
+        		//g2.drawImage(Images.getImage(object.getValue()), objectPlacementX +10, objectPlacementY +10, sideBarWidth/2 -20, 80, null);
+        		g2.setColor(Color.black);
         		g2.drawString(object.getKey(), objectPlacementX+2, objectPlacementY + 95);
 				g2.drawRect(objectPlacementX, objectPlacementY, sideBarWidth/2, 100);
+        		g2.setPaint(Images.getTextPaint(object.getValue()));
+				g2.fillOval(objectPlacementX+20, objectPlacementY+20, sideBarWidth/2-40, 100-40);
         		objectPlacementX += 100;
 				//switch to next row
 				if(objectPlacementX % 200 == 0){
@@ -211,7 +213,7 @@ public class Sidebar implements Serializable  {
             int objectPlacementY = 61;
     
             if(currentTab == SideBarTab.PATHS){
-              	for(Entry<String, ImageType> object : drawablePaths.entrySet()){
+              	for(Entry<String, TextPaint> object : drawablePaths.entrySet()){
 	    			if(new Rectangle(objectPlacementX, objectPlacementY, sideBarWidth/2, 100).contains(e.getPoint())){
 	    				terrain.newWalkingPath(object.getValue());
 	    			}

+ 6 - 15
src/gui/simulator/SimulatorPane.java

@@ -4,19 +4,16 @@ import java.awt.BorderLayout;
 import java.awt.Color;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
-import javax.swing.Timer;
-import java.util.TimerTask;
 
 import javax.swing.BorderFactory;
 import javax.swing.JPanel;
+import javax.swing.Timer;
 
 import agenda.Agenda;
 
+@SuppressWarnings("serial")
 public class SimulatorPane extends JPanel{
-	
-	private Agenda agenda;
 	private Terrain terrain;
-
 	private Timer framestimer, updatetimer;
 	
 	//terrain type enums
@@ -28,27 +25,24 @@ public class SimulatorPane extends JPanel{
 	
 	public SimulatorPane(Agenda agenda, int length, int width, Terrains terrains){
         super.setLayout(new BorderLayout());
-		this.agenda = agenda;
         this.setOpaque(true);
         this.setBackground(Color.WHITE);
         this.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));
-        this.terrain = new Terrain(length, width, terrains, this.agenda, this);
+        this.terrain = new Terrain(length, width, terrains, agenda, this);
         this.add(this.terrain, BorderLayout.CENTER);
-       framestimer =  new Timer(1000/30, new ActionListener() {
-        	@Override
+        framestimer =  new Timer(1000/30, new ActionListener() {
+	    	@Override
 			public void actionPerformed(ActionEvent arg0) {
 				terrain.repaint();	
 			}
 		});
-        updatetimer = new Timer(1000/100, new ActionListener() {
+	    updatetimer = new Timer(1000/100, new ActionListener() {
 			@Override
 			public void actionPerformed(ActionEvent arg0) {
 				terrain.calculate();
 			}
 		});
-        
         framestimer.start();
-        //updatetimer.start();
 	}
 	
 	public void changeSpeed(Time time){
@@ -67,13 +61,10 @@ public class SimulatorPane extends JPanel{
 			break;
 		}
 	}
-	
 	public Terrain getTerrain() {
 		return terrain;
 	}
-	
 	public void setTerrain(Terrain terrain) {
 		this.terrain = terrain;
 	}
-	
 }

+ 5 - 5
src/gui/simulator/Terrain.java

@@ -88,13 +88,13 @@ public class Terrain extends JPanel {
 		//set terrainbackground
 		switch(terrain){
 		case BEACH: 
-			background = Images.TextPaint.TPSand;
+			background = Images.TextPaint.TPTerrainSand;
 			break;
 		case GRASS:
-			background = Images.TextPaint.TPGrass;
+			background = Images.TextPaint.TPTerrainGrass;
 			break;
 		case URBAN:
-			background = Images.TextPaint.TPStreet;
+			background = Images.TextPaint.TPTerrainStreet;
 			break;
 		}
 
@@ -532,9 +532,9 @@ public class Terrain extends JPanel {
 	public void toggleGrid(){
 		grid = !grid;
 	}
-	public void newWalkingPath(ImageType imagetype){
+	public void newWalkingPath(Images.TextPaint texture){
 		if(pathgenerate == 0){
-			currentpath = new WalkingPath(imagetype);
+			currentpath = new WalkingPath(texture);
 			pathgenerate = 1;
 		}
 	}

+ 4 - 4
src/gui/simulator/Topbar.java

@@ -1,5 +1,7 @@
 package gui.simulator;
 
+import gui.simulator.facilities.ImageType;
+
 import java.awt.BasicStroke;
 import java.awt.Color;
 import java.awt.Font;
@@ -16,9 +18,8 @@ import java.util.GregorianCalendar;
 import javax.swing.JDialog;
 
 import agenda.Agenda;
-import gui.simulator.facilities.ImageType;
 
-public class Topbar implements MouseListener, Serializable {
+public class Topbar implements MouseListener, Serializable{
 	private int oldwidth;
 	private GeneralPath background;
 	private GregorianCalendar time;	
@@ -62,8 +63,7 @@ public class Topbar implements MouseListener, Serializable {
 		g2.setColor(Color.BLACK);
 		g2.setStroke(new BasicStroke(2));
 		g2.draw(background);
-
-		
+	
 		g2.drawImage(Images.getImage(ImageType.TopbarStopButton), screenwidth/4 + 40, 7, null );
 		g2.drawImage(Images.getImage((!buttonsState[1]) ? ImageType.TopbarPlayButton : ImageType.TopbarPauzeButton), screenwidth/4 + 90, 7, null );
 		g2.drawImage(Images.getImage(ImageType.TopbarFasterButton), screenwidth/4 + 130, 7, null );

+ 36 - 62
src/gui/simulator/Visitor.java

@@ -2,43 +2,34 @@ package gui.simulator;
 
 import gui.simulator.facilities.ImageType;
 import gui.simulator.facilities.SimulatorStage;
+
 import java.awt.Graphics2D;
 import java.awt.geom.AffineTransform;
 import java.awt.geom.Point2D;
-import java.io.Serializable;
 import java.util.List;
 
 
-public class Visitor implements Serializable {
+public class Visitor {
 	private Point2D positie, target;
 	private double rotation, speed;
 	private WalkingPath currentpath;
 	private int currentpoint, collisioncount;
 	private boolean walkInversed;
-	private double food, drink, pis;
-	ImageType image = ImageType.Visitor;
+	private double food, drink, pee;
 	
 	public Visitor(Point2D positie, Point2D starttarget) {
 		this.positie = positie;
 		this.rotation = 0;
-		double number = Math.random()*2;
-		if(number < 1){
-			this.speed = 1;
-		} else {
-			this.speed = number;
-		}
+		this.speed = 1 + Math.random();
 		this.target = starttarget;
 		this.food = (int)(Math.random()*100);
 		this.drink = (int)(Math.random()*100);
-		this.pis = (int)(Math.random()*100);
+		this.pee = (int)(Math.random()*100);
 	}
 
 	void update(List<Visitor> visitors, List<DrawEngine> buildings, WalkingPathArrayList walkingpaths)
 	{
-		Point2D difference = new Point2D.Double(
-				target.getX() - positie.getX(),
-				target.getY() - positie.getY()
-				);
+		Point2D difference = new Point2D.Double( target.getX() - positie.getX(), target.getY() - positie.getY()	);
 		rotation %= 360;
 		double newRotation = Math.atan2(difference.getY(), difference.getX());
 		double rotDifference = rotation - newRotation;
@@ -46,24 +37,20 @@ public class Visitor implements Serializable {
 			rotDifference -= 2 * Math.PI;
 		while(rotDifference < -Math.PI)
 			rotDifference += 2 * Math.PI;
-		
 		if(Math.abs(rotDifference) < 0.1)
 			rotation = newRotation;
 		else if(rotDifference < 0)
 			rotation += 0.1;
 		else if(rotDifference > 0)
 			rotation -= 0.1;
+	
+		Point2D oldPositie = positie;	
+		positie = new Point2D.Double( positie.getX() + speed * Math.cos(rotation), positie.getY() + speed * Math.sin(rotation));
+		setFood(getFood()-Math.random()*0.05);
+		setDrink(getDrink()-Math.random()*0.05);
+		setPee(getPee()-Math.random()*0.05);
 		
-		Point2D oldPositie = positie;
-		
-		positie = new Point2D.Double(
-				positie.getX() + speed * Math.cos(rotation),
-				positie.getY() + speed * Math.sin(rotation)
-				);
-		DrawEngine object = collisionObject(buildings);
-		this.food = (int)(Math.random()*100);
-		this.drink = (int)(Math.random()*100);
-		this.pis = (int)(Math.random()*100);
+		DrawEngine object = collisionObject(buildings);		
 		if((hasCollision(visitors) && (collisioncount < 60 ) || hasCollisionObject(buildings) )) // collision with a ridged building or a visitor, rotate
 		{
 			positie = oldPositie;
@@ -72,31 +59,30 @@ public class Visitor implements Serializable {
 		if(currentpath != null){
 			if(object != null){
 				if((currentpath.getObject1() == object && walkInversed) || (currentpath.getObject2() == object && !walkInversed)){ //end point reached, what to do?
-					if(object.type == SimulatorPane.Objects.STAGE){
+					if(object.type == SimulatorPane.Objects.STAGE){ //stay at stage when a act is playing
 						setCollisionCount(0);
 						if(((SimulatorStage) object).getPlayingact() == null){
 							walkNewRoute(walkingpaths, object);
 						}
-					}else if(object.type == SimulatorPane.Objects.DRINK){
-						drink += 50;
+					}else if(object.type == SimulatorPane.Objects.DRINK){ //buy a drink
+						setDrink(getDrink() + 50);
 						walkNewRoute(walkingpaths, object);
-					}else if(object.type == SimulatorPane.Objects.SNACKBAR){
-						food += 50;
+					}else if(object.type == SimulatorPane.Objects.SNACKBAR){ //buy some food
+						setFood(getFood() + 50);
 						walkNewRoute(walkingpaths, object);
-					}else if(object.type == SimulatorPane.Objects.RESTROOM){
-						pis = 100;
+					}else if(object.type == SimulatorPane.Objects.RESTROOM){ //toilet
+						setPee(100);
 						walkNewRoute(walkingpaths, object);
-					}else if(object.type == SimulatorPane.Objects.WAYPOINT){
+					}else if(object.type == SimulatorPane.Objects.WAYPOINT){ //waypoint, choose a new route
 						walkNewRoute(walkingpaths, object);
 					}
 				}
 			}
 			if(positie.distance(currentpath.get(currentpoint)) < 11){ //collision with a path-point
-				if(walkInversed && currentpoint > 0){
+				if(walkInversed && currentpoint > 0)
 					currentpoint--;
-				}else if(currentpoint < currentpath.getPath().size()-1){
+				else if(currentpoint < currentpath.getPath().size()-1)
 					currentpoint++;
-				}
 				target = currentpath.get(currentpoint);
 			}
 		}else{ //entrance
@@ -111,22 +97,20 @@ public class Visitor implements Serializable {
 		AffineTransform tx = new AffineTransform();
 		tx.translate(positie.getX()-8, positie.getY()-11);
 		tx.rotate(rotation, 4, 6);
-		g.drawImage(Images.getImage(image), tx ,null);
+		g.drawImage(Images.getImage(ImageType.Visitor), tx ,null);
 	}
+	
 	private boolean hasCollision(List<Visitor> visitors) { // check collision with other visitors
 		for(Visitor b : visitors)
 		{
-
 			if(b != this && b.positie.distance(positie) < 11){
 				setCollisionCount(collisioncount + 1);
 				return true;
-			}
-			
+			}	
 		}
 		setCollisionCount(collisioncount - 5);
 		return false;
 	}
-
 	private boolean hasCollisionObject(List<DrawEngine> objects){ // check collision with rigid objects
 		for(DrawEngine o:objects){
 			if(o.type != SimulatorPane.Objects.WAYPOINT && o.type != SimulatorPane.Objects.EXIT && o.type != SimulatorPane.Objects.ENTRANCE )
@@ -135,7 +119,7 @@ public class Visitor implements Serializable {
 		}
 		return false;
 	}
-	private DrawEngine collisionObject(List<DrawEngine> objects){
+	private DrawEngine collisionObject(List<DrawEngine> objects){ //give the collision object
 		for(DrawEngine o:objects){
 			if (o.containsWalkArea(positie) || o.contains(positie) )
 				return o;
@@ -156,12 +140,9 @@ public class Visitor implements Serializable {
 	private void walkNewRoute(WalkingPathArrayList walkingpaths, DrawEngine object){
 		WalkingPathArrayList connectedWalkingPaths = walkingpaths.getWalkingPadObject(object);
 		connectedWalkingPaths.removeType(object, SimulatorPane.Objects.ENTRANCE);
-		if(food > 25)
-			connectedWalkingPaths.removeType(object, SimulatorPane.Objects.SNACKBAR);
-		if(drink > 25)
-			connectedWalkingPaths.removeType(object, SimulatorPane.Objects.DRINK);
-		if(pis > 25)
-			connectedWalkingPaths.removeType(object, SimulatorPane.Objects.RESTROOM);
+		if(food > 25)  connectedWalkingPaths.removeType(object, SimulatorPane.Objects.SNACKBAR);
+		if(drink > 25) connectedWalkingPaths.removeType(object, SimulatorPane.Objects.DRINK);
+		if(pee > 25)   connectedWalkingPaths.removeType(object, SimulatorPane.Objects.RESTROOM);
 		if(!connectedWalkingPaths.isEmpty()){
 			walkRoute(connectedWalkingPaths.get((int)(Math.random()*connectedWalkingPaths.size())), object);
 		}
@@ -170,34 +151,27 @@ public class Visitor implements Serializable {
 	public double getFood() {
 		return food;
 	}
-
 	public void setFood(double food) {
 		if(food >= 0 && food <= 100)
 			this.food = food;
 	}
-
 	public double getDrink() {
 		return drink;
 	}
-
 	public void setDrink(double drink) {
 		if(drink >= 0 && drink <= 100)
 			this.drink = drink;
 	}
-
-	public double getPis() {
-		return pis;
+	public double getPee() {
+		return pee;
 	}
-
-	public void setPis(double pis) {
-		if(pis >= 0 && pis <= 100)
-			this.pis = pis;
+	public void setPee(double pee) {
+		if(pee >= 0 && pee <= 100)
+			this.pee = pee;
 	}
 	private void setCollisionCount(int c){
 		if(c >= 0 && c < 200){
 			collisioncount = c;
 		}
 	}
-}
-
-
+}

+ 20 - 27
src/gui/simulator/WalkingPath.java

@@ -1,41 +1,49 @@
 package gui.simulator;
 
-import gui.simulator.facilities.ImageType;
-
 import java.awt.BasicStroke;
 import java.awt.Graphics2D;
 import java.awt.Point;
-import java.awt.Rectangle;
-import java.awt.TexturePaint;
 import java.io.Serializable;
 import java.util.ArrayList;
 
 public class WalkingPath implements Serializable {
+	private static final long serialVersionUID = -4797549169476762476L;
 	private ArrayList<Point> path;
 	private DrawEngine object1,object2;
-	private ImageType texture;
+	private Images.TextPaint texture;
 	
-	public WalkingPath(ImageType itype){
+	public WalkingPath(Images.TextPaint itype){
 		path = new ArrayList<Point>();
 		texture = itype;
 	}
-	public void addPoint(Point p){
-		path.add(p);
+	
+	public void reCalculate(){
+		if(object1 != null && object2 != null){
+			path.get(0).setLocation(new Point((int)object1.getCenter().getX(), (int)object1.getCenter().getY()));
+			path.get(path.size()-1).setLocation(new Point((int)object2.getCenter().getX(), (int)object2.getCenter().getY()));
+		}
+	}
+	public void paint(Graphics2D g2){
+		g2.setStroke(new BasicStroke(30,BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
+		g2.setPaint(Images.getTextPaint(texture));
+		for(int i = 1; i < getPath().size(); i++){
+			g2.drawLine((int)get(i-1).getX(),(int)get(i-1).getY(), (int)get(i).getX(),(int)get(i).getY());
+		}
 	}
 	public void removeLastPoint(){
 		if(path.size() != 0){
 			path.remove(path.size()-1);
 		}
 	}
+	public void addPoint(Point p){
+		path.add(p);
+	}
 	public Point get(int i){
 		return path.get(i);
 	}
 	public ArrayList<Point> getPath() {
 		return path;
 	}
-	public void setPath(ArrayList<Point> path) {
-		this.path = path;
-	}
 	public DrawEngine getObject1() {
 		return object1;
 	}
@@ -47,20 +55,5 @@ public class WalkingPath implements Serializable {
 	}
 	public void setObject2(DrawEngine object2) {
 		this.object2 = object2;
-	}
-	public void reCalculate(){
-		if(object1 != null && object2 != null){
-					path.get(0).setLocation(new Point((int)object1.getCenter().getX(), (int)object1.getCenter().getY()));
-					path.get(path.size()-1).setLocation(new Point((int)object2.getCenter().getX(), (int)object2.getCenter().getY()));
-		}
-	}
-	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++){
-			g2.drawLine((int)get(i-1).getX(),(int)get(i-1).getY(), (int)get(i).getX(),(int)get(i).getY());
-		}
-	}
-	
-	
+	}	
 }

+ 3 - 8
src/gui/simulator/WalkingPathArrayList.java

@@ -5,6 +5,7 @@ import java.util.ArrayList;
 import java.util.Iterator;
 
 public class WalkingPathArrayList extends ArrayList<WalkingPath> implements Serializable{
+	private static final long serialVersionUID = 1149345349671721650L;
 	public WalkingPathArrayList getWalkingPadType(SimulatorPane.Objects type){
 		WalkingPathArrayList returnlist = new WalkingPathArrayList();
 		for(WalkingPath wp:this){
@@ -27,14 +28,8 @@ public class WalkingPathArrayList extends ArrayList<WalkingPath> implements Seri
 		Iterator<WalkingPath> i = this.iterator();
 		while(i.hasNext()){
 			WalkingPath path = i.next();
-			if(path.getObject1() == object){
-				if(path.getObject2().type == type){
-					i.remove();
-				}
-			}else{
-				if(path.getObject1().type == type){
-					i.remove();
-				}
+			if((path.getObject1() == object && path.getObject2().type == type) || (path.getObject2() == object && path.getObject1().type == type)){
+				i.remove();
 			}
 		}
 	}