<<< Back to ruelke.net
public class Boat
{
 	// unique state ids
	public static const STATE_ANCHORING:int = 0;
    	public static const STATE_FLOATING:int = 1;
	public static const STATE_SAILING:int = 2;
	public static const NUMBER_OF_STATES:int = 3;

	private var m_statemachine:cStatemachine = null;

	public function Boat()
	{
        // set up state- machine diagram
        m_sm = new cStatemachine(NUMBER_OF_STATES);

        m_sm.AddState(ST_ANCHORING, StateAnchoring);
        m_sm.AddTransition(ST_ANCHORING, IsAnchorUp, ST_FLOATING);

        m_sm.AddState(ST_FLOATING, StateFloating);
        m_sm.AddTransition(ST_FLOATING, IsSailOut, ST_SAILING);
        m_sm.AddTransition(ST_FLOATING, IsAnchorDown, ST_ANCHORING);

        m_sm.AddState(ST_SAILING, StateSailing);
        m_sm.AddTransition(ST_FLOATING, IsSailIn, ST_FLOATING);

        // set initial state
        m_statemachine.SetState(STATE_ANCHORING);
    }

    // state methods
    private function StateAnchoring(_event:int) : void { ... }
    private function StateFloating(_event:int) : void { ... }
    private function StateSailing(_event:int) : void { ... }

    // transition triggers
    private function IsAnchorUp(_event:int) : Boolean  { ... };
    private function IsAnchorDown(_event:int) : Boolean  { ... };
    private function IsSailIn(_event:int) : Boolean  { ... };
    private function IsSailOut(_event:int) : Boolean  { ... };
}

<<< Back to ruelke.net
syntax highlighted by Code2HTML, v. 0.9.1