mirror of
https://github.com/klmp200/sierpinski-fractales.git
synced 2024-11-21 15:23:19 +00:00
Documentation
This commit is contained in:
parent
06676b4f55
commit
8de385c556
@ -10,6 +10,9 @@ import javafx.scene.Parent
|
||||
import javafx.scene.Scene
|
||||
import javafx.stage.Stage
|
||||
|
||||
/*
|
||||
* Sierpinski fractal demo
|
||||
*/
|
||||
class FractalesFXApplications extends Application {
|
||||
private var loader : FXMLLoader
|
||||
|
||||
|
@ -21,6 +21,11 @@ import io.sarl.core.Logging
|
||||
import io.sarl.util.OpenEventSpace
|
||||
import io.sarl.demos.sierpinski.events.Exit
|
||||
|
||||
/*
|
||||
* Fractal agent
|
||||
* Can communicate with the GUI if not contained in an other agent
|
||||
* Contains other Fractal agent in its inner context
|
||||
*/
|
||||
agent Fractal {
|
||||
uses InnerContextAccess, Lifecycle, DefaultContextInteractions, Behaviors
|
||||
uses Logging
|
||||
@ -31,10 +36,14 @@ agent Fractal {
|
||||
var positions: Positions
|
||||
var guiSpace: OpenEventSpace
|
||||
|
||||
/*
|
||||
* Initialization step
|
||||
*/
|
||||
on Initialize {
|
||||
if (occurrence.parameters.size >= 2){
|
||||
screenSurface = occurrence.parameters.get(0) as Square
|
||||
positions = occurrence.parameters.get(1) as Positions
|
||||
// Detect if created by the GUI or not
|
||||
if (occurrence.parameters.size.equals(3)){
|
||||
var ctrl = occurrence.parameters.get(2) as FXMLViewerController
|
||||
guiSpace = defaultContext.createSpace(OpenEventSpaceSpecification, UUID.randomUUID)
|
||||
@ -49,6 +58,9 @@ agent Fractal {
|
||||
this.generatePoints
|
||||
}
|
||||
|
||||
/*
|
||||
* Generate triangle points
|
||||
*/
|
||||
def generatePoints(){
|
||||
triangle = new Triangle(
|
||||
screenSurface.bottomLeft,
|
||||
@ -59,6 +71,9 @@ agent Fractal {
|
||||
info("Parent : " + parentID)
|
||||
}
|
||||
|
||||
/*
|
||||
* Multiply itself and create child Fractal
|
||||
*/
|
||||
def multiplication(){
|
||||
var screen1 = new Square(
|
||||
triangle.bottomLeft,
|
||||
@ -78,50 +93,83 @@ agent Fractal {
|
||||
spawnInContext(Fractal, innerContext, screen3, positions)
|
||||
}
|
||||
|
||||
/*
|
||||
* Create and emit Multiply signal
|
||||
*/
|
||||
def emitMultiply(){
|
||||
var m = new Multiply
|
||||
m.source = innerContext.defaultSpace.getAddress(ID)
|
||||
innerContext.defaultSpace.emit(m)
|
||||
}
|
||||
|
||||
/*
|
||||
* Create and emit Exit signal
|
||||
*/
|
||||
def emitExit(){
|
||||
var e = new Exit
|
||||
e.source = innerContext.defaultSpace.getAddress(ID);
|
||||
innerContext.defaultSpace.emit(e)
|
||||
}
|
||||
|
||||
/*
|
||||
* Multiply itself if signal comes from the GUI and have no member agent
|
||||
*/
|
||||
on Multiply[guiSpace !== null && occurrence.source.spaceId == guiSpace.spaceID && !hasMemberAgent]{
|
||||
this.multiplication
|
||||
}
|
||||
|
||||
/*
|
||||
* Transmit GUI emit signal if connected to GUI and have member agent
|
||||
*/
|
||||
on Multiply [guiSpace !== null && occurrence.source.spaceId == guiSpace.spaceID && hasMemberAgent] {
|
||||
this.emitMultiply
|
||||
}
|
||||
|
||||
/*
|
||||
* Multiply itself if not connected to GUI and have no member agent
|
||||
*/
|
||||
on Multiply[occurrence.isInDefaultSpace && !hasMemberAgent] {
|
||||
this.multiplication
|
||||
}
|
||||
|
||||
/*
|
||||
* Emit multiply signal in inner context if not connected to GUI and have member agents
|
||||
*/
|
||||
on Multiply[occurrence.isInDefaultSpace && hasMemberAgent] {
|
||||
this.emitMultiply
|
||||
}
|
||||
|
||||
/*
|
||||
* Kill itself if have no member agent and is connected to the GUI
|
||||
*/
|
||||
on Exit[guiSpace !== null && occurrence.source.spaceId == guiSpace.spaceID && !hasMemberAgent]{
|
||||
killMe;
|
||||
}
|
||||
|
||||
/*
|
||||
* Transmit a new Exit signal if have member agent and is connected to the GUI
|
||||
*/
|
||||
on Exit[guiSpace !== null && occurrence.source.spaceId == guiSpace.spaceID && hasMemberAgent]{
|
||||
this.emitExit
|
||||
}
|
||||
|
||||
/*
|
||||
* Kill itself if have no member agent and is not connected to the GUI
|
||||
*/
|
||||
on Exit[occurrence.isInDefaultSpace && !hasMemberAgent]{
|
||||
killMe
|
||||
}
|
||||
|
||||
/*
|
||||
* Emit a new Exit signal in inner context if have member agent and is not connected to the GUI
|
||||
*/
|
||||
on Exit[occurrence.isInDefaultSpace && hasMemberAgent]{
|
||||
this.emitExit
|
||||
}
|
||||
|
||||
/*
|
||||
* Kill itself when all member agent are killed
|
||||
*/
|
||||
on MemberLeft[!hasMemberAgent]{
|
||||
killMe
|
||||
}
|
||||
|
@ -1,4 +1,11 @@
|
||||
package io.sarl.demos.sierpinski.events
|
||||
|
||||
/*
|
||||
* Multiply signal to make Fractal agent multiply
|
||||
*/
|
||||
event Multiply
|
||||
|
||||
/*
|
||||
* Make Fractal agent kill itself and its content
|
||||
*/
|
||||
event Exit
|
@ -20,8 +20,14 @@ import io.sarl.demos.sierpinski.objects.Vector2D
|
||||
import io.sarl.lang.core.Address
|
||||
import io.sarl.demos.sierpinski.events.Exit
|
||||
|
||||
/*
|
||||
* Controller of the GUI
|
||||
*/
|
||||
class FXMLViewerController implements EventListener {
|
||||
|
||||
/*
|
||||
* Inner class used to launch janus kernel and first Fractal agent
|
||||
*/
|
||||
static class Launcher {
|
||||
static def main(screen: Square, controller: FXMLViewerController){
|
||||
Boot::offline = true
|
||||
@ -40,6 +46,9 @@ class FXMLViewerController implements EventListener {
|
||||
@FXML private var drawZone: Canvas
|
||||
@FXML private var multiplyButton: Button
|
||||
|
||||
/*
|
||||
* Exit janus kernel by sending kill signal to agents
|
||||
*/
|
||||
@FXML public def exitApplication(){
|
||||
if (setuped){
|
||||
var e = new Exit()
|
||||
@ -49,6 +58,9 @@ class FXMLViewerController implements EventListener {
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Emit a multiply signal
|
||||
*/
|
||||
@FXML protected def actionMultiply() {
|
||||
if (!setuped){
|
||||
Launcher.main(
|
||||
@ -62,10 +74,16 @@ class FXMLViewerController implements EventListener {
|
||||
this.ispace.emit(m)
|
||||
}
|
||||
|
||||
/*
|
||||
* Get position object
|
||||
*/
|
||||
public def getPositions(){
|
||||
return this.positions
|
||||
}
|
||||
|
||||
/*
|
||||
* Draw fractals on canvas
|
||||
*/
|
||||
private def draw(){
|
||||
var gc: GraphicsContext = drawZone.graphicsContext2D
|
||||
var wait: PauseTransition = new PauseTransition(Duration.seconds(0.03))
|
||||
@ -87,16 +105,25 @@ class FXMLViewerController implements EventListener {
|
||||
wait.play
|
||||
}
|
||||
|
||||
/*
|
||||
* Allow to first agent to register gui on a space
|
||||
*/
|
||||
public def setGUISpace(ispace: OpenEventSpace){
|
||||
this.ispace = ispace
|
||||
this.ispace.register(this)
|
||||
}
|
||||
|
||||
/*
|
||||
* Get object ID on the space
|
||||
*/
|
||||
@Override
|
||||
public def getID(): UUID {
|
||||
return this.id
|
||||
}
|
||||
|
||||
/*
|
||||
* Needed for EventListner implementation
|
||||
*/
|
||||
@Override
|
||||
public def receiveEvent(ievent: Event){
|
||||
|
||||
|
@ -4,6 +4,10 @@ import java.util.List
|
||||
import java.util.ArrayList
|
||||
import java.util.Collections
|
||||
|
||||
/*
|
||||
* Object referencing every Fractal position
|
||||
* Used by the GUI for printing in canvas
|
||||
*/
|
||||
public class Positions {
|
||||
private var frac: List<Triangle>
|
||||
|
||||
|
@ -1,5 +1,8 @@
|
||||
package io.sarl.demos.sierpinski.objects
|
||||
|
||||
/*
|
||||
* Square object used to simulate a screen to print Triangle on
|
||||
*/
|
||||
public class Square {
|
||||
private var bottomLeft : Vector2D
|
||||
private var topLeft : Vector2D
|
||||
|
@ -1,5 +1,8 @@
|
||||
package io.sarl.demos.sierpinski.objects
|
||||
|
||||
/*
|
||||
* Triangle object created by Fractal
|
||||
*/
|
||||
class Triangle {
|
||||
private var bottomLeft: Vector2D
|
||||
private var bottomRight: Vector2D
|
||||
|
@ -1,5 +1,9 @@
|
||||
package io.sarl.demos.sierpinski.objects
|
||||
|
||||
/*
|
||||
* Simple 2D vector
|
||||
* Contains x and y position
|
||||
*/
|
||||
public class Vector2D {
|
||||
private var y: Double
|
||||
private var x: Double
|
||||
|
Loading…
Reference in New Issue
Block a user