From d495ebe8bdd73f41358fd7c1578dee65efa87ce4 Mon Sep 17 00:00:00 2001
From: BrunoDatoMeneses <bruno.dato.meneses@gmail.com>
Date: Wed, 18 Sep 2019 15:15:25 +0200
Subject: [PATCH] ENH: multiUI for AMAKFX with randomAnt example

---
 AMAKFX/src/fr/irit/smac/amak/Agent.java       |   1 +
 AMAKFX/src/fr/irit/smac/amak/Amas.java        |   7 +-
 AMAKFX/src/fr/irit/smac/amak/Environment.java |  24 +--
 AMAKFX/src/fr/irit/smac/amak/Scheduler.java   |  17 +-
 .../amak/examples/randomants/AntExample.java  | 176 +++++++++---------
 .../randomantsMultiUi/AntExampleMutliUI.java  |   1 +
 .../AntsLaunchExampleMultiUI.java             |   2 -
 7 files changed, 117 insertions(+), 111 deletions(-)

diff --git a/AMAKFX/src/fr/irit/smac/amak/Agent.java b/AMAKFX/src/fr/irit/smac/amak/Agent.java
index 63e97500..1de07ab9 100644
--- a/AMAKFX/src/fr/irit/smac/amak/Agent.java
+++ b/AMAKFX/src/fr/irit/smac/amak/Agent.java
@@ -315,6 +315,7 @@ public abstract class Agent<A extends Amas<E>, E extends Environment> implements
 	 */
 	@Override
 	public void run() {
+		
 		ExecutionPolicy executionPolicy = amas.getExecutionPolicy();
 		if (executionPolicy == ExecutionPolicy.TWO_PHASES) {
 
diff --git a/AMAKFX/src/fr/irit/smac/amak/Amas.java b/AMAKFX/src/fr/irit/smac/amak/Amas.java
index 930f06c0..f56acaf8 100644
--- a/AMAKFX/src/fr/irit/smac/amak/Amas.java
+++ b/AMAKFX/src/fr/irit/smac/amak/Amas.java
@@ -169,14 +169,15 @@ public class Amas<E extends Environment> implements Schedulable {
 		vuiMulti.addTabbedDefaultPanel(amasMultiUIWindow);
 		
 		executor = (ThreadPoolExecutor) Executors.newFixedThreadPool(Configuration.allowedSimultaneousAgentsExecution);
+		
+		//this.scheduler = environment.getScheduler();
 		if (scheduling == Scheduling.DEFAULT) {
-			//MainWindow.instance();
-			this.scheduler = Scheduler.getDefaultScheduler(window);
+
+			this.scheduler = Scheduler.getDefaultMultiUIScheduler(window);
 			this.scheduler.add(this);
 		} else {
 			this.scheduler = new Scheduler(this);
 			if (scheduling == Scheduling.UI && !Configuration.commandLineMode) {
-				//MainWindow.instance();
 				amasMultiUIWindow.addToolbar(new SchedulerToolbar("Amas #" + id, getScheduler()));
 			}
 		}
diff --git a/AMAKFX/src/fr/irit/smac/amak/Environment.java b/AMAKFX/src/fr/irit/smac/amak/Environment.java
index 1d87b8ee..e048ea29 100644
--- a/AMAKFX/src/fr/irit/smac/amak/Environment.java
+++ b/AMAKFX/src/fr/irit/smac/amak/Environment.java
@@ -67,22 +67,22 @@ public abstract class Environment implements Schedulable {
 	
 	public Environment(AmasMultiUIWindow window, Scheduling _scheduling, Object... params) {
 		amasMultiUIWindow = window;
-		if (_scheduling == Scheduling.DEFAULT) {
-			this.scheduler = Scheduler.getDefaultScheduler(window);
-			this.scheduler.add(this);
-		} else {
-		this.scheduler = new Scheduler(this);
-		if (_scheduling == Scheduling.UI && !Configuration.commandLineMode)
-			amasMultiUIWindow.addToolbar(new SchedulerToolbar("Environment #" + id, getScheduler()));
-		}
-
-		this.scheduler.lock();
+//		if (_scheduling == Scheduling.DEFAULT) {
+//			this.scheduler = Scheduler.getDefaultMultiUIScheduler(window);
+//			this.scheduler.add(this);
+//		} else {
+//		this.scheduler = new Scheduler(this);
+//		if (_scheduling == Scheduling.UI && !Configuration.commandLineMode)
+//			amasMultiUIWindow.addToolbar(new SchedulerToolbar("Environment #" + id, getScheduler()));
+//		}
+//
+//		this.scheduler.lock();
 		this.params = params;
 		onInitialization();
 		onInitialEntitiesCreation();
 		if (!Configuration.commandLineMode)
 			onRenderingInitialization();
-		this.scheduler.unlock();
+//		this.scheduler.unlock();
 	}
 
 	/**
@@ -165,4 +165,6 @@ public abstract class Environment implements Schedulable {
 	@Override
 	public void onSchedulingStops() {
 	}
+	
+
 }
diff --git a/AMAKFX/src/fr/irit/smac/amak/Scheduler.java b/AMAKFX/src/fr/irit/smac/amak/Scheduler.java
index f509d7f4..2c6a1a18 100644
--- a/AMAKFX/src/fr/irit/smac/amak/Scheduler.java
+++ b/AMAKFX/src/fr/irit/smac/amak/Scheduler.java
@@ -60,6 +60,8 @@ public class Scheduler implements Runnable, Serializable {
 	 * The default scheduler
 	 */
 	private static Scheduler defaultScheduler;
+	
+
 	/**
 	 * The schedulables that must be added
 	 */
@@ -120,16 +122,17 @@ public class Scheduler implements Runnable, Serializable {
 		return defaultScheduler;
 	}
 	
-	public static Scheduler getDefaultScheduler(AmasMultiUIWindow window) {
-		if (defaultScheduler == null) {
-			defaultScheduler = new Scheduler();
+	
+	
+	
+	
+	public static Scheduler getDefaultMultiUIScheduler(AmasMultiUIWindow window) {
+		Scheduler multiUIScheduler = new Scheduler();
 			if (!Configuration.commandLineMode) {
-				//MainWindow.instance();
-				SchedulerToolbar st = new SchedulerToolbar("Default", defaultScheduler);
+				SchedulerToolbar st = new SchedulerToolbar("Default", multiUIScheduler);
 				window.addToolbar(st);
 			}
-		}
-		return defaultScheduler;
+		return multiUIScheduler;
 	}
 
 	/**
diff --git a/AMAKFX/src/fr/irit/smac/amak/examples/randomants/AntExample.java b/AMAKFX/src/fr/irit/smac/amak/examples/randomants/AntExample.java
index 8186b0d4..9a847c63 100644
--- a/AMAKFX/src/fr/irit/smac/amak/examples/randomants/AntExample.java
+++ b/AMAKFX/src/fr/irit/smac/amak/examples/randomants/AntExample.java
@@ -1,88 +1,88 @@
-package fr.irit.smac.amak.examples.randomants;
-
-import fr.irit.smac.amak.Agent;
-import fr.irit.smac.amak.ui.VUI;
-import fr.irit.smac.amak.ui.drawables.DrawableImage;
-
-public class AntExample extends Agent<AntHillExample, WorldExample> {
-	
-	private boolean dead = false; 
-	
-	/**
-	 * X coordinate of the ant in the world
-	 */
-	public double dx;
-	/**
-	 * Y coordinate of the ant in the world
-	 */
-	public double dy;
-	/**
-	 * Angle in radians
-	 */
-	private double angle = Math.random() * Math.PI * 2;
-	private DrawableImage image;
-
-	/**
-	 * Constructor of the ant
-	 * 
-	 * @param amas
-	 *            the amas the ant belongs to
-	 * @param startX
-	 *            Initial X coordinate
-	 * @param startY
-	 *            Initial Y coordinate
-	 */
-	public AntExample(AntHillExample amas, double startX, double startY) {
-		super(amas, startX, startY);
-	}
-	@Override
-	public void onInitialization() {
-		dx = (double) params[0];
-		dy = (double) params[1];
-	}
-
-	@Override
-	protected void onRenderingInitialization() {
-		image = VUI.get().createAndAddImage(dx, dy, "file:resources/ant.png");
-		image.setName("Ant "+getId());
-	}
-
-	/**
-	 * Move in a random direction
-	 */
-	@Override
-	protected void onDecideAndAct() {
-		double random = amas.getEnvironment().getRandom().nextGaussian();
-		angle += random * 0.1;
-		dx += Math.cos(angle);
-		dy += Math.sin(angle);
-		while (dx >= getAmas().getEnvironment().getWidth() / 2)
-			dx -= getAmas().getEnvironment().getWidth();
-		while (dy >= getAmas().getEnvironment().getHeight() / 2)
-			dy -= getAmas().getEnvironment().getHeight();
-		while (dx < -getAmas().getEnvironment().getWidth() / 2)
-			dx += getAmas().getEnvironment().getWidth();
-		while (dy < -getAmas().getEnvironment().getHeight() / 2)
-			dy += getAmas().getEnvironment().getHeight();
-
-		if (amas.getEnvironment().getRandom().nextDouble() < 0.001) {
-			dead = true;
-			destroy();
-		}
-
-		if (amas.getEnvironment().getRandom().nextDouble() < 0.001) {
-			new AntExample(getAmas(), dx, dy);
-		}
-	}
-
-	@Override
-	public void onUpdateRender() {
-		image.move(dx, dy);
-		image.setAngle(angle);
-		image.setInfo("Ant "+getId()+"\nPosition "+dx+" "+dy+"\nAngle "+angle);
-		if(dead) {
-			image.setFilename("file:Resources/ant_dead.png");
-			image.setInfo("Ant "+getId()+"\nPosition "+dx+" "+dy+"\nAngle "+angle+"\nDead");
-		}
-	}
-}
+package fr.irit.smac.amak.examples.randomants;
+
+import fr.irit.smac.amak.Agent;
+import fr.irit.smac.amak.ui.VUI;
+import fr.irit.smac.amak.ui.drawables.DrawableImage;
+
+public class AntExample extends Agent<AntHillExample, WorldExample> {
+	
+	private boolean dead = false; 
+	
+	/**
+	 * X coordinate of the ant in the world
+	 */
+	public double dx;
+	/**
+	 * Y coordinate of the ant in the world
+	 */
+	public double dy;
+	/**
+	 * Angle in radians
+	 */
+	private double angle = Math.random() * Math.PI * 2;
+	private DrawableImage image;
+
+	/**
+	 * Constructor of the ant
+	 * 
+	 * @param amas
+	 *            the amas the ant belongs to
+	 * @param startX
+	 *            Initial X coordinate
+	 * @param startY
+	 *            Initial Y coordinate
+	 */
+	public AntExample(AntHillExample amas, double startX, double startY) {
+		super(amas, startX, startY);
+	}
+	@Override
+	public void onInitialization() {
+		dx = (double) params[0];
+		dy = (double) params[1];
+	}
+
+	@Override
+	protected void onRenderingInitialization() {
+		image = VUI.get().createAndAddImage(dx, dy, "file:resources/ant.png");
+		image.setName("Ant "+getId());
+	}
+
+	/**
+	 * Move in a random direction
+	 */
+	@Override
+	protected void onDecideAndAct() {
+		double random = amas.getEnvironment().getRandom().nextGaussian();
+		angle += random * 0.1;
+		dx += Math.cos(angle);
+		dy += Math.sin(angle);
+		while (dx >= getAmas().getEnvironment().getWidth() / 2)
+			dx -= getAmas().getEnvironment().getWidth();
+		while (dy >= getAmas().getEnvironment().getHeight() / 2)
+			dy -= getAmas().getEnvironment().getHeight();
+		while (dx < -getAmas().getEnvironment().getWidth() / 2)
+			dx += getAmas().getEnvironment().getWidth();
+		while (dy < -getAmas().getEnvironment().getHeight() / 2)
+			dy += getAmas().getEnvironment().getHeight();
+
+		if (amas.getEnvironment().getRandom().nextDouble() < 0.001) {
+			dead = true;
+			destroy();
+		}
+
+		if (amas.getEnvironment().getRandom().nextDouble() < 0.001) {
+			new AntExample(getAmas(), dx, dy);
+		}
+	}
+
+	@Override
+	public void onUpdateRender() {
+		image.move(dx, dy);
+		image.setAngle(angle);
+		image.setInfo("Ant "+getId()+"\nPosition "+dx+" "+dy+"\nAngle "+angle);
+		if(dead) {
+			image.setFilename("file:Resources/ant_dead.png");
+			image.setInfo("Ant "+getId()+"\nPosition "+dx+" "+dy+"\nAngle "+angle+"\nDead");
+		}
+	}
+}
diff --git a/AMAKFX/src/fr/irit/smac/amak/examples/randomantsMultiUi/AntExampleMutliUI.java b/AMAKFX/src/fr/irit/smac/amak/examples/randomantsMultiUi/AntExampleMutliUI.java
index 4b09958e..a8b731ca 100644
--- a/AMAKFX/src/fr/irit/smac/amak/examples/randomantsMultiUi/AntExampleMutliUI.java
+++ b/AMAKFX/src/fr/irit/smac/amak/examples/randomantsMultiUi/AntExampleMutliUI.java
@@ -55,6 +55,7 @@ public class AntExampleMutliUI extends Agent<AntHillExampleMultiUI, WorldExample
 	 */
 	@Override
 	protected void onDecideAndAct() {
+
 		double random = amas.getEnvironment().getRandom().nextGaussian();
 		angle += random * 0.1;
 		dx += Math.cos(angle);
diff --git a/AMAKFX/src/fr/irit/smac/amak/examples/randomantsMultiUi/AntsLaunchExampleMultiUI.java b/AMAKFX/src/fr/irit/smac/amak/examples/randomantsMultiUi/AntsLaunchExampleMultiUI.java
index 51e5a90c..560e6cf4 100644
--- a/AMAKFX/src/fr/irit/smac/amak/examples/randomantsMultiUi/AntsLaunchExampleMultiUI.java
+++ b/AMAKFX/src/fr/irit/smac/amak/examples/randomantsMultiUi/AntsLaunchExampleMultiUI.java
@@ -35,8 +35,6 @@ public class AntsLaunchExampleMultiUI extends Application{
 		
 
 		AntHillExampleMultiUI amas1 = new AntHillExampleMultiUI(window, VUIMulti.getDefault(), env);
-		
-		
 		AntHillExampleMultiUI amas2 = new AntHillExampleMultiUI(window2, VUIMulti.getDefault(), env2);
 
 	}
-- 
GitLab