#include "Behaviors/StateMachine.h"

$nodeclass Lab2_3 : StateNode {
  $setupmachine{

    launch: StateNode =N=> {forward_power_led, forward_barklow}

	// ************** FORWARD NODES **************

	forward_power_led : LedNode [getMC()->flash(RobotInfo::PowerRedLEDMask, 1.0, 1000)]
	forward_power_led =C=> forward_play_led
	forward_power_led =B(RobotInfo::BumpLeftButOffset)=> backward_advance_led

	forward_play_led : LedNode [getMC()->flash(RobotInfo::PlayLEDMask, 1.0, 1000)]
	forward_play_led =C=> forward_advance_led
	forward_play_led =B(RobotInfo::BumpLeftButOffset)=> backward_power_led

	forward_advance_led : LedNode [getMC()->flash(RobotInfo::AdvanceLEDMask, 1.0, 1000)]
	forward_advance_led =C=> forward_power_led
	forward_advance_led =B(RobotInfo::BumpLeftButOffset)=> backward_play_led

	forward_barklow : SoundNode("barklow.wav")
	forward_barklow =C=> forward_barkmed
	forward_barklow =B(RobotInfo::BumpLeftButOffset)=> backward_yipper

	forward_barkmed : SoundNode("barkmed.wav")
	forward_barkmed =C=> forward_yipper
	forward_barkmed =B(RobotInfo::BumpLeftButOffset)=> backward_barklow

	forward_yipper : SoundNode("yipper.wav")
	forward_yipper =C=> forward_barklow
	forward_yipper =B(RobotInfo::BumpLeftButOffset)=> backward_barkmed

	// ************** BACKWARD NODES ***************

	backward_power_led : LedNode [getMC()->flash(RobotInfo::PowerRedLEDMask, 1.0, 1000)]
	backward_power_led =C=> backward_advance_led
	backward_power_led =B(RobotInfo::BumpLeftButOffset)=> forward_play_led

	backward_play_led : LedNode [getMC()->flash(RobotInfo::PlayLEDMask, 1.0, 1000)]
	backward_play_led =C=> backward_power_led
	backward_play_led =B(RobotInfo::BumpLeftButOffset)=> forward_advance_led

	backward_advance_led : LedNode [getMC()->flash(RobotInfo::AdvanceLEDMask, 1.0, 1000)]
	backward_advance_led =C=> backward_play_led
	backward_advance_led =B(RobotInfo::BumpLeftButOffset)=> forward_power_led

	backward_barklow : SoundNode("barklow.wav")
	backward_barklow =C=> backward_yipper
	backward_barklow =B(RobotInfo::BumpLeftButOffset)=> forward_barkmed

	backward_barkmed : SoundNode("barkmed.wav")
	backward_barkmed =C=> backward_barklow
	backward_barkmed =B(RobotInfo::BumpLeftButOffset)=> forward_yipper

	backward_yipper : SoundNode("yipper.wav")
	backward_yipper =C=> backward_barkmed
	backward_yipper =B(RobotInfo::BumpLeftButOffset)=> forward_barklow
  }
}

REGISTER_BEHAVIOR(Lab2_3);
