/* Code by Gildas P. / www.gildasp.fr */ Node = new Class({ initialize : function(pCanvas_, id_, level_, x_, y_, r_, coul_, texte_){ this.smoothNodeRepulse = 50; this.minVit = 0.2; this.listeFils = new Array(); this.nbFils = 0; this.nodeSprings = new Array(); this.nodeNbSprings = 0; this.pCanvas = pCanvas_; this.id = id_; this.level = level_; this.x = x_; this.y = y_; this.r = r_; this.coul = coul_; this.texte = texte_; this.vitx = 0; this.vity = 0; if(this.id>1){ this.active = false; } else { this.active = true; } this.dead = 0; }, activeNode : function(posx, posy){ if(!this.active){ this.active = true; this.x = posx; this.y = posy; } }, killOthers : function(liste, nb){ for(k=0; k<nb; k++){ if(liste[k].level >= this.nodeSprings[0].level) liste[k].n2.active = false; } }, updateNode : function(){ if(this.dead == 0){ this.x += this.vitx; this.y += this.vity; if(this == nodeList[0]){ this.x = sceneWidth/3; this.y = sceneHeight; } } else if(this.dead == 1){ this.defvitx = randFloat(-1, 1); this.defvity = randFloat(2, 4)*8; this.dead = 2; this.x += this.defvitx; this.y += this.defvity; } else if(this.dead == 2){ this.x += this.defvitx; this.y += this.defvity; } }, drawNode : function(){ this.pCanvas.noStroke(); this.pCanvas.fill(this.coul); if(this.mouseOver()) this.pCanvas.fill(255, 153, 0); this.pCanvas.ellipse(this.x, this.y, this.r, this.r); this.pCanvas.fill(255, 255, 255); if(this.id>=2){ info = (this.nbFils>0?"("+this.nbFils+')':''); this.pCanvas.text(this.texte+" "+info, this.x+20, this.y+5); } else if(this.id>0 && this.mouseOver()){ this.pCanvas.text(this.texte+" ("+this.nbFils+")", this.x+20, this.y+5); } }, mouseOver : function(){ if(this.pCanvas.dist(mouseX, mouseY, this.x, this.y)<=this.r){ return true; } else { return false; } }, repulseNodes : function(liste, nb){ for(i=0; i<nb; i++){ if(liste[i] != this && liste[i].active == true){ this.n1 = this; this.n2 = liste[i]; this.angle = this.pCanvas.atan((this.n1.y-this.n2.y)/(this.n1.x-this.n2.x)); if(this.n1.x>=this.n2.x){ this.angle += this.pCanvas.PI; } if(liste[i].level != this.level){ att = 2*Math.abs(liste[i].level-this.level); } else { att = 1; } this.n1.vitx -= this.pCanvas.cos(this.angle)*globalDistance/2/this.smoothNodeRepulse/att; this.n1.vity -= this.pCanvas.sin(this.angle)*globalDistance/2/this.smoothNodeRepulse/att; this.n2.vitx += this.pCanvas.cos(this.angle)*globalDistance/2/this.smoothNodeRepulse/att; this.n2.vity += this.pCanvas.sin(this.angle)*globalDistance/2/this.smoothNodeRepulse/att; } } } });
