//-*-c++-*-

#include <sstream>
#include "Behaviors/StateMachine.h"

enum Ball_t {
	fastball,
	curveball,
	spitball,
	slider
};

DATAEVENT_IMPLEMENTATION(Ball_t, unsigned int)

class Pitcher : public StateNode {
public:
	Pitcher() : StateNode("Pitcher") {}

	virtual void DoStart() {
		postStateSignal<Ball_t>(curveball);
	}

};

class Catcher : public StateNode {
public:

	Catcher() : StateNode("Catcher") {}

	virtual void triggeredBy(const EventBase& event) {
		const DataEvent<Ball_t> &dev = dynamic_cast<const DataEvent<Ball_t>&>(event);
		std::cout << "Ball caught!  " << dev.getDescription(1)  << std::endl;
	}

};

class SignalTest : public StateNode {
public:

	SignalTest() : StateNode("SignalTest") {}

	virtual void setup() {
#statemachine
	startnode: StateNode =N=> Pitcher() =S<Ball_t>=> Catcher()
#endstatemachine
			}

};
