#include "Behaviors/StateMachine.h"

$nodeclass Lab4Part2 : VisualRoutinesStateNode {
    $nodeclass FindShapes : MapBuilderNode : doStart {
        mapreq.addAllObjectColors(ellipseDataType);
	mapreq.addAllObjectColors(lineDataType);
    }
    $nodeclass ReportShapes : VisualRoutinesStateNode : doStart {
        NEW_SHAPEVEC(ellipse_shapes, EllipseData, select_type<EllipseData>(camShS));
	NEW_SHAPEVEC(line_shapes, LineData, select_type<LineData>(camShS));
	if (line_shapes.size() == 0) {
	    cout << "No line found!" << endl;
	}
	else {
	    Shape<LineData> l = line_shapes[0];
	    l->setInfinite();
	    int i = 0;
	    SHAPEVEC_ITERATE(ellipse_shapes, EllipseData, myellipse) {
	        if (l->pointIsLeftOf(myellipse->getCentroid())) {
		    i++;
		}
	    }
	    END_ITERATE;
	    cout << "There are " << i << " ellipses left of the line." << endl;
	}
    }
    $setupmachine {
        FindShapes =C=> ReportShapes
    }
}
REGISTER_BEHAVIOR(Lab4Part2);