#include "Behaviors/StateMachine.h"

$nodeclass Parallel : StateNode {
	$setupmachine{
	//forward sequence
	begin : StateNode =N=> {barklow, power}  =C=> checkpoint1 : StateNode =N=> {barkmed, play} =C=> checkpoint2 : StateNode =N=>  {yipper,advance} =C=> begin
	
	barklow : SoundNode("barklow.wav")
	yipper : SoundNode("yipper.wav") 
	barkmed : SoundNode("barkmed.wav")
	power : PowerNode
	advance : AdvanceNode
	play : PlayNode
	//transitions from forward sequence

	{barklow, power} =B(RobotInfo::BumpLeftButOffset)=> beginb
	{barkmed, play} =B(RobotInfo::BumpLeftButOffset)=> checkpoint1b
	{yipper, advance} =B(RobotInfo::BumpLeftButOffset)=> checkpoint2b
	
	
	//backwards sequence
	beginb : StateNode =N=> {yipperb, advanceb} =C=> checkpoint1b : StateNode =N=> {barkmedb, playb} =C=> checkpoint2b : StateNode =N=> {barklowb, powerb} =C=> beginb
	
	barklowb : SoundNode("barklow.wav")
        yipperb : SoundNode("yipper.wav")
        barkmedb : SoundNode("barkmed.wav")
	powerb : PowerNode
	advanceb : AdvanceNode
	playb : PlayNode
	//transitions from backwards sequence
	{yipperb, advanceb} =B(RobotInfo::BumpLeftButOffset)=> begin
	{barkmedb, playb}  =B(RobotInfo::BumpLeftButOffset)=> checkpoint1
	{barklowb, powerb}  =B(RobotInfo::BumpLeftButOffset)=> checkpoint2
	
	}

	$nodeclass PowerNode : LedNode : doStart {
		(*getMC()).flash(RobotInfo::PowerRedLEDMask, 1.0,  1000);
	}

	$nodeclass PlayNode : LedNode : doStart {
		(*getMC()).flash(RobotInfo::PlayLEDMask, 1.0, 1000);
	}

	$nodeclass AdvanceNode : LedNode : doStart {
		(*getMC()).flash(RobotInfo::AdvanceLEDMask, 1.0, 1000);
	}
}

REGISTER_BEHAVIOR(Parallel);
