Over 10 years of community discussion and knowledge are maintained here as a read-only archive.
The entering notification for a State carries a reference in the body to the state we are entering as well, in case you've sub-classed State to pass data.
<fsm xmlns:sub="com.my.namespace.to.state.class.ExtendedStateClass"> <state name="Normal State">...</state> <sub:state name="Extended State 1">...</sub:state> <sub:state name="Extended State 2">...</sub:state></fsm>
<fsm> <state name="Normal State">...</state> <state name="Extended State 1" stateClass="com.my.namespace.to.state.class.ExtendedStateClass">...</state> <state name="Extended State 2" stateClass="com.my.namespace.to.state.class.ExtendedStateClass">...</state></fsm>
var fsm:XML = <fsm xmlns:sub1="com.SubState1" xmlns:sub2="com.SubState2"> <state name="Normal State" /> <sub1:state name="Sub Classed 1" /> <sub2:state name="Sub Classed 2" /></fsm>
var namespaces:Array = fsm.namespaceDeclarations();for each(var ns:Namespace in namespaces) { // get class reference for ns.uri // store it in a hash under key ns.prefix trace("Prefix '" + ns.prefix + "' is for class => " + ns.uri);}for each( var state:XML in fsm.children() ) { var stateNS:Namespace = state.namespace(); if(stateNS == null) { /* USE regular State class */ } else { trace("Need to use class w/ NS: " + stateNS.prefix); // something like var stateClass:Class = stateRefs[stateNS.prefix]; state = new stateClass(); }}
oh, and merry xmas