initVariables();
sMess = "DOBLE EL CODO"
lFlex = true;
//////////////////////////////////
function funcionGo(ctx, width, height) {
  if (lInit) {
    jsreinitProcedure();
    jsinitTimer(8);
    txClocalUp = "FLEXO/EXTENSIÓN DE CODO";
    txClocalDown = "sepárese de la cámara, la cara debe activarse";
    lFlex = true;
  }
  //displaymodulo(0);
  textSize(32);
  if (lFlex) {
    fill(255, 255, 0);
    stroke(255, 255, 0)
  }
  else {
    fill(255, 0, 0);
    stroke(255, 0, 0)
  }
  noStroke();
  text(sMess, wsIni + wVideo / 2, windowHeight - 80);
  displayPose();
  if (lDelayLocal) {
    lFlex = !lFlex;
    if (lFlex)
      sMess = "DOBLE EL CODO";
    else sMess = "ESTIRE EL CODO";
  }
  noStroke();
}

function displayPose() {
  let angle = 0;
  textSize(20)

  strokeWeight(20)
  stroke(200, 200, 200, 128)
  fill(255, 255, 255, 128);

  //cabeza
  beginShape();
  curveVertex((x11 + x12) / 2, (y11 + y12) / 2)
  curveVertex(x9, y9);
  curveVertex(x0, y0);
  curveVertex(x1, y1);
  curveVertex(x2, y2);
  curveVertex(x3, y3);
  curveVertex(x7, y7);
  curveVertex(x0, y0);
  curveVertex(x9, y9);
  curveVertex((x11 + x12) / 2, (y11 + y12) / 2)
  endShape();

  beginShape();
  curveVertex((x11 + x12) / 2, (y11 + y12) / 2)
  curveVertex(x10, y10);
  curveVertex(x0, y0);
  curveVertex(x4, y4);
  curveVertex(x5, y5);
  curveVertex(x6, y6);
  curveVertex(x8, y8);
  curveVertex(x0, y0);
  curveVertex(x10, y10);
  curveVertex((x11 + x12) / 2, (y11 + y12) / 2)
  endShape();

  //eess
  if (!modoReflejo) {
    beginShape();
    curveVertex(x0, y0);
    curveVertex((x11 + x12) / 2, (y11 + y12) / 2)
    curveVertex((x11 + (x11 + x12) / 2) / 2, (y11 + (y11 + y12) / 2) / 2)
    curveVertex(x11, y11);
    curveVertex(x13, y13);
    curveVertex(x15, y15);
    curveVertex(x17, y17);
    curveVertex(x19, y19);
    curveVertex(x21, y21);
    curveVertex(x15, y15);
    curveVertex(x13, y13);
    curveVertex((x11 + (x11 + x12) / 2) / 2, (y11 + (y11 + y12) / 2) / 2)
    curveVertex(x12, y12);
    endShape();

    beginShape();
    curveVertex(x0, y0);
    curveVertex((x11 + x12) / 2, (y11 + y12) / 2)
    curveVertex((x12 + (x11 + x12) / 2) / 2, (y12 + (y11 + y12) / 2) / 2)
    curveVertex(x12, y12);
    curveVertex(x14, y14);
    curveVertex(x16, y16);
    curveVertex(x18, y18);
    curveVertex(x20, y20);
    curveVertex(x22, y22);
    curveVertex(x16, y16);
    curveVertex(x14, y14);
    curveVertex((x12 + (x11 + x12) / 2) / 2, (y12 + (y11 + y12) / 2) / 2)
    curveVertex((x11 + x12) / 2, (y11 + y12) / 2)
    endShape();
  }
  else {
    if (!modoDiestro) {
      beginShape();
      curveVertex(x0, y0);
      curveVertex((x11 + x12) / 2, (y11 + y12) / 2)
      curveVertex((x11 + (x11 + x12) / 2) / 2, (y11 + (y11 + y12) / 2) / 2)
      curveVertex(x11, y11);
      curveVertex(x13, y13);
      curveVertex(x15, y15);
      curveVertex(x17, y17);
      curveVertex(x19, y19);
      curveVertex(x21, y21);
      curveVertex(x15, y15);
      curveVertex(x13, y13);
      curveVertex((x11 + (x11 + x12) / 2) / 2, (y11 + (y11 + y12) / 2) / 2)
      curveVertex(x12, y12);
      endShape();

      beginShape();
      curveVertex(width - x0, y0);
      curveVertex(width - (x11 + x12) / 2, (y11 + y12) / 2)
      curveVertex(width - (x11 + (x11 + x12) / 2) / 2, (y11 + (y11 + y12) / 2) / 2)
      curveVertex(width - x11, y11);
      curveVertex(width - x13, y13);
      curveVertex(width - x15, y15);
      curveVertex(width - x17, y17);
      curveVertex(width - x19, y19);
      curveVertex(width - x21, y21);
      curveVertex(width - x15, y15);
      curveVertex(width - x13, y13);
      curveVertex(width - (x11 + (x11 + x12) / 2) / 2, (y11 + (y11 + y12) / 2) / 2)
      curveVertex(width - x12, y12);
      endShape();

    }
    else {
      beginShape();
      curveVertex(x0, y0);
      curveVertex((x11 + x12) / 2, (y11 + y12) / 2)
      curveVertex((x12 + (x11 + x12) / 2) / 2, (y12 + (y11 + y12) / 2) / 2)
      curveVertex(x12, y12);
      curveVertex(x14, y14);
      curveVertex(x16, y16);
      curveVertex(x18, y18);
      curveVertex(x20, y20);
      curveVertex(x22, y22);
      curveVertex(x16, y16);
      curveVertex(x14, y14);
      curveVertex((x12 + (x11 + x12) / 2) / 2, (y12 + (y11 + y12) / 2) / 2)
      curveVertex((x11 + x12) / 2, (y11 + y12) / 2)
      endShape();

      beginShape();
      curveVertex(width - x0, y0);
      curveVertex(width - (x11 + x12) / 2, (y11 + y12) / 2)
      curveVertex(width - (x12 + (x11 + x12) / 2) / 2, (y12 + (y11 + y12) / 2) / 2)
      curveVertex(width - x12, y12);
      curveVertex(width - x14, y14);
      curveVertex(width - x16, y16);
      curveVertex(width - x18, y18);
      curveVertex(width - x20, y20);
      curveVertex(width - x22, y22);
      curveVertex(width - x16, y16);
      curveVertex(width - x14, y14);
      curveVertex(width - (x12 + (x11 + x12) / 2) / 2, (y12 + (y11 + y12) / 2) / 2)
      curveVertex(width - (x11 + x12) / 2, (y11 + y12) / 2)
      endShape();
    }
  }

  noStroke();
  fill(0);
  let rshoulder = [x12, y12]
  let relbow = [x14, y14]
  let rwrist = [x16, y16]
  angle = calculate_angle(rshoulder, relbow, rwrist)
  text(parseInt(angle), x14, y14)

  let lshoulder = [x11, y11]
  let lelbow = [x13, y13]
  let lwrist = [x15, y15]
  angle = calculate_angle(lshoulder, lelbow, lwrist)
  text(parseInt(angle), x13, y13)

  let rhip = [x24, y24]
  angle = calculate_angle(rhip, rshoulder, relbow)
  //text(parseInt(angle), x12, y12)

  let lhip = [x23, y23]
  angle = calculate_angle(lhip, lshoulder, lelbow)
  //text(parseInt(angle), x11, y11)

  let rknee = [x26, y26]
  let rankle = [x28, y28]
  angle = calculate_angle(rhip, rknee, rankle)
  //text(parseInt(angle), x26, y26)

  let lknee = [x25, y25]
  let lankle = [x27, y27]
  angle = calculate_angle(lhip, lknee, lankle)
  //text(parseInt(angle), x25, y25)

  angle = calculate_angle(lshoulder, lhip, lknee)
  //text(parseInt(angle), x23, y23)

  angle = calculate_angle(rshoulder, rhip, rknee)
  //text(parseInt(angle), x24, y24)

  let lfoot = [x31, y31]
  angle = calculate_angle(lknee, lankle, lfoot)
  //text(parseInt(angle), x27, y27)

  let rfoot = [x32, y32]
  angle = calculate_angle(rknee, rankle, rfoot)
  //text(parseInt(angle), x28, y28)

  let loreja = [x7, y7]
  let cervical = [(x11 + x12) / 2, (y11 + y12) / 2]
  angle = calculate_angle(loreja, cervical, lshoulder)
  //text(parseInt(angle), x7, y7)

  let roreja = [x8, y8]
  angle = calculate_angle(roreja, cervical, rshoulder)
  //text(parseInt(angle), x8, y8)

  let nariz = [x0, y0]
  angle = calculate_angle(nariz, cervical, lshoulder)
  //text(parseInt(angle), x9, y9)

  angle = calculate_angle(nariz, cervical, rshoulder)
  //text(parseInt(angle), x10, y10)

  let entrecejo = [(x4 + x1) / 2, (y4 + y1) / 2]
  angle = calculate_angle(entrecejo, nariz, cervical)
  //text(parseInt(angle), (x11 + x12) / 2, (y11 + y12) / 2)

  strokeWeight(8)
  if (lFlex) {
    fill(255, 255, 0, 128);
    stroke(255, 255, 0, 128)
  }
  else {
    fill(255, 0, 0, 128);
    stroke(255, 0, 0, 128)
  }

  textSize(48);
  noStroke();
  switch (true) {
    case (nSwitch >= 0 && nSwitch <= 1):
      if (lFlex) {
        sMess = "DOBLE EL CODO";
        txClocalUp = "FLEXO/EXTENSIÓN DE CODO";
        //txClocalDown = "brazo por delante";
      }
      else {
        sMess = "ESTIRE EL CODO";
        txClocalUp = "FLEXO/EXTENSIÓN DE CODO";
        //txClocalDown = "brazo por delante";
      }
      beginShape();
      curveVertex(x0, y0);
      curveVertex((x11 + x12) / 2, (y11 + y12) / 2)
      curveVertex((x12 + (x11 + x12) / 2) / 2, (y12 + (y11 + y12) / 2) / 2)
      curveVertex(x12, y12);
      curveVertex(x14, y14);
      curveVertex(x16, y16);
      curveVertex(x18, y18);
      curveVertex(x20, y20);
      curveVertex(x22, y22);
      curveVertex(x16, y16);
      curveVertex(x14, y14);
      curveVertex((x12 + (x11 + x12) / 2) / 2, (y12 + (y11 + y12) / 2) / 2)
      curveVertex((x11 + x12) / 2, (y11 + y12) / 2)
      endShape();
      noStroke();
      fill(255);
      angle = calculate_angle(rshoulder, relbow, rwrist)
      text(parseInt(angle), width / 2, 125)
      break;
    case (nSwitch >= 2 && nSwitch <= 3):
      if (lFlex) {
        sMess = "DOBLE EL CODO";
        txClocalUp = "FLEXO/EXTENSIÓN DE CODO";
        //txClocalDown = "brazo por delante";
      }
      else {
        sMess = "ESTIRE EL CODO";
        txClocalUp = "FLEXO/EXTENSIÓN DE CODO";
        //txClocalDown = "brazo por delante";
      }
      beginShape();
      curveVertex(x0, y0);
      curveVertex((x11 + x12) / 2, (y11 + y12) / 2)
      curveVertex((x11 + (x11 + x12) / 2) / 2, (y11 + (y11 + y12) / 2) / 2)
      curveVertex(x11, y11);
      curveVertex(x13, y13);
      curveVertex(x15, y15);
      curveVertex(x17, y17);
      curveVertex(x19, y19);
      curveVertex(x21, y21);
      curveVertex(x15, y15);
      curveVertex(x13, y13);
      curveVertex((x11 + (x11 + x12) / 2) / 2, (y11 + (y11 + y12) / 2) / 2)
      curveVertex((x11 + x12) / 2, (y11 + y12) / 2)
      endShape();
      noStroke();
      fill(255);
      angle = calculate_angle(lshoulder, lelbow, lwrist)
      text(parseInt(angle), width / 2, 125)
      break;
    case (nSwitch >= 4 && nSwitch <= 5):
      if (lFlex) {
        sMess = "DOBLE EL CODO";
        txClocalUp = "FLEXO/EXTENSIÓN DE CODO";
        //txClocalDown = "brazo por delante";
      }
      else {
        sMess = "ESTIRE EL CODO";
        txClocalUp = "FLEXO/EXTENSIÓN DE CODO";
        //txClocalDown = "brazo por delante";
      }
      beginShape();
      curveVertex(x0, y0);
      curveVertex((x11 + x12) / 2, (y11 + y12) / 2)
      curveVertex((x12 + (x11 + x12) / 2) / 2, (y12 + (y11 + y12) / 2) / 2)
      curveVertex(x12, y12);
      curveVertex(x14, y14);
      curveVertex(x16, y16);
      curveVertex(x18, y18);
      curveVertex(x20, y20);
      curveVertex(x22, y22);
      curveVertex(x16, y16);
      curveVertex(x14, y14);
      curveVertex((x12 + (x11 + x12) / 2) / 2, (y12 + (y11 + y12) / 2) / 2)
      curveVertex((x11 + x12) / 2, (y11 + y12) / 2)
      endShape();
      noStroke();
      fill(255);
      angle = calculate_angle(rshoulder, relbow, rwrist)
      text(parseInt(angle), width / 2, 125)
      break;

    case (nSwitch >= 6 && nSwitch <= 7):
      if (lFlex) {
        sMess = "DOBLE EL CODO";
        txClocalUp = "FLEXO/EXTENSIÓN DE CODO";
        //txClocalDown = "brazo por delante";
      }
      else {
        sMess = "ESTIRE EL CODO";
        txClocalUp = "FLEXO/EXTENSIÓN DE CODO";
        //txClocalDown = "brazo por delante";
      }
      beginShape();
      curveVertex(x0, y0);
      curveVertex((x11 + x12) / 2, (y11 + y12) / 2)
      curveVertex((x11 + (x11 + x12) / 2) / 2, (y11 + (y11 + y12) / 2) / 2)
      curveVertex(x11, y11);
      curveVertex(x13, y13);
      curveVertex(x15, y15);
      curveVertex(x17, y17);
      curveVertex(x19, y19);
      curveVertex(x21, y21);
      curveVertex(x15, y15);
      curveVertex(x13, y13);
      curveVertex((x11 + (x11 + x12) / 2) / 2, (y11 + (y11 + y12) / 2) / 2)
      curveVertex((x11 + x12) / 2, (y11 + y12) / 2)
      endShape();
      noStroke();
      fill(255);
      angle = calculate_angle(lshoulder, lelbow, lwrist)
      text(parseInt(angle), width / 2, 125)
      break;
  }
}