//-*-c++-*-
#ifndef INCLUDED_CameraMapDemo_h_
#define INCLUDED_CameraMapDemo_h_

#include "Behaviors/StateMachine.h"
#include "DualCoding/DualCoding.h"
#include "Sound/SoundManager.h"

using namespace DualCoding;

class BuildCamMap : public VisualRoutinesStateNode {
public:
  BuildCamMap() : VisualRoutinesStateNode("BuildCamMap") {}
  
  virtual void DoStart() {
    
    //**************** Set up map builder request ****************
    const int pink_index = ProjectInterface::getColorIndex("pink");
    const int orange_index = ProjectInterface::getColorIndex("orange");
    const int green_index = ProjectInterface::getColorIndex("green");
    const int yellow_index = ProjectInterface::getColorIndex("yellow");
    const int blue_index = ProjectInterface::getColorIndex("blue");

    MapBuilderRequest req(MapBuilderRequest::localMap);
    req.maxDist = 1500;
    req.pursueShapes = false;

    req.objectColors[ellipseDataType].insert(orange_index);
    req.objectColors[ellipseDataType].insert(blue_index);
    req.objectColors[ellipseDataType].insert(pink_index);
    req.objectColors[ellipseDataType].insert(green_index);

    mapBuilder.executeRequest(req);
    // extract blue blobs
    NEW_SKETCH(b_stuff, bool, visops::colormask(camFrame,"blue"));
    NEW_SKETCH(b_blobs, bool, visops::minArea(b_stuff,10));
    //extract pink blobs
    NEW_SKETCH(p_stuff, bool, visops::colormask(camFrame,"pink"));
    NEW_SKETCH(p_blobs, bool, visops::minArea(p_stuff,10));
    //convex hull of blue blobs
    NEW_SHAPEVEC(convexHull, PolygonData, PolygonData::ConvexHull(b_blobs));
    //create sketch space
    NEW_SKETCH(convexHullSketch, bool, convexHull);

  }

  virtual void processEvent(const EventBase &) {
		postStateCompletion();
	}

};

class CameraMapDemo : public VisualRoutinesStateNode {
public:
  CameraMapDemo(): VisualRoutinesStateNode("CameraMapDemo") {}
  
	virtual void setup() {
	  startnode = new BuildCamMap();
	  addNode(startnode);

	}
};

#endif
