node nodes[] = new node[1000];
int nodeCount;
int sz = 200;
node nodeSelected = null;

void setup() {
  size(200,200); //hardcoded sz
  for(int i = 0; i < 12; i++){
    nodes[nodeCount++] = new node(random(sz),random(sz));
  }
}

void nodesbezier(node n0, node n1,node n2, node n3){
    bezier(n0.x,n0.y,
    n1.x,n1.y,
    n2.x,n2.y,
    n3.x,n3.y);
  

}

void loop() {
  background(128);
  
  stroke(255,128,128);
  for(int i = 0; i < 12;i+=2 ){
    line(nodes[i].x,nodes[i].y,nodes[i+1].x,nodes[i+1].y);
  
  }
  stroke(0);
  for(int i = 0; i < 9;i+=4 ){
    nodesbezier(nodes[i],nodes[i+1],nodes[i+2],nodes[i+3]);
  
  }
  
  
  
  node embiggen = null;
  for(int i = 0; i < nodeCount; i++){
    node n = nodes[i];
      n.show();
    if(! n.isNear(mouseX,mouseY)){

    } else {
      embiggen = n;
    }
  }
  if(embiggen != null){
    if(nodeSelected != null) { embiggen = nodeSelected; }
      embiggen.showbox();
  }
}

void mouseDragged(){
  if(nodeSelected != null){
    nodeSelected.reset(mouseX,mouseY);
  }
}

void mousePressed(){
  for(int i = 0; i < nodeCount; i++){
    node n = nodes[i];
    if(n.isNear(mouseX,mouseY)){
      nodeSelected = n;
    }
  }

}
void mouseReleased(){
  nodeSelected = null;
}

class node {

  float x, y;

  void reset(float inx, float iny){
    x = inx;
    y = iny;
  }

  node(float inx, float iny){
    reset(inx,iny);
  }

  void show(){
    ellipse(x-2,y-2,4,4);
  }

  void showbox(){
    rect(x-3,y-3,6,6);
  }
  boolean isNear(float inx, float iny){
    if(abs(x-inx) < 4 && abs(y-iny) < 4) return true;
    else return false;
  }

}

class guide {
  node s = new node(0,0);
  node f = new node(0,0);

}