Created
November 8, 2018 20:23
-
-
Save frame-lang/11143a7d95f1183e65740503246aa071 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//-------------------------------------------------// | |
// // | |
// FMN // | |
// // | |
//-------------------------------------------------// | |
// Original source is course material for cs4731 at Georgia Institute of Technology | |
// Author: Dr. Stephen Lee-Urban | |
// see https://www.cc.gatech.edu/~surban6/2016-cs4731/lectures/2016_06_02_DecisionMaking_FSM.pdf | |
#GaTech_cs4731_fsm2 | |
-interface- | |
predator | |
predator_hungry | |
hungry | |
hungry_food | |
-machine- | |
$Idle | |
|predator| ->> $Flee ^ | |
|hungry_food| ->> $Eat ^ | |
|hungry| ->> $Search ^ | |
$Flee | |
|predator_hungry| ->> $FleeSearch ^ | |
$Search | |
|predator| ->> $Flee ^ | |
|hungry_food| ->> $Eat ^ | |
|predator_hungry| ->> $FleeSearch ^ | |
$Eat | |
|predator| ->> $Flee ^ | |
|hungry| ->> $Search ^ | |
$FleeSearch | |
|predator| ->> $Flee ^ | |
//-------------------------------------------------// | |
// // | |
// Implementation // | |
// // | |
//-------------------------------------------------// | |
class FrameEvent { | |
var _msg:String | |
var _params:Object | |
var _return:Object | |
FrameEvent(msg:String, params:Object = null) { | |
_msg = msg | |
_params = params | |
} | |
} | |
//-------------------------------------------------// | |
class GaTech_cs4731_fsm2 { | |
/********************************** | |
-interface- | |
predator | |
predator_hungry | |
hungry | |
hungry_food | |
***********************************/ | |
func predator() { _state(new FrameEvent("predator")) } | |
func predator_hungry() { _state(new FrameEvent("predator_hungry")) } | |
func hungry() { _state(new FrameEvent("hungry")) } | |
func hungry_food() { _state(new FrameEvent("hungry_food")) } | |
// -machine- | |
var _state(e:FrameEvent) = Idle | |
/********************************** | |
$Idle | |
|predator| ->> $Flee ^ | |
|hungry_food| ->> $Eat ^ | |
|hungry| ->> $Search ^ | |
***********************************/ | |
func GatherTreasure(e:FrameEvent) { | |
if (e._msg == "monsterInSight") { | |
_state = Flee | |
return | |
} | |
} | |
/********************************** | |
$Flee | |
|predator_hungry| ->> $FleeSearch ^ | |
***********************************/ | |
func Flee(e:FrameEvent) { | |
if (e._msg == "predator_hungry") { | |
_state = FleeSearch | |
return | |
} | |
} | |
/********************************** | |
$Search | |
|predator| ->> $Flee ^ | |
|hungry_food| ->> $Eat ^ | |
|predator_hungry| ->> $FleeSearch ^ | |
***********************************/ | |
func Search(e:FrameEvent) { | |
if (e._msg == "predator") { | |
_state = Flee | |
return | |
} | |
if (e._msg == "hungry_food") { | |
_state = Eat | |
return | |
} | |
if (e._msg == "predator_hungry") { | |
_state = FleeSearch | |
return | |
} | |
} | |
/********************************** | |
$Eat | |
|predator| ->> $Flee ^ | |
|hungry| ->> $Search ^ | |
***********************************/ | |
func Eat(e:FrameEvent) { | |
if (e._msg == "predator") { | |
_state = Flee | |
return | |
} | |
if (e._msg == "hungry") { | |
_state = Search | |
return | |
} | |
} | |
/********************************** | |
$FleeSearch | |
|predator| ->> $Flee ^ | |
***********************************/ | |
func FleeSearch(e:FrameEvent) { | |
if (e._msg == "predator") { | |
_state = Flee | |
return | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment