// part 1 mapbuilder egg finder

#include "Behaviors/StateMachine.h"
#include "DualCoding/ShapeTypes.h"
#include "DualCoding/VisualRoutinesStateNode.h"

$nodeclass PartOne : VisualRoutinesStateNode {
  
  // finds ellipses
  $nodeclass Find : MapBuilderNode : doStart {

    mapreq.addObjectColor(ellipseDataType, "red");
    mapreq.addObjectColor(ellipseDataType, "green");
    mapreq.addObjectColor(ellipseDataType, "blue");

  }

  // counts ellipses
  $nodeclass Count : VisualRoutinesStateNode : doStart{
    NEW_SHAPEVEC(ellipses,EllipseData,select_type<EllipseData>(camShS))
    cout << "Ellipses found: " << ellipses.size() << endl;
  }

  $nodeclass Replicate : VisualRoutinesStateNode: doStart{
    NEW_SHAPEVEC(ellipses,EllipseData,select_type<EllipseData>(camShS))
    SHAPEVEC_ITERATE(ellipses,EllipseData,myEllipse)
      NEW_SHAPE(elp1, EllipseData, new EllipseData(camShS,myEllipse->getCentroid(),
						   1.5 * myEllipse->getSemimajor(),
						   1.5 * myEllipse->getSemiminor(),
						   myEllipse->getOrientation()));
      elp1->setColor(myEllipse->getColor());
    END_ITERATE
  }

  // general behavior
  $setupmachine {
    Find =C=> Replicate
  }
}

REGISTER_BEHAVIOR(PartOne);