//-*-c++-*-
#ifndef INCLUDED_ForkJoinBehavior_h_
#define INCLUDED_ForkJoinBehavior_h_
 
#include "Behaviors/StateMachine.h"
#include "Events/EventRouter.h"

class ForkJoinBehavior : public StateNode {

public:
  ForkJoinBehavior() : StateNode("ForkJoinBehavior") {}
 
  virtual void setup() {
#statemachine

startnode: StateNode =N=> {redledf, redsndf}

redledf: LedNode [getMC()->flash(RobotInfo::RedLEDMask, 10000);]
redsndf: SoundNode($, "howl.wav")[setAutoStop(TRUE);]
{redledf, redsndf} =E(buttonEGID, RobotInfo::GreenButOffset, activateETID)=> revredf
{redledf, redsndf} =C(1)=> {yellowledf, yellowsndf}

revredf: StateNode
revredf =N=> {blueledb, bluesndb}

redledb: LedNode [getMC()->flash(RobotInfo::RedLEDMask, 10000);]
redsndb: SoundNode($, "howl.wav")
{redledb, redsndb} =E(buttonEGID, RobotInfo::GreenButOffset, activateETID)=> revredb
{redledb, redsndb} =C(1)=> {blueledb, bluesndb}

revredb: StateNode
revredb =N=> {yellowledf, yellowsndf}

yellowledf: LedNode [getMC()->flash(RobotInfo::YellowLEDMask, 10000);]
yellowsndf: SoundNode($, "barklow.wav") 
{yellowledf, yellowsndf}  =E(buttonEGID, RobotInfo::GreenButOffset, activateETID)=> revyellowf
{yellowledf, yellowsndf} =C(1)=> {greenledf, greensndf}

revyellowf: StateNode
revyellowf =N=> {redledb, redsndb}

yellowledb: LedNode [getMC()->flash(RobotInfo::YellowLEDMask, 10000);]
yellowsndb: SoundNode($, "barklow.wav")
{yellowledb, yellowsndb} =E(buttonEGID, RobotInfo::GreenButOffset, activateETID)=> revyellowb
{yellowledb, yellowsndb} =C(1)=> {redledb, redsndb}

revyellowb: StateNode
revyellowb =N=> {greenledf, greensndf}

greenledf: LedNode [getMC()->flash(RobotInfo::GreenLEDMask, 10000);]
greensndf: SoundNode($, "ping.wav")
{greenledf, greensndf} =E(buttonEGID, RobotInfo::GreenButOffset, activateETID)=> revgreenf
{greenledf, greensndf} =C(1)=>{ blueledf, bluesndf}

revgreenf: StateNode
revgreenf =N=> {yellowledb, yellowsndb}

greenledb: LedNode [getMC()->flash(RobotInfo::GreenLEDMask, 10000);]
greensndb: SoundNode($, "ping.wav")
{greenledb, greensndb} =E(buttonEGID, RobotInfo::GreenButOffset, activateETID)=> revgreenb
{greenledb, greensndb} =C(1)=>{ yellowledb, yellowsndb}

revgreenb: StateNode
revgreenb =N=> {blueledf, bluesndf}

blueledf: LedNode [getMC()->flash(RobotInfo::BlueLEDMask, 10000);]
bluesndf: SoundNode($, "toc.wav")
{blueledf, bluesndf} =E(buttonEGID, RobotInfo::GreenButOffset, activateETID)=> revbluef
{blueledf, bluesndf} =C(1)=>{ redledf, redsndf}

revbluef: StateNode
revbluef =N=> {greenledb, greensndb}

blueledb: LedNode [getMC()->flash(RobotInfo::BlueLEDMask, 10000);]
bluesndb: SoundNode($, "toc.wav")
{blueledb, bluesndb} =E(buttonEGID, RobotInfo::GreenButOffset, activateETID)=> revblueb
{blueledb, bluesndb} =C(1)=>{ greenledb, greensndb}

revblueb: StateNode
revblueb =N=> {redledf, redsndf}

#endstatemachine
  }       // end of setup()

};

#endif
