Parcourir la source

ids for HolonBodies + fix for the case that not enough colors exist

jess il y a 7 ans
Parent
commit
d88e22b9e3
2 fichiers modifiés avec 34 ajouts et 10 suppressions
  1. 10 1
      src/classes/HolonBody.java
  2. 24 9
      src/ui/view/HolonCanvas.java

+ 10 - 1
src/classes/HolonBody.java

@@ -1,6 +1,7 @@
 package classes;
 
 import java.awt.Color;
+import java.awt.Font;
 import java.awt.Graphics2D;
 
 public class HolonBody implements Comparable<HolonBody> {
@@ -10,6 +11,11 @@ public class HolonBody implements Comparable<HolonBody> {
 	private float mass;
 	private float radius;
 	private Color color;
+	private int id;
+
+	public void setId(int id) {
+		this.id = id;
+	}
 
 	public Color getColor() {
 		return color;
@@ -24,11 +30,14 @@ public class HolonBody implements Comparable<HolonBody> {
 	}
 
 	
-	public void draw(Graphics2D g2, int holonBodyScale) {
+	public void draw(Graphics2D g2) {
 		
 		g2.setColor(color);
 		g2.fillOval((int) (position.getX() - getRadius()), (int) (position.getY() - getRadius()),
 				(int) (2 * getRadius()), (int) (2 * getRadius()));
+		g2.setFont(new Font("TimesRoman", Font.PLAIN, (int) radius));
+		g2.setColor(Color.WHITE);
+		g2.drawString("" +id, position.getX()-radius/2+2, position.getY()+radius/2-2);
 
 	}
 

+ 24 - 9
src/ui/view/HolonCanvas.java

@@ -5,12 +5,15 @@ import java.awt.Dimension;
 import java.awt.Graphics;
 import java.awt.Graphics2D;
 import java.awt.RenderingHints;
+import java.awt.ScrollPane;
 import java.util.ArrayList;
 
 import javax.swing.JPanel;
+import javax.swing.JScrollPane;
 
 import classes.Constants;
 import classes.HolonBody;
+import classes.HolonObject;
 import classes.SubNet;
 import ui.controller.Control;
 import ui.model.Model;
@@ -59,12 +62,21 @@ public class HolonCanvas extends JPanel {
 
 	public void paintComponent(Graphics g) {
 		super.paintComponent(g);
+		
+		// add new colors if necessary
+		for (int i = 0; i < controller.getSimManager().getSubNets().size(); i++) {
+			if (model.getSubNetColors().size() - 1 < i) {
+				controller.addSubNetColor(new Color((int) (Math.random() * 255), (int) (Math.random() * 255),
+						(int) (Math.random() * 255)));
+			}
+		}
 
+		JScrollPane focus = (JScrollPane) this.getParent().getComponent(0);
+		focus.getViewport().getComponent(0).requestFocus();
+		this.requestFocus();
 		if (!controller.getSimManager().getSubNets().equals(subnets)) {
 			subnets = controller.getSimManager().getSubNets();
 			subCount = subnets.size();
-			// bodies = new ArrayList<>();
-			// createBodies(subCount);
 			calcCenter();
 			if (bodies.isEmpty()) {
 				createBodies(subCount);
@@ -102,12 +114,13 @@ public class HolonCanvas extends JPanel {
 	private void addNewBodies(int subCount) {
 		
 		ArrayList<HolonBody> newBodies = new ArrayList<>();
-		for (int i = 0; i < bodies.size(); i++) {
-			for (int j = 0; j < subCount; j++) {
-				if (model.getSubNetColors().get(j) == bodies.get(i).getColor()) {
-					bodies.get(i).setRadius(subnets.get(j).getObjects().size() * 5 + 10);
-					bodies.get(i).setMass(subnets.get(j).getObjects().size() * 5 + 10);
-					newBodies.add(bodies.get(i));
+		for (int i = 0; i < subCount; i++) {
+			for (int j = 0; j < bodies.size(); j++) {
+				if (model.getSubNetColors().get(i) == bodies.get(j).getColor()) {
+					bodies.get(j).setRadius(subnets.get(i).getObjects().size() * 5 + 10);
+					bodies.get(j).setMass(subnets.get(i).getObjects().size() * 5 + 10);
+					newBodies.add(bodies.get(j));
+					newBodies.get(newBodies.size()-1).setId(newBodies.size()-1);
 					break;
 				}
 			}
@@ -118,6 +131,7 @@ public class HolonCanvas extends JPanel {
 			HolonBody temp = new HolonBody((center.width + 1) + (-1 * i), (center.height + 1) + (-1 * i),
 					subnets.get(i).getObjects().size() * 5 + 10, subnets.get(i).getObjects().size() * 5 + 10,
 					model.getSubNetColors().get(i));
+			temp.setId(i);
 			bodies.add(temp);
 		}
 
@@ -129,6 +143,7 @@ public class HolonCanvas extends JPanel {
 			HolonBody temp = new HolonBody((center.width + 1) + (-1 * i), (center.height + 1) + (-1 * i),
 					subnets.get(i).getObjects().size() * 5 + 10, subnets.get(i).getObjects().size() * 5 + 10,
 					model.getSubNetColors().get(i));
+			temp.setId(i);
 			bodies.add(temp);
 		}
 	}
@@ -149,7 +164,7 @@ public class HolonCanvas extends JPanel {
 		// Render Game Objects
 		for (int i = 0; i < subCount; i++) {
 			bodies.get(i).setRadius((subnets.get(i).getObjects().size() * 5 + 10)*controller.getHolonBodyScale()/100);
-			bodies.get(i).draw(this.g2, controller.getHolonBodyScale());
+			bodies.get(i).draw(this.g2);
 		}
 	}