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

class BarkFlashSync : public StateNode {

public:
    BarkFlashSync() : StateNode("Bark and Flash") {}
    virtual void setup() {
#statemachine
startnode:StateNode

redForward: LedNode [getMC()->flash(ChiaraInfo::RedLEDMask, 1000);]
redSoundForward: SoundNode($, "howl.wav")
yellowForward: LedNode [getMC()->flash(ChiaraInfo::YellowLEDMask, 1000);]
yellowSoundForward: SoundNode($, "barklow.wav")
greenForward: LedNode [getMC()->flash(ChiaraInfo::GreenLEDMask, 1000);]
greenSoundForward: SoundNode($, "ping.wav")
blueForward: LedNode [getMC()->flash(ChiaraInfo::BlueLEDMask, 1000);]
blueSoundForward: SoundNode($, "toc.wav")

redBackward: LedNode [getMC()->flash(ChiaraInfo::RedLEDMask, 1000);]
redSoundBackward: SoundNode($, "howl.wav")
yellowBackward: LedNode [getMC()->flash(ChiaraInfo::YellowLEDMask, 1000);]
yellowSoundBackward: SoundNode($, "barklow.wav")
greenBackward: LedNode [getMC()->flash(ChiaraInfo::GreenLEDMask, 1000);]
greenSoundBackward: SoundNode($, "ping.wav")
blueBackward: LedNode [getMC()->flash(ChiaraInfo::BlueLEDMask, 1000);]
blueSoundBackward: SoundNode($, "toc.wav")

r2y: StateNode
y2g: StateNode
g2b: StateNode
b2r: StateNode

r2b: StateNode
y2r: StateNode
g2y: StateNode
b2g: StateNode

{redForward, redSoundForward} =C=> r2y 
{yellowForward, yellowSoundForward} =C=> y2g 
{greenForward, greenSoundForward} =C=> g2b
{blueForward, blueSoundForward} =C=> b2r

{redBackward, redSoundBackward} =C=> r2b
{yellowBackward, yellowSoundBackward} =C=> y2r
{greenBackward, greenSoundBackward} =C=> g2y
{blueBackward, blueSoundBackward} =C=> b2g

startnode =N=> {redForward, redSoundForward}
r2y =N=> {yellowForward, yellowSoundForward}
y2g =N=> {greenForward, greenSoundForward}
g2b =N=> {blueForward, blueSoundForward}
b2r =N=> {redForward, redSoundForward}

r2b =N=> {blueBackward, blueSoundBackward}
b2g =N=> {greenBackward, greenSoundBackward}
g2y =N=> {yellowBackward, yellowSoundBackward}
y2r =N=> {redBackward, redSoundBackward}

{redForward, redSoundForward} =E(buttonEGID, ChiaraInfo::GreenButOffset, activateETID)=> r2b
{yellowForward, yellowSoundForward} =E(buttonEGID, ChiaraInfo::GreenButOffset, activateETID)=> y2r
{greenForward, greenSoundForward}  =E(buttonEGID, ChiaraInfo::GreenButOffset, activateETID)=> g2y
{blueForward, blueSoundForward} =E(buttonEGID, ChiaraInfo::GreenButOffset, activateETID)=> b2g

{redBackward, redSoundBackward} =E(buttonEGID, ChiaraInfo::GreenButOffset, activateETID)=> r2y
{yellowBackward, yellowSoundBackward} =E(buttonEGID, ChiaraInfo::GreenButOffset, activateETID)=> y2g
{greenBackward, greenSoundBackward} =E(buttonEGID, ChiaraInfo::GreenButOffset, activateETID)=> g2b
{blueBackward, blueSoundBackward} =E(buttonEGID, ChiaraInfo::GreenButOffset, activateETID)=> b2r

r2b =E(buttonEGID, ChiaraInfo::GreenButOffset, activateETID)=> r2y
y2r =E(buttonEGID, ChiaraInfo::GreenButOffset, activateETID)=> y2g
g2y =E(buttonEGID, ChiaraInfo::GreenButOffset, activateETID)=> g2b
b2g =E(buttonEGID, ChiaraInfo::GreenButOffset, activateETID)=> b2r

r2y =E(buttonEGID, ChiaraInfo::GreenButOffset, activateETID)=> r2b
y2g =E(buttonEGID, ChiaraInfo::GreenButOffset, activateETID)=> y2r
g2b =E(buttonEGID, ChiaraInfo::GreenButOffset, activateETID)=> g2y
b2r =E(buttonEGID, ChiaraInfo::GreenButOffset, activateETID)=> b2g
#endstatemachine
  }       // end of setup()

};

#endif

