//-*-c++-*-
#ifndef INCLUDED_SynchronousFlashNoiseBehavior_h_
#define INCLUDED_SynchronousFlashNoiseBehavior_h_
 
#include "Behaviors/StateMachine.h"
#include "Events/EventRouter.h"

class SynchronousFlashNoiseBehavior : public StateNode {

public:
  SynchronousFlashNoiseBehavior() : StateNode("SynchronousFlashNoiseBehavior") {}
 
  virtual void setup() {
#statemachine

startnode: StateNode =N=> {alloff, flashRedF, playHowlF}

//forward transitions
{flashRedF, playHowlF} =C(1)=> {flashYellowF, playLowF}
{flashYellowF, playLowF} =C(1)=> {flashGreenF, playPingF}
{flashGreenF, playPingF} =C(1)=> {flashBlueF, playTocF}
{flashBlueF, playTocF} =C(1)=> {flashRedF, playHowlF}

//backward transitions
{flashRedB, playHowlB} =C(1)=> {flashBlueB, playTocB}
{flashBlueB, playTocB} =C(1)=> {flashGreenB, playPingB}
{flashGreenB, playPingB} =C(1)=> {flashYellowB, playLowB}
{flashYellowB, playLowB} =C(1)=> {flashRedB, playHowlB}

//switch from forward to backward
{flashRedF, playHowlF} =E(buttonEGID, ChiaraInfo::GreenButOffset, activateETID)=> {flashBlueB, playTocB}
{flashYellowF, playLowF} =E(buttonEGID, ChiaraInfo::GreenButOffset, activateETID)=> {flashRedB, playHowlB}
{flashGreenF, playPingF} =E(buttonEGID, ChiaraInfo::GreenButOffset, activateETID)=> {flashYellowB, playLowB}
{flashBlueF, playTocF} =E(buttonEGID, ChiaraInfo::GreenButOffset, activateETID)=> {flashGreenB, playPingB}

//switch from backward to forward
{flashRedB, playHowlB} =E(buttonEGID, ChiaraInfo::GreenButOffset, activateETID)=> {flashYellowF, playLowF}
{flashBlueB, playTocB} =E(buttonEGID, ChiaraInfo::GreenButOffset, activateETID)=> {flashRedF, playHowlF}
{flashGreenB, playPingB} =E(buttonEGID, ChiaraInfo::GreenButOffset, activateETID)=> {flashBlueF, playTocF}
{flashYellowB, playLowB} =E(buttonEGID, ChiaraInfo::GreenButOffset, activateETID)=> {flashGreenF, playPingF}


//LED node defs
alloff: LedNode [setPriority(MotionManager::kBackgroundPriority); 
		getMC()->set(RobotInfo::FaceLEDMask, 0.0);]

flashRedB: LedNode [getMC()->set(RobotInfo::RedLEDMask, 1.0);]
flashRedF: LedNode [getMC()->set(RobotInfo::RedLEDMask, 1.0);]

flashYellowB: LedNode [getMC()->set(RobotInfo::YellowLEDMask, 1.0);]
flashYellowF: LedNode [getMC()->set(RobotInfo::YellowLEDMask, 1.0);]

flashGreenB: LedNode [getMC()->set(RobotInfo::GreenLEDMask, 1.0);]
flashGreenF: LedNode [getMC()->set(RobotInfo::GreenLEDMask, 1.0);]

flashBlueB: LedNode [getMC()->set(RobotInfo::BlueLEDMask, 1.0);]
flashBlueF: LedNode [getMC()->set(RobotInfo::BlueLEDMask, 1.0);]

//sound node defs
playLowF: SoundNode($, "barklow.wav")
playLowB: SoundNode($, "barklow.wav")

playTocF: SoundNode($, "toc.wav")
playTocB: SoundNode($, "toc.wav")

playHowlF: SoundNode($, "howl.wav")
playHowlB: SoundNode($, "howl.wav")

playPingF: SoundNode($, "ping.wav")
playPingB: SoundNode($, "ping.wav")

#endstatemachine
  }       // end of setup()

};

#endif
