#include "Behaviors/StateMachine.h"

$nodeclass Ellipses {
    $nodeclass FindEllipses : MapBuilderNode(MapBuilderRequest::worldMap) : doStart {
        mapreq.addObjectColor(ellipseDataType, "red");
        mapreq.addObjectColor(ellipseDataType, "green");
        mapreq.addObjectColor(ellipseDataType, "blue");
    }

    $nodeclass EnlargeEllipses : doStart {
        NEW_SHAPEVEC(ellipse_shapes, EllipseData, select_type<EllipseData>(worldShS));

        if(ellipse_shapes.empty()) {
            postStateCompletion();
        }

        for(std::vector<Shape<EllipseData> >::iterator it = ellipse_shapes.begin();
                it != ellipse_shapes.end(); ++it) {
            NEW_SHAPE(larger_ellipse, EllipseData,
                new EllipseData(worldShS, (*it)->getCentroid(), (*it)->getSemimajor()*1.5, (*it)->getSemiminor()*1.5, (*it)->getOrientation()));
            larger_ellipse->setColor((*it)->getColor());
            worldShS.importShape(larger_ellipse);
        }
    }

    $nodeclass ReportEllipses : doStart {
        NEW_SHAPEVEC(ellipse_shapes, EllipseData, select_type<EllipseData>(worldShS));

        cout << "Found " << ellipse_shapes.size() << " ellipse";
        if(ellipse_shapes.size() != 1) {
            cout << "s";
        }
        cout << endl;
    }

    $setupmachine {
        FindEllipses =C=> ReportEllipses =N=> EnlargeEllipses
    }
}

REGISTER_BEHAVIOR(Ellipses);
