#include "Behaviors/StateMachine.h"

$nodeclass Lab2Part3Number3 : StateNode {
    $setupmachine {
        launch: StateNode =N=> {blinkPlay, barkLow, noBlink}

	noBlink: LedNode [setPriority(MotionManager::kBackgroundPriority);
                      getMC()->set(RobotInfo::AllLEDMask,0.0)]
        blinkPlay: LedNode [getMC()->flash(RobotInfo::PlayLEDMask,1.0,1000)]
	blinkPower: LedNode [getMC()->flash(RobotInfo::PowerRedLEDMask,1.0,1000)]
	blinkAdvance: LedNode [getMC()->flash(RobotInfo::AdvanceLEDMask,1.0,1000)]
	blinkPlayRev: LedNode [getMC()->flash(RobotInfo::PlayLEDMask,1.0,1000)]
	blinkPowerRev: LedNode [getMC()->flash(RobotInfo::PowerRedLEDMask,1.0,1000)]
	blinkAdvanceRev: LedNode [getMC()->flash(RobotInfo::AdvanceLEDMask,1.0,1000)]
	barkLow: SoundNode("barklow.wav")
	barkMed: SoundNode("barkmed.wav")
	yip: SoundNode("yipper.wav")
	barkLowRev: SoundNode("barklow.wav")
	barkMedRev: SoundNode("barkmed.wav")
	yipRev: SoundNode("yipper.wav")
	
	blinkPlay =C=> blinkPower
	blinkPower =C=> blinkAdvance
	blinkAdvance =C=> blinkPlay

	blinkPlayRev =C=> blinkAdvanceRev
	blinkAdvanceRev =C=> blinkPowerRev
	blinkPowerRev =C=> blinkPlayRev

	barkLow =C=> barkMed
	barkMed =C=> yip
	yip =C=> barkLow

	barkLowRev =C=> yipRev
	yipRev =C=> barkMedRev
	barkMedRev =C=> barkLowRev

	blinkPlay =B(RobotInfo::BumpLeftButOffset)=> blinkAdvanceRev
	blinkPower =B(RobotInfo::BumpLeftButOffset)=> blinkPlayRev
	blinkAdvance =B(RobotInfo::BumpLeftButOffset)=> blinkPowerRev

	blinkPlayRev =B(RobotInfo::BumpLeftButOffset)=> blinkPower
	blinkAdvanceRev =B(RobotInfo::BumpLeftButOffset)=> blinkPlay
	blinkPowerRev =B(RobotInfo::BumpLeftButOffset)=> blinkAdvance

	barkLow =B(RobotInfo::BumpLeftButOffset)=> yipRev
	barkMed =B(RobotInfo::BumpLeftButOffset)=> barkLowRev
	yip =B(RobotInfo::BumpLeftButOffset)=> barkMedRev

	barkLowRev =B(RobotInfo::BumpLeftButOffset)=> barkMed
	yipRev =B(RobotInfo::BumpLeftButOffset)=> barkLow
	barkMedRev =B(RobotInfo::BumpLeftButOffset)=> yip
    }
}
REGISTER_BEHAVIOR(Lab2Part3Number3);