#include "Behaviors/StateMachine.h"

$nodeclass Parallel : StateNode {
	$provide bool forward(true);

	$nodeclass DirChanger : StateNode : doStart {
		$reference Parallel::forward;

		if(event->getTypeID() == EventBase::activateETID) {
			forward = !forward;
		}
		postStateCompletion();
	}

	$nodeclass DirRouter : StateNode : doStart {
		$reference Parallel::forward;
		postStateSignal<bool>(forward);
	}

	$setupmachine {
		power_led: LEDActivate($, PowerGreenLEDMask)
		play_led: LEDActivate($, PlayLEDMask)
		advance_led: LEDActivate($, AdvanceLEDMask)
		ping: SoundNode("ping.wav")
		bark: SoundNode("barkmed.wav")
		camera: SoundNode("camera.wav")

		first_router: DirRouter
		second_router: DirRouter
		third_router: DirRouter

		//{power_led, ping} =C=> {play_led, bark} =C=> {advance_led, camera} =C=> {power_led, ping}
		{power_led, ping} =C=> first_router
		{power_led, ping} =B=> DirChanger =C=> {power_led, ping}
		first_router =S<bool>(true)=> {play_led, bark}
		first_router =S<bool>(false)=> {advance_led, camera}

		{play_led, bark} =C=> second_router
		{play_led, bark} =B=> DirChanger =C=> {play_led, bark}
		second_router =S<bool>(true)=> {advance_lead, camera}
		second_router =S<bool>(false)=> {power_led, ping}

		{advance_led, camera} =C=> third_router
		{advance_led, camera} =B=> DirChanger =C=> {advance_led, camera}
		third_router =S<bool>(true)=> {power_led, ping}
		third_router =S<bool>(false)=> {play_led, bark}
	}
}
REGISTER_BEHAVIOR(Parallel);
