#include "Behaviors/StateMachine.h"

$nodeclass ForkJoinLEDBarkBehavior : StateNode {
  $setupmachine{

    launch: StateNode =N=> {powerLED, powerSnd}


    powerLED: LedNode [getMC()->cycle(RobotInfo::PowerGreenLEDMask, 5000, 1.0)]
    playLED: LedNode [getMC()->cycle(RobotInfo::PlayLEDMask, 5000, 1.0)]
    advLED: LedNode [getMC()->cycle(RobotInfo::AdvanceLEDMask, 5000, 1.0)] 

    powerLEDRev: LedNode [getMC()->cycle(RobotInfo::PowerGreenLEDMask, 5000, 1.0)]
    playLEDRev: LedNode [getMC()->cycle(RobotInfo::PlayLEDMask, 5000, 1.0)]
    advLEDRev: LedNode [getMC()->cycle(RobotInfo::AdvanceLEDMask, 5000, 1.0)] 
    
    powerSnd: SoundNode("howl.wav")
    playSnd: SoundNode("barklow.wav")
    advSnd: SoundNode("ping.wav")

    powerSndRev: SoundNode("howl.wav")
    playSndRev: SoundNode("barklow.wav")
    advSndRev: SoundNode("ping.wav")
    
    {powerLED, powerSnd} 	=C(1)=> {playLED, playSnd}
    {playLED, playSnd}		=C(1)=> {advLED, advSnd}
    {advLED, advSnd}		=C(1)=> {powerLED, powerSnd}

    {powerLED, powerSnd} 	=B(RobotInfo::BumpLeftButOffset)=> {advLEDRev, advSndRev}
    {playLED, playSnd}		=B(RobotInfo::BumpLeftButOffset)=> {powerLEDRev, powerSndRev}
    {advLED, advSnd}		=B(RobotInfo::BumpLeftButOffset)=> {playLEDRev, playSndRev}
    

    {powerLEDRev, powerSndRev}	=C(1)=> {advLEDRev, advSndRev}
    {playLEDRev, playSndRev}	=C(1)=> {powerLEDRev, powerSndRev}
    {advLEDRev, advSndRev}	=C(1)=> {playLEDRev, playSndRev}
    
    {powerLEDRev, powerSndRev}	=B(RobotInfo::BumpLeftButOffset)=> {playLED, playSnd}
    {playLEDRev, playSndRev}	=B(RobotInfo::BumpLeftButOffset)=> {advLED, advSnd}
    {advLEDRev, advSndRev}	=C(RobotInfo::BumpLeftButOffset)=> {powerLED, powerSnd}
  }

}

REGISTER_BEHAVIOR(ForkJoinLEDBarkBehavior);
