97 lines
2.1 KiB
Plaintext
97 lines
2.1 KiB
Plaintext
package io.sarl.demos.fireworks.agents
|
|
|
|
import io.sarl.core.Behaviors
|
|
import io.sarl.core.DefaultContextInteractions
|
|
import io.sarl.core.Initialize
|
|
import io.sarl.core.InnerContextAccess
|
|
import io.sarl.core.Lifecycle
|
|
import io.sarl.core.Logging
|
|
import io.sarl.core.MemberLeft
|
|
import io.sarl.demos.fireworks.Positions
|
|
import io.sarl.demos.fireworks.events.Exit
|
|
import io.sarl.demos.fireworks.events.Freeze
|
|
import io.sarl.demos.fireworks.events.Launch
|
|
import io.sarl.demos.fireworks.events.RocketReady
|
|
|
|
/*
|
|
* A rocket launcher that own a rocket in it's inner context
|
|
*/
|
|
agent RocketLauncher {
|
|
|
|
uses Logging, Behaviors, DefaultContextInteractions, InnerContextAccess, Lifecycle
|
|
|
|
var x : Double
|
|
var y : Double
|
|
var fireQuantity : Integer
|
|
var gravity : Double
|
|
var grid : Positions
|
|
var exited = false
|
|
|
|
/*
|
|
* Kill itself after an Exit signal
|
|
*/
|
|
on Exit [!hasMemberAgent] {
|
|
emit(new Exit)
|
|
killMe
|
|
}
|
|
|
|
/*
|
|
* Transmit an Exit signal to inner context
|
|
*/
|
|
on Exit [hasMemberAgent && !exited] {
|
|
exited = true
|
|
innerContext.defaultSpace.emit(new Exit)
|
|
}
|
|
|
|
/*
|
|
* Initialization step invoked with parameters
|
|
*/
|
|
on Initialize [!occurrence.parameters.empty] {
|
|
x = occurrence.parameters.get(0) as Double
|
|
y = occurrence.parameters.get(1) as Double
|
|
fireQuantity = occurrence.parameters.get(2) as Integer
|
|
gravity = occurrence.parameters.get(3) as Double
|
|
grid = occurrence.parameters.get(4) as Positions
|
|
|
|
info("New rocket launcher created")
|
|
}
|
|
|
|
/*
|
|
* Initialization step by default
|
|
*/
|
|
on Initialize [occurrence.parameters.empty] {
|
|
x = 0.0
|
|
y = 0.0
|
|
fireQuantity = 30
|
|
gravity = 0.5
|
|
grid = null
|
|
|
|
info("New rocket launcher created")
|
|
emit(new RocketReady)
|
|
}
|
|
|
|
/*
|
|
* Launch a new rocket after a Launch signal
|
|
*/
|
|
on Launch {
|
|
var vx = Math.random() * 2.0
|
|
var vy = Math.random() * 5.5 + 2.0
|
|
spawnInContext(Rocket, getInnerContext, x, y, vx, vy, gravity, fireQuantity, grid)
|
|
}
|
|
|
|
/*
|
|
* Transmit a Freeze signal
|
|
*/
|
|
on Freeze [!isFromMe(occurrence)] {
|
|
innerContext.defaultSpace.emit(occurrence)
|
|
}
|
|
|
|
/*
|
|
* Launch a new rocket when the previous is destroyed
|
|
*/
|
|
on MemberLeft [!isFromMe(occurrence) && !exited] {
|
|
wake(new Launch)
|
|
}
|
|
|
|
}
|