|
@@ -73,6 +73,9 @@
|
|
|
// _scrambler_CL,
|
|
|
// _scrambler_CR;
|
|
|
|
|
|
+ var check_parts_colid_frq = 2;
|
|
|
+ var check_parts_colid_tick = 1;
|
|
|
+
|
|
|
// ____ _ __
|
|
|
// / _/___ (_) /______
|
|
|
// / // __ \/ / __/ ___/
|
|
@@ -230,13 +233,14 @@
|
|
|
|
|
|
this.e_color = 'e_col_'+this.entrees[Math.floor(Math.random(this.entrees.length))];
|
|
|
|
|
|
+ // pre-rendering node virtual canvas
|
|
|
this.canvas = document.createElement('canvas');
|
|
|
this.canvas_ctx = this.canvas.getContext('2d');
|
|
|
-
|
|
|
- this.line_width = 1.5;
|
|
|
- this.canvas_w = this.r*2+this.line_width*2;
|
|
|
- this.canvas.width = this.canvas_w;
|
|
|
- this.canvas.height = this.canvas_w;
|
|
|
+ this.line_width = 1;
|
|
|
+ this.w = this.r*2+this.line_width*2;
|
|
|
+ this.w_2 = this.w/2;
|
|
|
+ this.canvas.width = this.w;
|
|
|
+ this.canvas.height = this.w;
|
|
|
this.canvas_ctx.fillStyle = 'rgb(255,255,255)';
|
|
|
this.canvas_ctx.lineWidth = this.line_width;
|
|
|
|
|
@@ -250,8 +254,6 @@
|
|
|
this.aside = false;
|
|
|
this.scrambling = false;
|
|
|
|
|
|
- // this.n_repulses = {};
|
|
|
-
|
|
|
// prototypes
|
|
|
if (typeof Node.initialized == "undefined") {
|
|
|
|
|
@@ -266,15 +268,14 @@
|
|
|
|
|
|
this.draw();
|
|
|
this.initPhysics();
|
|
|
-
|
|
|
};
|
|
|
|
|
|
Node.prototype.draw = function(){
|
|
|
- _ctx.clearRect(0, 0, this.canvas_w, this.canvas_w);
|
|
|
+ _ctx.clearRect(0, 0, this.w, this.w);
|
|
|
|
|
|
this.canvas_ctx.beginPath();
|
|
|
// white background
|
|
|
- this.canvas_ctx.fillRect(0,0,this.canvas_w,this.canvas_w);
|
|
|
+ this.canvas_ctx.fillRect(0,0,this.w,this.w);
|
|
|
|
|
|
this.canvas_ctx.globalAlpha = this.faded ? 0.15 : 1;
|
|
|
|
|
@@ -537,7 +538,7 @@
|
|
|
|
|
|
Node.prototype.move = function(){
|
|
|
// just draw the virtual node canvas into the main scene canvas at the right position
|
|
|
- _ctx.drawImage(this.canvas, this.x-this.r, this.y-this.r);
|
|
|
+ _ctx.drawImage(this.canvas, this.x-this.w_2, this.y-this.w_2);
|
|
|
};
|
|
|
|
|
|
Node.initialized = true;
|
|
@@ -545,9 +546,18 @@
|
|
|
|
|
|
this.init();
|
|
|
};
|
|
|
+
|
|
|
// TODO: we may convert a lot of computation into a web worker
|
|
|
// https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers
|
|
|
function checkParticulesCollisions(){
|
|
|
+
|
|
|
+ // do not run particule collision every frames
|
|
|
+ if(check_parts_colid_tick < check_parts_colid_frq){
|
|
|
+ check_parts_colid_tick++;
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ check_parts_colid_tick = 1;
|
|
|
+
|
|
|
// pre create vars to save memory;
|
|
|
var na,nb,
|
|
|
ma,mb,
|
|
@@ -562,7 +572,7 @@
|
|
|
// avoid colliding for centered nodes
|
|
|
// if(_nodes[n].center) continue;
|
|
|
// avoid colliding for scrambling nodes
|
|
|
- if(na.scrambling) continue;
|
|
|
+ if(na.scrambling || na.aside || na.center) continue;
|
|
|
|
|
|
ma = na.p.mass;
|
|
|
|
|
@@ -571,16 +581,16 @@
|
|
|
// avoid impact between center and aside particules
|
|
|
// if((na.center && nb.aside) || (na.aside && nb.center))
|
|
|
// and between aside particules
|
|
|
- if(na.aside || nb.aside)
|
|
|
+ if(nb.aside)
|
|
|
continue;
|
|
|
|
|
|
|
|
|
// avoid impact between two centered particulses that comes to the center
|
|
|
- if(na.center && nb.center){
|
|
|
- if(Math.min(na.p.distanceTo(_attracter), nb.p.distanceTo(_attracter)) > 300){
|
|
|
- if( Math.random()>0.3 ) continue;
|
|
|
- }
|
|
|
- }
|
|
|
+ // if(na.center && nb.center){
|
|
|
+ // if(Math.min(na.p.distanceTo(_attracter), nb.p.distanceTo(_attracter)) > 300){
|
|
|
+ // if( Math.random()>0.3 ) continue;
|
|
|
+ // }
|
|
|
+ // }
|
|
|
|
|
|
w = h = (na.r+nb.r);
|
|
|
// if(!na.aside && !nb.aside){
|
|
@@ -684,7 +694,6 @@
|
|
|
// console.log('_physics.attractions.length', _physics.attractions.length);
|
|
|
};
|
|
|
|
|
|
-
|
|
|
// ___ _ ___ _ _ _ _
|
|
|
// | _ \__ _ _ _ __| |___ _ __ | _ \ |__ _ _ _| (_)__| |_
|
|
|
// | / _` | ' \/ _` / _ \ ' \ | _/ / _` | || | | (_-< _|
|