#include "DualCoding/DualCoding.h"
using namespace DualCoding;

enum Dist_t {
    pink_close,
    blue_close,
    equal_dist
};

DATAEVENT_IMPLEMENTATION(Dist_t, unsigned int)

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

  void DoStart() {
     camSkS.clear();
     NEW_SKETCH(camFrame, uchar, sketchFromSeg());
     NEW_SKETCH(blue_stuff, bool,visops::colormask(camFrame,"blue"));
     NEW_SKETCH(blue_area, uint, visops::areacc(blue_stuff));
     NEW_SKETCH(pink_stuff, bool,visops::colormask(camFrame,"pink"));
     NEW_SKETCH(pink_area, bool,visops::areacc(pink_stuff));
     int blueSize = blue_area->max();
     int pinkSize = pink_area->max();
     int diff = blueSize - pinkSize;
     if(diff > 10)
         postStateSignal<Dist_t>(blue_close);
     else if (diff < -10)
         postStateSignal<Dist_t>(pink_close);
     else 
         postStateSignal<Dist_t>(equal_dist);
     #statemachine
     startNode:StateNode=S<Dist_t>(blue_close)=>speakBlue
     startNode=S<Dist_t>(pink_close)=>speakPink
     startNode=S<Dist_t>(equal_dist)=>speakEqual
     speakBlue:SoundNode($,"howl.wav")
     speakPink:SoundNode($,"bark.wav")
     speakEqual:SoundNode($,"ping.wav")
     #endstatemachine
};


