Change Processing code to p5.js

Thanks @colin

I’ve managed to change it all to p5.js, but I want the circles to go back to their starting points when the mouse is pressed. However, at the moment when the mouse is pressed, the circles disappear. Do you know why this keeps happening?

Thanks!!

var num=5; 
var springs = [] 

function setup() {
  createCanvas(window.innerWidth, window.innerHeight);
  noFill(); 
  springs[0] = new Spring(35, 10, 15, 0.98, 8.0, 0.1, springs, 0); 
  springs[1] = new Spring(27, 32, 15, 0.95, 9.0, 0.1, springs, 1); 
  springs[2] = new Spring(63, 20, 7, 0.90, 9.9, 0.1, springs, 2);
  springs[3] = new Spring(55, 45, 15, 0.90, 9.9, 0.1, springs, 3);
  springs[4] = new Spring(14, 70, 7, 0.90, 9.9, 0.1, springs, 4);
}

function draw() {
  background(255);
  line(42, 11, 59, 18);
  line(62, 23, 58, 37);
  line(22, 44, 17, 60);

  for (var i = 0; i < num; i++) { 
    springs[i].update(); 
    springs[i].display();
  }
}


function mouseMoved() {
  for (var i = 0; i < num; i++) { 
    springs[i].pressed();
  }
}

function touchEnded() {
  for (var i = 0; i < num; i++) { 
    springs[i].released();
  }
}

///////////////////////////////////////////////

// Spring class
function Spring (_x, _y, _s, _d, _m, _k_in, _others, _id) {
  // Screen values 
  // this.xpos = _x;
  // this.ypos = _y;

  this.x_pos = _x;
  this.y_pos= _y;

  this.size = 20;
  this.size = _s; 

  this.over = false; 
  this.move = false; 

  // Spring simulation constants 
  this.mass = _m;       // Mass 
  this.k = 0.2;    // Spring constant 
  this.k = _k_in;
  this.damp = _d;       // Damping 
  this.rest_posx = _x;  // Rest position X 
  this.rest_posy = _y;  // Rest position Y 

  // Spring simulation variables 
  //float pos = 20.0; // Position 
  this.velx = 0.0;   // X Velocity 
  this.vely = 0.0;   // Y Velocity 
  this.accel = 0;    // Acceleration 
  this.force = 0;    // Force 

  this.friends = _others;
  this.id = _id;

  this.update = function() {

    if (this.move) { 
      this.rest_posy = mouseY; 
      this.rest_posx = mouseX;
    }

    this.force = -this.k * (this.y_pos - this.rest_posy);  // f=-ky 
    this.accel = this.force / this.mass;                 // Set the acceleration, f=ma == a=f/m 
    this.vely = this.damp * (this.vely + this.accel);         // Set the velocity 
    this.y_pos = this.y_pos + this.vely;           // Updated position 


    this.force = -this.k * (this.x_pos - this.rest_posx);  // f=-ky 
    this.accel = this.force / this.mass;                 // Set the acceleration, f=ma == a=f/m 
    this.velx = this.damp * (this.velx + this.accel);         // Set the velocity 
    this.x_pos = this.x_pos + this.velx;           // Updated position 

 


    if ((this.overEvent() || this.move) && !(this.otherOver()) ) { 
      this.over = true;
    } else { 
      this.over = false;
    }
  } 

  // Test to see if mouse is over this spring
  this.overEvent = function() {
    var disX = this.x_pos - mouseX;
    var disY = this.y_pos - mouseY;
    var dis = createVector(disX, disY);
    if (dis.mag() < this.size/2 ) {
      return true;
    } else {
      return false;
    }
  }

  // Make sure no other springs are active
  this.otherOver = function() {
    for (var i=0; i<num; i++) {
      if (i != this.id) {
        if (this.friends[i].over == false) {
          return false;
        }
      }
    }
    return false;
  }

  this.display = function() { 
    if (this.over) { 
      stroke(000);
    } else { 
      stroke(000);
    } 
    ellipse(this.x_pos, this.y_pos, this.size, this.size);
  } 

  this.pressed = function() { 
    if (this.over) { 
      this.move = true;
    } else { 
      this.move = false;
    }
  } 

  this.released = function() { 
    this.move = false; 
    this.rest_posx = this.xpos;
    this.rest_posy = this.ypos;
  }
}