|
@@ -39,6 +39,9 @@
|
|
var _no_articles_nodes = [];
|
|
var _no_articles_nodes = [];
|
|
var _nodes_by_entries = {};
|
|
var _nodes_by_entries = {};
|
|
var _nodes_by_nid = {};
|
|
var _nodes_by_nid = {};
|
|
|
|
+ var _nodes_centered = [];
|
|
|
|
+ var _nodes_centered_attractions = [];
|
|
|
|
+
|
|
|
|
|
|
// var _particules = [];
|
|
// var _particules = [];
|
|
// var _base_radius = 3; // nodes radius (real radius, not diametre)
|
|
// var _base_radius = 3; // nodes radius (real radius, not diametre)
|
|
@@ -200,6 +203,8 @@
|
|
console.log('_articles_nodes',_articles_nodes);
|
|
console.log('_articles_nodes',_articles_nodes);
|
|
console.log('_no_articles_nodes',_no_articles_nodes);
|
|
console.log('_no_articles_nodes',_no_articles_nodes);
|
|
console.log('_nodes_by_entries', _nodes_by_entries);
|
|
console.log('_nodes_by_entries', _nodes_by_entries);
|
|
|
|
+
|
|
|
|
+ console.log('_physics.attractions.length', _physics.attractions.length);
|
|
};
|
|
};
|
|
|
|
|
|
function Node(i,node,d){
|
|
function Node(i,node,d){
|
|
@@ -250,6 +255,8 @@
|
|
this.aside = false;
|
|
this.aside = false;
|
|
this.scrambling = false;
|
|
this.scrambling = false;
|
|
|
|
|
|
|
|
+ this.n_repulses = {};
|
|
|
|
+
|
|
// prototypes
|
|
// prototypes
|
|
if (typeof Node.initialized == "undefined") {
|
|
if (typeof Node.initialized == "undefined") {
|
|
|
|
|
|
@@ -411,14 +418,14 @@
|
|
|
|
|
|
Node.prototype.setAside = function(){
|
|
Node.prototype.setAside = function(){
|
|
this.aside = true;
|
|
this.aside = true;
|
|
- this.fade();
|
|
|
|
|
|
+ // this.fade();
|
|
this.stopScrambling();
|
|
this.stopScrambling();
|
|
this.unsetCentered();
|
|
this.unsetCentered();
|
|
this.repulse_center.on = true;
|
|
this.repulse_center.on = true;
|
|
}
|
|
}
|
|
Node.prototype.unsetAside = function(){
|
|
Node.prototype.unsetAside = function(){
|
|
this.aside = false;
|
|
this.aside = false;
|
|
- this.unFade();
|
|
|
|
|
|
+ // this.unFade();
|
|
this.repulse_center.on = false;
|
|
this.repulse_center.on = false;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -475,21 +482,32 @@
|
|
// 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
|
|
// 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(){
|
|
function checkParticulesCollisions(){
|
|
// pre create vars to save memory;
|
|
// pre create vars to save memory;
|
|
- var d, full_rad,
|
|
|
|
|
|
+ var d, full_rad, margin,
|
|
newVelX1, newVelY1, newVelX2, newVelY2,
|
|
newVelX1, newVelY1, newVelX2, newVelY2,
|
|
makeup, angle;
|
|
makeup, angle;
|
|
// colisions between _particules
|
|
// colisions between _particules
|
|
for (var n = 0; n < _nodes.length; n++) {
|
|
for (var n = 0; n < _nodes.length; n++) {
|
|
|
|
|
|
|
|
+ // avoid colliding for centered nodes
|
|
|
|
+ if(_nodes[n].center) continue;
|
|
|
|
+
|
|
|
|
+ // TODO: find a way to smouthly slow down theme near center
|
|
|
|
+
|
|
|
|
+ // avoid colliding for scrambling nodes
|
|
if(_nodes[n].scrambling) continue;
|
|
if(_nodes[n].scrambling) continue;
|
|
|
|
|
|
for (var q = n+1; q < _nodes.length; q++) {
|
|
for (var q = n+1; q < _nodes.length; q++) {
|
|
if(q===n) continue;
|
|
if(q===n) continue;
|
|
|
|
|
|
|
|
+
|
|
// avoid impact between center and aside particules
|
|
// avoid impact between center and aside particules
|
|
if((_nodes[n].center && _nodes[q].aside) || (_nodes[n].aside && _nodes[q].center))
|
|
if((_nodes[n].center && _nodes[q].aside) || (_nodes[n].aside && _nodes[q].center))
|
|
continue;
|
|
continue;
|
|
|
|
|
|
|
|
+ // TODO: what if centered nodes are repulsing each other ??
|
|
|
|
+
|
|
|
|
+ margin = _nodes[n].center ? 1 : 1;
|
|
|
|
+
|
|
// avoid impact between two centered particulses that comes to the center
|
|
// avoid impact between two centered particulses that comes to the center
|
|
if(_nodes[n].center && _nodes[q].center){
|
|
if(_nodes[n].center && _nodes[q].center){
|
|
if(Math.min(_nodes[n].p.distanceTo(_attracter), _nodes[q].p.distanceTo(_attracter)) > 300){
|
|
if(Math.min(_nodes[n].p.distanceTo(_attracter), _nodes[q].p.distanceTo(_attracter)) > 300){
|
|
@@ -499,7 +517,7 @@
|
|
|
|
|
|
d = _nodes[n].p.distanceTo(_nodes[q].p);
|
|
d = _nodes[n].p.distanceTo(_nodes[q].p);
|
|
|
|
|
|
- full_rad = _nodes[n].r + _nodes[q].r;
|
|
|
|
|
|
+ full_rad = _nodes[n].r*margin + _nodes[q].r*margin;
|
|
|
|
|
|
// if not colliding skip following
|
|
// if not colliding skip following
|
|
if(d > full_rad) continue;
|
|
if(d > full_rad) continue;
|
|
@@ -562,13 +580,41 @@
|
|
// | _|| ' \ _| '_/ -_) -_|_-<
|
|
// | _|| ' \ _| '_/ -_) -_|_-<
|
|
// |___|_||_\__|_| \___\___/__/
|
|
// |___|_||_\__|_| \___\___/__/
|
|
function filterEntree(t){
|
|
function filterEntree(t){
|
|
|
|
+ _nodes_centered = [];
|
|
for (var n = 0; n < _nodes.length; n++) {
|
|
for (var n = 0; n < _nodes.length; n++) {
|
|
if(_nodes[n].entrees.indexOf(t) == -1){
|
|
if(_nodes[n].entrees.indexOf(t) == -1){
|
|
_nodes[n].setAside();
|
|
_nodes[n].setAside();
|
|
}else{
|
|
}else{
|
|
_nodes[n].setCenteredOnEntree(t);
|
|
_nodes[n].setCenteredOnEntree(t);
|
|
|
|
+ _nodes_centered.push(_nodes[n]);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ createNodesRepulsions();
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+ function createNodesRepulsions(){
|
|
|
|
+ // how to delete all these attractions before creates new once
|
|
|
|
+ console.log('_nodes_centered', _nodes_centered);
|
|
|
|
+ purgeNodesRepulsions();
|
|
|
|
+ for (var n = 0; n < _nodes_centered.length; n++) {
|
|
|
|
+ for (var q = n+1; q < _nodes_centered.length; q++) {
|
|
|
|
+ _physics.makeAttraction(_nodes_centered[n].p, _nodes_centered[q].p, -0.4, 10);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+ function purgeNodesRepulsions(){
|
|
|
|
+ // console.log('_physics.attractions.length', _physics.attractions.length);
|
|
|
|
+ for (var a = _physics.attractions.length-1; a >= 0; a--) {
|
|
|
|
+ // assuming that only nodes repulsions have constant < 1
|
|
|
|
+ // and are all at the end of array
|
|
|
|
+ if(Math.abs(_physics.attractions[a].constant) < 1){
|
|
|
|
+ _physics.attractions.splice(a,1);
|
|
|
|
+ }else{
|
|
|
|
+ break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ // console.log('_physics.attractions.length', _physics.attractions.length);
|
|
};
|
|
};
|
|
|
|
|
|
function scrambleCollection(){
|
|
function scrambleCollection(){
|