Your browser does not support the canvas tag.

previous        Show / Hide Source        Download        next
//marionet // doll

//joint locations
float headX;
float headY;
float bodyX;
float bodyY;
float waistX;
float waistY;
float lShoulderX;
float lShoulderY;
float lElbowX;
float lElbowY;
float lHandX;
float lHandY;
float rShoulderX;
float rShoulderY;
float rElbowX;
float rElbowY;
float rHandX;
float rHandY;
float lHipX;
float lHipY;
float rHipX;
float rHipY;
float lKneeX;
float lKneeY;
float rKneeX;
float rKneeY;
float lFootX;
float lFootY;
float rFootX;
float rFootY;


//joint location determining variables
//rotation
//speed
//left and right limits

//waist
float waistRot = 0;
float waistSp = 0;
float waistLimL = -0.2;
float waistLimR = 0.2;
//left arm
//float lShoulderRot = waistRot - 0.5;
float lElbowRot = 0;
float lElbowSp = 0;
float lElbowLimL = -0.8;
float lElbowLimR = -0.3;
float lHandRot = 0;
float lHandSp = 0;
float lHandLimL = -0.5;
float lHandLimR = 0.5;
//right arm
//float rShoulderRot = waistRot + 0.5;
float rElbowRot = 0;
float rElbowSp = 0;
float rElbowLimL = 0.3;
float rElbowLimR = 0.8;
float rHandRot = 0;
float rHandSp = 0;
float rHandLimL = -0.5;
float rHandLimR = 0.5;
//left leg
float lHipRot = 0;
float lKneeRot = 0;
float lKneeSp = 0;
float lKneeLimL = -0.63;
float lKneeLimR = -0.1;
float lFootRot = 0;
float lFootSp = 0;
float lFootLimL = -0.5;
float lFootLimR = 0.3;
//right lig
float rHipRot = 0;
float rKneeRot = 0;
float rKneeSp = 0;
float rKneeLimL = 0.1;
float rKneeLimR = 0.63;
float rFootRot = 0;
float rFootSp = 0;
float rFootLimL = -0.3;
float rFootLimR = 0.5;


void setup() {
  size(400, 400);
}

void draw() {
  background(101, 131, 155);
  drawStageBack();
  doScaryMessyPhysics();
  calculateXAndYLocations();
  drawDoll();
  drawStageFront();


  println(mouseX, mouseY);
}

void drawDoll() {


  //Strings
  //lElbow string
  stroke(245);
  strokeWeight(1);
  line(lElbowX,lElbowY,mouseX*0.45+110-40,30);
  //lKnee string
  stroke(245);
  strokeWeight(1);
  line(lKneeX,lKneeY,mouseX*0.45+110-20,30);
  //rElbow string
  stroke(245);
  strokeWeight(1);
  line(rElbowX,rElbowY,mouseX*0.45+110+40,30);
  //rKnee string
  stroke(245);
  strokeWeight(1);
  line(rKneeX,rKneeY,mouseX*0.45+110+20,30);
  //Head string
  stroke(245);
  strokeWeight(1);
  line(mouseX*0.45+110,132,mouseX*0.45+110,30);
  

  //body
  stroke(57);
  strokeWeight(8);
  line(mouseX*0.45+110, 140+15, mouseX*0.45+110+ waistX, 140+15+ waistY);
  //shoulders
  stroke(57);
  strokeWeight(5);
  line(lShoulderX, lShoulderY, rShoulderX, rShoulderY);

  //lElbow
  stroke(57);
  strokeWeight(5);
  line(lShoulderX, lShoulderY, lElbowX, lElbowY);
  //rElbow
  stroke(57);
  strokeWeight(5);
  line(rShoulderX, rShoulderY, rElbowX, rElbowY);

  //lHand
  stroke(57);
  strokeWeight(5);
  line(lElbowX, lElbowY, lHandX, lHandY);
  //rHand
  stroke(57);
  strokeWeight(5);
  line(rElbowX, rElbowY, rHandX, rHandY);


  //lKnee
  stroke(57);
  strokeWeight(5);
  line(lHipX, lHipY, lKneeX, lKneeY);
  //rKnee
  stroke(57);
  strokeWeight(5);
  line(rHipX, rHipY, rKneeX, rKneeY);

  //lFoot
  stroke(57);
  strokeWeight(5);
  line(lKneeX, lKneeY, lFootX, lFootY);
  //rFoot
  stroke(57);
  strokeWeight(5);
  line(rKneeX, rKneeY, rFootX, rFootY);
  
  //joints
  ellipseMode(CENTER);
  noStroke();
  strokeWeight(0);
  fill(230);
  //lKnee
  //ellipse(lKneeX,lKneeY,1,1);
  //rKnee
  //ellipse(rKneeX,rKneeY,1,1);
  //lElbow
  //ellipse(lElbowX,lElbowY,1,1);
  //rElbow
  //ellipse(rElbowX,rElbowY,1,1);

  //neck
  stroke(111);
  strokeWeight(4);
  line(mouseX*0.45+110, 140+9, mouseX*0.45+110, 140+15);

  //head
  ellipseMode(CENTER);
  noStroke();
  strokeWeight(0);
  fill(170);
  ellipse(mouseX*0.45+110, 142, 16, 20);
  
  //nose
  fill(130);
  //triangle(mouseX*0.45+110-2, 142+2,mouseX*0.45+110+2, 142+2,mouseX*0.45+110, 142-2);
}

//scrapped gravity function
/*void gravity(float r, float s) {
 if (r>-0.003 && r<0.003 && s<0.001 && s>-0.001) {
 rotation = 0;
 speed = 0;
 } else if ((r + s >= 0 && r <= 0) || (r + s <= 0 && r >= 0)) {
 speed = speed *0.75;
 } else if (r >0) {
 speed = speed - 0.003;
 } else if (r <0) {
 speed = speed + 0.003;
 }
 }*/

//scrapped limit function
/*
void checkLimit(float r, float s, float ll, float rl) {
 if (r+s > rl) {
 speed = 0;
 rotation = rl;
 } else if (r+s < ll) {
 speed = 0;
 rotation = ll;
 }
 }
 */



void drawStageBack() {

  //stage backdrop
  stroke(100, 62, 83);
  strokeWeight(0);
  fill(100, 62, 83);
  quad(63, 60, 400-63, 60, 400-63, 290, 63, 290);


  //Stage Top
  //outer
  stroke(211, 189, 100);
  strokeWeight(0);
  fill(211, 189, 100);
  quad(38, 308, 400-38, 308, 400-55, 289, 55, 289);
  //inner
  stroke(211, 189, 100);
  strokeWeight(0);
  fill(211, 189, 100);
  quad(63, 255, 63, 290, 400-63, 290, 400-63, 255);

  //stage front
  //base
  stroke(211, 189, 100);
  strokeWeight(0);
  fill(211, 189, 100);
  quad(38, 308, 400-38, 308, 400-38, 400, 38, 400);
  //front
  stroke(191, 154, 62);
  strokeWeight(0);
  fill(191, 154, 62);
  quad(68, 330, 68, 400, 400-68, 400, 400-68, 330);
  //L side
  stroke(243, 208, 140);
  strokeWeight(0);
  fill(243, 208, 140);
  quad(68, 330, 68, 400, 38, 400, 38, 308);
  //R side
  stroke(147, 113, 27);
  strokeWeight(0);
  fill(147, 113, 27);
  quad(400-68, 330, 400-68, 400, 400-38, 400, 400-38, 308);
}
void drawStageFront() {




  //curtains//stage backdrop // light colour 227,34,63 // dark colour 173,7,79
  stroke(227, 34, 63);
  strokeWeight(0);
  fill(227, 34, 63);
  quad(60, 60, 100, 60, 100, 291, 60, 291);
  quad(400-60, 60, 400-100, 60, 400-100, 291, 400-60, 291);


  //pillar 

  //pillars
  for (int n = 0; n < 25; n ++) {
    stroke(191, 154, 62);
    strokeWeight(8);
    line(60, 90+8*n, 65, 84+8*n);
  }

  for (int n = 0; n < 25; n ++) {
    stroke(191, 154, 62);
    strokeWeight(8);
    line(400-65, 90+8*n, 400-60, 84+8*n);
  }

  //base
  //left top
  rectMode(CENTER);
  stroke(191, 154, 62);
  strokeWeight(0);
  fill(191, 154, 62);
  rect(63+55*0, 80, 15, 27);
  //right top
  rectMode(CENTER);
  stroke(191, 154, 62);
  strokeWeight(0);
  fill(191, 154, 62);
  rect(63+55*5, 80, 15, 27);
  //left bottom
  rectMode(CENTER);
  stroke(191, 154, 62);
  strokeWeight(0);
  fill(191, 154, 62);
  rect(63+55*0, 400-110, 15, 13);
  //right bottom
  rectMode(CENTER);
  stroke(191, 154, 62);
  strokeWeight(0);
  fill(191, 154, 62);
  rect(63+55*5, 400-110, 15, 13);


  //left bottom
  ellipseMode(CENTER);
  stroke(191, 154, 62);
  strokeWeight(0);
  fill(191, 154, 62);
  ellipse(63+55*0, 297, 15, 13);
  //right bottom
  ellipseMode(CENTER);
  stroke(191, 154, 62);
  strokeWeight(0);
  fill(191, 154, 62);
  ellipse(63+55*5, 297, 15, 13);

  //pillar rounds Top R
  stroke(211, 189, 100);
  strokeWeight(7);
  line(55, 90, 70, 90);
  //pillar rounds Top L
  stroke(211, 189, 100);
  strokeWeight(7);
  line(400-55, 90, 400-70, 90);
  //pillar rounds Bottom R
  stroke(211, 189, 100);
  strokeWeight(7);
  line(55, 400-120, 70, 400-120);
  //pillar rounds Bottom L
  stroke(211, 189, 100);
  strokeWeight(7);
  line(400-55, 400-120, 400-70, 400-120);

  //circle decor

  //base
  for (int n= 0; n <6; n++) {

    ellipseMode(CENTER);
    stroke(211, 189, 100);
    strokeWeight(8);
    fill(100, 182, 211);
    ellipse(63+55*n, 60, 47, 27);
  }
  //blue
  for (int n= 0; n <6; n++) {

    ellipseMode(CENTER);
    stroke(211, 189, 100);
    strokeWeight(0);
    fill(211, 189, 100);
    ellipse(63+55*n, 60, 30, 19);
  }
  //red
  for (int n= 0; n <6; n++) {

    ellipseMode(CENTER);
    stroke(211, 100, 102);
    strokeWeight(0);
    fill(211, 100, 102);
    ellipse(63+55*n, 65, 7, 7);
  }

  //roof // lid
  rectMode(CORNERS);
  stroke(211, 189, 100);
  strokeWeight(0);
  fill(211, 189, 100);
  rect(35, 23, 400-35, 60);

  //triangle decor Red
  for (int n= 0; n <16; n++) {

    stroke(211, 100, 102);
    strokeWeight(0);
    fill(211, 100, 102);
    triangle(35+n*20, 38, 55+n*20, 38, 45+n*20, 47);
    triangle(355, 38, 365, 38, 365, 47);
  }
  //traingle decor Blue
  for (int n= 0; n <16; n++) {

    stroke(100, 182, 211);
    strokeWeight(0);
    fill(100, 182, 211);
    triangle(45+n*20, 38, 55+n*20, 38, 45+n*20, 47);
    //triangle(35,38,35,47,45,47);
  }
}
void calculateXAndYLocations(){
 

  //calc left shouler location
  //lShoulderRot = waistRot - 0.5;
  lShoulderX =mouseX*0.45+110+  8.0*sin(PI*(waistRot - 0.5));
  lShoulderY =140+15+  8.0*cos(PI*(waistRot - 0.5));
  //calc right shouler location
  //rShoulderRot = waistRot + 0.5;
  rShoulderX =mouseX*0.45+110+  8.0*sin(PI*(waistRot + 0.5));
  rShoulderY =140+15+  8.0*cos(PI*(waistRot + 0.5));

  //calc left hip location
  lHipX =mouseX*0.45+110+  42.0*sin(PI*(waistRot - 0.018));
  lHipY =140+15+  42.0*cos(PI*(waistRot - 0.018));
  //calc right hip location
  rHipX =mouseX*0.45+110+  42.0*sin(PI*(waistRot + 0.018));
  rHipY =140+15+  42.0*cos(PI*(waistRot + 0.018));

  //calc lElbow location 
  lElbowX =lShoulderX+ 16.0*sin(PI*lElbowRot);
  lElbowY =lShoulderY+ 16.0*cos(PI*lElbowRot);
  //calc rElbow location 
  rElbowX =rShoulderX+ 16.0*sin(PI*rElbowRot);
  rElbowY =rShoulderY+ 16.0*cos(PI*rElbowRot);


  //calc lHand location 
  lHandX =lElbowX+ 19.0*sin(PI*lHandRot);
  lHandY =lElbowY+ 19.0*cos(PI*lHandRot);
  //calc rHand location 
  rHandX =rElbowX+ 19.0*sin(PI*rHandRot);
  rHandY =rElbowY+ 19.0*cos(PI*rHandRot);



  //calc lKnee location 
  lKneeX =lHipX+ 19.0*sin(PI*lKneeRot);
  lKneeY =lHipY+ 19.0*cos(PI*lKneeRot);
  //calc rKnee location 
  rKneeX =rHipX+ 19.0*sin(PI*rKneeRot);
  rKneeY =rHipY+ 19.0*cos(PI*rKneeRot);

  //calc lFoot location 
  lFootX =lKneeX+ 19.0*sin(PI*lFootRot);
  lFootY =lKneeY+ 19.0*cos(PI*lFootRot);
  //calc rFoot location 
  rFootX =rKneeX+ 19.0*sin(PI*rFootRot);
  rFootY =rKneeY+ 19.0*cos(PI*rFootRot);

  // base line calc code
  // l(X, Y, X+(*)*sin(PI*Rot), Y + (*)*cos(PI*Rot)); 
}



void doScaryMessyPhysics() {
  //gravity code 
  /*
  if (**Rot>-0.003 && **Rot<0.003 && **Sp<0.001 && **Sp>-0.001) {
   **Rot = 0;
   **Sp = 0;
   } else if ((**Rot + **Sp >= 0 && **Rot <= 0) || (**Rot + **Sp <= 0 && **Rot >= 0)) {
   **Sp = **Sp *0.75;
   } else if (**Rot >0) {
   **Sp = **Sp - 0.003;
   } else if (**Rot <0) {
   **Sp = **Sp + 0.003;
   }
   */

  //limit hit code
  /*
  if (**Rot+**Sp > r**Lim) {
   **Sp = 0;
   **Rot = **Lim;
   } else if (**Rot+**Sp < l**Lim) {
   **Sp = 0;
   **Rot = l**Lim;
   }
   */

  //calc waist

  //calc waist speed
  waistSp = waistSp + (pmouseX - mouseX)/1200.0;
  //add a random twitch to the doll
  if (waistSp == 0) {
    if (random (0, 600) > 598) {
      waistSp = 0.018;
    }
  }
  //calc apply speed to rotation
  waistRot = waistRot +waistSp;
  // hold movement inside limit
  if (waistRot+waistSp > waistLimR) {
    waistSp = 0;
    waistRot = waistLimR;
  } else if (waistRot+waistSp < waistLimL) {
    waistSp = 0;
    waistRot = waistLimL;
  }
  //apply gravity
  if (waistRot>-0.003 && waistRot<0.003 && waistSp<0.001 && waistSp>-0.001) {
    waistRot = 0;
    waistSp = 0;
  } else if ((waistRot + waistSp >= 0 && waistRot <= 0) || (waistRot + waistSp <= 0 && waistRot >= 0)) {
    waistSp = waistSp *0.75;
  } else if (waistRot >0) {
    waistSp = waistSp - 0.003;
  } else if (waistRot <0) {
    waistSp = waistSp + 0.003;
  }
  waistX = 40.0*sin(PI*waistRot);
  waistY = 40.0*cos(PI*waistRot);

  //calc lElbow

  //calc lElbow speed
  lElbowSp = lElbowSp + (pmouseX - mouseX)/1200.0;
  //calc apply speed to rotation
  lElbowRot = lElbowRot +lElbowSp;
  // hold movement inside limit
  if (lElbowRot+lElbowSp > lElbowLimR) {
    lElbowSp = 0;
    lElbowRot = lElbowLimR;
  } else if (lElbowRot+lElbowSp < lElbowLimL) {
    lElbowSp = 0;
    lElbowRot = lElbowLimL;
  }
  //apply gravity
  if (lElbowRot>-0.003 && lElbowRot<0.003 && lElbowSp<0.001 && lElbowSp>-0.001) {
    lElbowRot = 0;
    lElbowSp = 0;
  } else if ((lElbowRot + lElbowSp >= 0 && lElbowRot <= 0) || (lElbowRot + lElbowSp <= 0 && lElbowRot >= 0)) {
    lElbowSp = lElbowSp *0.75;
  } else if (lElbowRot >0) {
    lElbowSp = lElbowSp - 0.003;
  } else if (lElbowRot <0) {
    lElbowSp = lElbowSp + 0.003;
  }

  //calc lHand speed
  lHandSp = lHandSp + (pmouseX - mouseX)/1200.0;
  //add a random twitch to the doll
  if (lHandSp == 0) {
    if (random (0, 600) > 598) {
      lHandSp = 0.018;
    }
  }
  //calc apply speed to rotation
  lHandRot = lHandRot +lHandSp;
  // hold movement inside limit
  if (lHandRot+lHandSp > lHandLimR) {
    lHandSp = 0;
    lHandRot = lHandLimR;
  } else if (lHandRot+lHandSp < lHandLimL) {
    lHandSp = 0;
    lHandRot = lHandLimL;
  }
  //apply gravity
  if (lHandRot>-0.003 && lHandRot<0.003 && lHandSp<0.001 && lHandSp>-0.001) {
    lHandRot = 0;
    lHandSp = 0;
  } else if ((lHandRot + lHandSp >= 0 && lHandRot <= 0) || (lHandRot + lHandSp <= 0 && lHandRot >= 0)) {
    lHandSp = lHandSp *0.75;
  } else if (lHandRot >0) {
    lHandSp = lHandSp - 0.003;
  } else if (lHandRot <0) {
    lHandSp = lHandSp + 0.003;
  }

  //calc rElbow

  //calc rElbow speed
  rElbowSp = rElbowSp + (pmouseX - mouseX)/1200.0;
  //calc apply speed to rotation
  rElbowRot = rElbowRot +rElbowSp;
  // hold movement inside limit
  if (rElbowRot+rElbowSp > rElbowLimR) {
    rElbowSp = 0;
    rElbowRot = rElbowLimR;
  } else if (rElbowRot+rElbowSp < rElbowLimL) {
    rElbowSp = 0;
    rElbowRot = rElbowLimL;
  }
  //apply gravity
  if (rElbowRot>-0.003 && rElbowRot<0.003 && rElbowSp<0.001 && rElbowSp>-0.001) {
    rElbowRot = 0;
    rElbowSp = 0;
  } else if ((rElbowRot + rElbowSp >= 0 && rElbowRot <= 0) || (rElbowRot + rElbowSp <= 0 && rElbowRot >= 0)) {
    rElbowSp = rElbowSp *0.75;
  } else if (rElbowRot >0) {
    rElbowSp = rElbowSp - 0.003;
  } else if (rElbowRot <0) {
    rElbowSp = rElbowSp + 0.003;
  }

  //calc rHand speed
  rHandSp = rHandSp + (pmouseX - mouseX)/1200.0;
  //add a random twitch to the doll
  if (rHandSp == 0) {
    if (random (0, 600) > 598) {
      rHandSp = 0.018;
    }
  }
  //calc apply speed to rotation
  rHandRot = rHandRot +rHandSp;
  // hold movement inside limit
  if (rHandRot+rHandSp > rHandLimR) {
    rHandSp = 0;
    rHandRot = rHandLimR;
  } else if (rHandRot+rHandSp < rHandLimL) {
    rHandSp = 0;
    rHandRot = rHandLimL;
  }
  //apply gravity
  if (rHandRot>-0.003 && rHandRot<0.003 && rHandSp<0.001 && rHandSp>-0.001) {
    rHandRot = 0;
    rHandSp = 0;
  } else if ((rHandRot + rHandSp >= 0 && rHandRot <= 0) || (rHandRot + rHandSp <= 0 && rHandRot >= 0)) {
    rHandSp = rHandSp *0.75;
  } else if (rHandRot >0) {
    rHandSp = rHandSp - 0.003;
  } else if (rHandRot <0) {
    rHandSp = rHandSp + 0.003;
  }

  //calc rKnee

  //calc rKnee speed
  rKneeSp = rKneeSp + (pmouseX - mouseX)/1200.0;
  //calc apply speed to rotation
  rKneeRot = rKneeRot +rKneeSp;
  // hold movement inside limit
  if (rKneeRot+rKneeSp > rKneeLimR) {
    rKneeSp = 0;
    rKneeRot = rKneeLimR;
  } else if (rKneeRot+rKneeSp < rKneeLimL) {
    rKneeSp = 0;
    rKneeRot = rKneeLimL;
  }
  //apply gravity
  if (rKneeRot>-0.003 && rKneeRot<0.003 && rKneeSp<0.001 && rKneeSp>-0.001) {
    rKneeRot = 0;
    rKneeSp = 0;
  } else if ((rKneeRot + rKneeSp >= 0 && rKneeRot <= 0) || (rKneeRot + rKneeSp <= 0 && rKneeRot >= 0)) {
    rKneeSp = rKneeSp *0.75;
  } else if (rKneeRot >0) {
    rKneeSp = rKneeSp - 0.003;
  } else if (rKneeRot <0) {
    rKneeSp = rKneeSp + 0.003;
  }

  //calc lKnee speed
  lKneeSp = lKneeSp + (pmouseX - mouseX)/1200.0;
  //calc apply speed to rotation
  lKneeRot = lKneeRot +lKneeSp;
  // hold movement inside limit
  if (lKneeRot+lKneeSp > lKneeLimR) {
    lKneeSp = 0;
    lKneeRot = lKneeLimR;
  } else if (lKneeRot+lKneeSp < lKneeLimL) {
    lKneeSp = 0;
    lKneeRot = lKneeLimL;
  }
  //apply gravity
  if (lKneeRot>-0.003 && lKneeRot<0.003 && lKneeSp<0.001 && lKneeSp>-0.001) {
    lKneeRot = 0;
    lKneeSp = 0;
  } else if ((lKneeRot + lKneeSp >= 0 && lKneeRot <= 0) || (lKneeRot + lKneeSp <= 0 && lKneeRot >= 0)) {
    lKneeSp = lKneeSp *0.75;
  } else if (lKneeRot >0) {
    lKneeSp = lKneeSp - 0.003;
  } else if (lKneeRot <0) {
    lKneeSp = lKneeSp + 0.003;
  }

  //calc lFoot speed
  lFootSp = lFootSp + (pmouseX - mouseX)/1200.0;
  //calc apply speed to rotation
  lFootRot = lFootRot +lFootSp;
  // hold movement inside limit
  if (lFootRot+lFootSp > lFootLimR) {
    lFootSp = 0;
    lFootRot = lFootLimR;
  } else if (lFootRot+lFootSp < lFootLimL) {
    lFootSp = 0;
    lFootRot = lFootLimL;
  }
  //apply gravity
  if (lFootRot>-0.003 && lFootRot<0.003 && lFootSp<0.001 && lFootSp>-0.001) {
    lFootRot = 0;
    lFootSp = 0;
  } else if ((lFootRot + lFootSp >= 0 && lFootRot <= 0) || (lFootRot + lFootSp <= 0 && lFootRot >= 0)) {
    lFootSp = lFootSp *0.75;
  } else if (lFootRot >0) {
    lFootSp = lFootSp - 0.003;
  } else if (lFootRot <0) {
    lFootSp = lFootSp + 0.003;
  }


  //calc rFoot speed
  rFootSp = rFootSp + (pmouseX - mouseX)/1200.0;
  //calc apply speed to rotation
  rFootRot = rFootRot +rFootSp;
  // hold movement inside limit
  if (rFootRot+rFootSp > rFootLimR) {
    rFootSp = 0;
    rFootRot = rFootLimR;
  } else if (rFootRot+rFootSp < rFootLimL) {
    rFootSp = 0;
    rFootRot = rFootLimL;
  }
  //apply gravity
  if (rFootRot>-0.003 && rFootRot<0.003 && rFootSp<0.001 && rFootSp>-0.001) {
    rFootRot = 0;
    rFootSp = 0;
  } else if ((rFootRot + rFootSp >= 0 && rFootRot <= 0) || (rFootRot + rFootSp <= 0 && rFootRot >= 0)) {
    rFootSp = rFootSp *0.75;
  } else if (rFootRot >0) {
    rFootSp = rFootSp - 0.003;
  } else if (rFootRot <0) {
    rFootSp = rFootSp + 0.003;
  }
}