#include "Behaviors/StateMachine.h"

$nodeclass ForkJoin : StateNode {

  $setupmachine {

    launch: StateNode =N=> {noblink, power_f, howl_f}
    noblink: LedNode [setPriority(MotionManager::kBackgroundPriority);
	                  getMC()->set(RobotInfo::AllLEDMask,0.0)]

    power_f: 		LedNode [getMC()->set(RobotInfo::PowerRedLEDMask,1.0)]
    							=B(RobotInfo::BumpLeftButOffset)=> advance_r
    play_f: 		LedNode [getMC()->set(RobotInfo::PlayLEDMask,1.0)]
    							=B(RobotInfo::BumpLeftButOffset)=> power_r
    advance_f: 	LedNode [getMC()->set(RobotInfo::AdvanceLEDMask,1.0)]
    							=B(RobotInfo::BumpLeftButOffset)=> play_r
    power_r: 		LedNode [getMC()->set(RobotInfo::PowerRedLEDMask,1.0)]
    							=B(RobotInfo::BumpLeftButOffset)=> play_f
    play_r: 		LedNode [getMC()->set(RobotInfo::PlayLEDMask,1.0)]
    							=B(RobotInfo::BumpLeftButOffset)=> advance_f
    advance_r: 	LedNode [getMC()->set(RobotInfo::AdvanceLEDMask,1.0)]
    							=B(RobotInfo::BumpLeftButOffset)=> power_f

    howl_f:  		SoundNode("howl.wav")
    							=B(RobotInfo::BumpLeftButOffset)=> ping_r
    barklow_f:  SoundNode("barklow.wav") 
    							=B(RobotInfo::BumpLeftButOffset)=> howl_r
    ping_f:  		SoundNode("ping.wav")
    							=B(RobotInfo::BumpLeftButOffset)=> barklow_r
    howl_r:  		SoundNode("howl.wav")
    							=B(RobotInfo::BumpLeftButOffset)=> barklow_f
    barklow_r:  SoundNode("barklow.wav")
    							=B(RobotInfo::BumpLeftButOffset)=> ping_f
    ping_r:  		SoundNode("ping.wav")
    							=B(RobotInfo::BumpLeftButOffset)=> howl_f

    {power_f, howl_f} =C=> {play_f, barklow_f} =C=>
    {advance_f, ping_f} =C=> {power_f, howl_f}

    {power_r, howl_r} =C=> {advance_r, ping_r} =C=>
    {play_r, barklow_r} =C=> {power_r, howl_r}
  }
}

REGISTER_BEHAVIOR(ForkJoin);
