#include "Behaviors/StateMachine.h"

$nodeclass Polygons : VisualRoutinesStateNode
{
	$nodeclass FindStuff : MapBuilderNode : doStart
	{
		mapreq.addObjectColor(ellipseDataType, "green");
		mapreq.addObjectColor(ellipseDataType, "blue");
	}

	$nodeclass ReportShapes : VisualRoutinesStateNode : doStart
	{
		vector<Shape<EllipseData> > green_ellipses;
		vector<Point> green_points;
		NEW_SHAPEVEC(ellipses, EllipseData, select_type<EllipseData>(camShS));

		SHAPEVEC_ITERATE(ellipses, EllipseData, ellipse)
		if(ellipse->getArea() >= 2000)
		{
			rgb color = ellipse->getColor();
			if(color.green == 200 && color.red == 64 && color.blue == 64)
			{
				green_ellipses.push_back(ellipse);
				green_points.push_back(ellipse->getCentroid());
			}
		}
		END_ITERATE;

		for(unsigned int count = 0; count < green_ellipses.size(); count++)
			cout << green_ellipses.at(count)->getArea() << endl;
		NEW_SHAPE(polygon, PolygonData, new PolygonData(camShS, green_points, true, true, true));

		SHAPEVEC_ITERATE(ellipses, EllipseData, ellipse)
		if(ellipse->getArea() >= 1000)
		{
			rgb color = ellipse->getColor();
			if(color.blue == 200 && color.red == 64 && color.green == 64)
				cout << polygon->isInside(ellipse->getCentroid()) << endl;
		}
		END_ITERATE;	
	}

	$setupmachine {
		FindStuff =C=> ReportShapes
	}
}

REGISTER_BEHAVIOR(Polygons);
