#include "Behaviors/StateMachine.h"

$nodeclass HW3_Judge_Dist : VisualRoutinesStateNode {
  $nodeclass JudgeDist : StateNode : doStart {
    camSkS.clear();
    NEW_SKETCH(camFrame, uchar, sketchFromSeg());

    NEW_SKETCH(blue_stuff, bool, visops::colormask(camFrame,"blue"));
    NEW_SKETCH(pink_stuff, bool, visops::colormask(camFrame,"pink"));

    NEW_SKETCH(blue_filled, bool, visops::fillin(blue_stuff,2,3,8));
    NEW_SKETCH(pink_filled, bool, visops::fillin(pink_stuff,2,3,8));

    NEW_SKETCH(blue_areas, uint, visops::areacc(blue_filled));
    NEW_SKETCH(pink_areas, uint, visops::areacc(pink_filled));

    int blue_size = blue_areas->max();
    int pink_size = pink_areas->max();
    cout << "BLUE: " << blue_size << ", PINK: " << pink_size << endl;

    if (blue_size > pink_size+100) {
      postStateSignal<int>(1);
    } else if (pink_size > blue_size+100) {
      postStateSignal<int>(2);
    } else {
      postStateSignal<int>(0);
    }
  }

  $setupmachine {
    judgedist: JudgeDist

    blue: SoundNode($, "growl.wav")
    pink: SoundNode($, "howl.wav")
    even: SoundNode($, "ping.wav")

    judgedist =S<int>(0)=> even
    judgedist =S<int>(1)=> blue
    judgedist =S<int>(2)=> pink

    {blue, pink, even} =C(1)=> judgedist
  }
}

REGISTER_BEHAVIOR(HW3_Judge_Dist);
