From 18052c1da344cde95905fd478e72375c02a87ba9 Mon Sep 17 00:00:00 2001 From: klmp200 Date: Fri, 26 May 2017 17:50:32 +0200 Subject: [PATCH] Clean exit --- .../sierpinski/FractalesFXApplication.sarl | 2 ++ .../sarl/demos/sierpinski/agents/Fractal.sarl | 33 +++++++++++++++---- .../sarl/demos/sierpinski/events/events.sarl | 12 +------ .../sierpinski/gui/FXMLViewerController.sarl | 8 +++-- 4 files changed, 35 insertions(+), 20 deletions(-) diff --git a/src/main/sarl/io/sarl/demos/sierpinski/FractalesFXApplication.sarl b/src/main/sarl/io/sarl/demos/sierpinski/FractalesFXApplication.sarl index 13346a6..8a70360 100644 --- a/src/main/sarl/io/sarl/demos/sierpinski/FractalesFXApplication.sarl +++ b/src/main/sarl/io/sarl/demos/sierpinski/FractalesFXApplication.sarl @@ -7,6 +7,7 @@ import java.net.URL import javafx.fxml.JavaFXBuilderFactory import javafx.scene.Parent import javafx.scene.Scene +import io.sarl.demos.sierpinski.gui.FXMLViewerController class FractalesFXApplications extends Application { private var loader: FXMLLoader @@ -31,6 +32,7 @@ class FractalesFXApplications extends Application { @Override public def stop() throws Exception { super.stop() + (loader.controller as FXMLViewerController).exitApplication() } } \ No newline at end of file diff --git a/src/main/sarl/io/sarl/demos/sierpinski/agents/Fractal.sarl b/src/main/sarl/io/sarl/demos/sierpinski/agents/Fractal.sarl index e68f08f..2752d6e 100644 --- a/src/main/sarl/io/sarl/demos/sierpinski/agents/Fractal.sarl +++ b/src/main/sarl/io/sarl/demos/sierpinski/agents/Fractal.sarl @@ -19,6 +19,7 @@ import io.sarl.demos.sierpinski.objects.Positions import io.sarl.demos.sierpinski.objects.Triangle import io.sarl.core.Logging import io.sarl.util.OpenEventSpace +import io.sarl.demos.sierpinski.events.Exit agent Fractal { uses InnerContextAccess, Lifecycle, DefaultContextInteractions, Behaviors @@ -83,6 +84,12 @@ agent Fractal { innerContext.defaultSpace.emit(m) } + def emitExit(){ + var e = new Exit + e.source = innerContext.defaultSpace.getAddress(ID); + innerContext.defaultSpace.emit(e) + } + on Multiply[guiSpace !== null && occurrence.source.spaceId == guiSpace.spaceID && !hasMemberAgent]{ this.multiplication } @@ -99,12 +106,24 @@ agent Fractal { this.emitMultiply } + on Exit[guiSpace !== null && occurrence.source.spaceId == guiSpace.spaceID && !hasMemberAgent]{ + killMe; + } + + on Exit[guiSpace !== null && occurrence.source.spaceId == guiSpace.spaceID && hasMemberAgent]{ + this.emitExit + } + + on Exit[occurrence.isInDefaultSpace && !hasMemberAgent]{ + killMe + } + + on Exit[occurrence.isInDefaultSpace && hasMemberAgent]{ + this.emitExit + } + + on MemberLeft[!hasMemberAgent]{ + killMe + } -// on Multiply[hasMemberAgent && memberAgentCount >= 3 && (occurrence.emmiter == parentID || guiSpace !== null)]{ -// innerContext.defaultSpace.emit(new Multiply(ID)) -// } - -// on MemberLeft [!isFromMe(occurrence) && !hasMemberAgent] { -// killMe -// } } \ No newline at end of file diff --git a/src/main/sarl/io/sarl/demos/sierpinski/events/events.sarl b/src/main/sarl/io/sarl/demos/sierpinski/events/events.sarl index ec2937d..f195e48 100644 --- a/src/main/sarl/io/sarl/demos/sierpinski/events/events.sarl +++ b/src/main/sarl/io/sarl/demos/sierpinski/events/events.sarl @@ -1,14 +1,4 @@ package io.sarl.demos.sierpinski.events -import java.util.UUID - -event Multiply { - var emmiter: UUID - new (emmiter: UUID){ - this.emmiter = emmiter - } - new (){ - emmiter = null - } -} +event Multiply event Exit \ No newline at end of file diff --git a/src/main/sarl/io/sarl/demos/sierpinski/gui/FXMLViewerController.sarl b/src/main/sarl/io/sarl/demos/sierpinski/gui/FXMLViewerController.sarl index a9869cf..11cb909 100644 --- a/src/main/sarl/io/sarl/demos/sierpinski/gui/FXMLViewerController.sarl +++ b/src/main/sarl/io/sarl/demos/sierpinski/gui/FXMLViewerController.sarl @@ -19,6 +19,7 @@ import javafx.util.Duration import javafx.scene.paint.Color import io.sarl.demos.sierpinski.objects.Vector2D import io.sarl.lang.core.Address +import io.sarl.demos.sierpinski.events.Exit class FXMLViewerController implements EventListener { @@ -40,8 +41,11 @@ class FXMLViewerController implements EventListener { @FXML private var drawZone: Canvas @FXML private var multiplyButton: Button - @FXML public def exitApplication(ievent: ActionEvent){ -// ispace.emit(new Exit()) + @FXML public def exitApplication(){ + var e = new Exit() + this.multiplyButton.setDisable(true) + e.source = new Address(ispace.spaceID, id) + this.ispace.emit(e) // Platform.ext() }