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

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

using namespace DualCoding;

class BuildMap : public VisualRoutinesStateNode {
public:
  BuildMap() : VisualRoutinesStateNode("BuildMap") {}
  
  virtual void DoStart() {
    
    //**************** Set up map builder request ****************
    const int green_index = ProjectInterface::getColorIndex("green");
    const int blue_index = ProjectInterface::getColorIndex("blue");

    // make head gaze roughly straight ahead
    NEW_SHAPE(gazePt, PointData, new PointData(localShS,Point(5000,0,0,egocentric)));

    MapBuilderRequest req(MapBuilderRequest::localMap);
    req.searchArea = gazePt;
    req.maxDist = 8000;
    //req.pursueShapes = true;
	req.numSamples = 5;
	req.motionSettleTime = 2000;

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

    unsigned int mapreq_id = mapBuilder.executeRequest(req);
    erouter->addListener(this, EventBase::mapbuilderEGID, mapreq_id, EventBase::statusETID);
  }

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

};

class ExamineMap : public VisualRoutinesStateNode {
public:
	ExamineMap() : VisualRoutinesStateNode("ExamineMap") {}

	virtual void DoStart() {
    sndman->playFile("barklow.wav");
    cout << "MapBuilder found " << localShS.allShapes().size() << " shapes." << endl;
  }
};

class StereoMapDemo : public VisualRoutinesStateNode {
public:
  StereoMapDemo(): VisualRoutinesStateNode("StereoMapDemo") {}
  
	virtual void setup() {
        #statemachine
	    startnode: BuildMap() =C=> ExamineMap()
        #endstatemachine
	}
};

#endif

