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

#include "DualCoding/DualCoding.h"
#include "Events/EventBase.h" 
#include "Sound/SoundManager.h"

using namespace DualCoding;

class LocalMapDemo : public VisualRoutinesBehavior {
public:
  LocalMapDemo(): VisualRoutinesBehavior("LocalMapDemo") {}
  
  virtual void DoStart() {
    VisualRoutinesBehavior::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");

    NEW_SHAPE(gazePt, PointData, new PointData(camShS,Point(400,0,-100)));

    MapBuilderRequest req(MapBuilderRequest::localMap);
    req.searchArea = gazePt;
    req.maxDist = 1500;
    req.numSamples = 5;
    req.pursueShapes = true;

    req.objectColors[lineDataType].insert(pink_index);
    req.occluderColors[lineDataType].insert(orange_index);
    req.occluderColors[lineDataType].insert(yellow_index);
    req.occluderColors[lineDataType].insert(green_index);

    req.objectColors[ellipseDataType].insert(orange_index);
    req.objectColors[ellipseDataType].insert(yellow_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 &event) {
    cout << "MapBuilder returned " << event.getDescription() << endl;
    sndman->playFile("barklow.wav");
    cout << "Found " << localShS.allShapes().size() << " shapes." << endl;
  }

  virtual std::string getName() const {return "LocalMapDemo"; }
  
};

#endif

