#include "Behaviors/StateMachine.h"

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

	barklow =B(RobotInfo::BumpLeftButOffset)=> yipperb
	barkmed =B(RobotInfo::BumpLeftButOffset)=> barklowb
	yipper =B(RobotInfo::BumpLeftButOffset)=> barklowb

	power =B(RobotInfo::BumpLeftButOffset)=> advanceb
	play =B(RobotInfo::BumpLeftButOffset)=> powerb
	advance =B(RobotInfo::BumpLeftButOffset)=> playb
	
	//backwards sequence
	barklowb : SoundNode("barklow.wav") =C=> yipperb
	barkmedb : SoundNode("barkmed.wav") =C=> barklowb
	yipperb : SoundNode("yipper.wav") =C=> barklowb
	
	powerb : PowerNode =C=> advanceb
	advanceb : AdvanceNode =C=> playb
	playb : PlayNode =C=> powerb
	//transitions from backwards sequence
	yipperb =B(RobotInfo::BumpLeftButOffset)=> barklow
	barkmedb  =B(RobotInfo::BumpLeftButOffset)=> yipper
	barklowb  =B(RobotInfo::BumpLeftButOffset)=>  barkmed
	

	}

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

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

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

REGISTER_BEHAVIOR(Fork);
