|
@@ -59,8 +59,9 @@
|
|
|
console.log('Corpus : _ecolors', _ecolors);
|
|
|
// Physics
|
|
|
var _attracter,
|
|
|
- _repulser,
|
|
|
+ _repulser_top,
|
|
|
_repulser_center,
|
|
|
+ _repulser_bottom,
|
|
|
_scrambler_TL,
|
|
|
_scrambler_TR,
|
|
|
_scrambler_BR,
|
|
@@ -156,8 +157,12 @@
|
|
|
function initPhysics(){
|
|
|
_attracter = _physics.makeParticle(1000);
|
|
|
_attracter.fixed = true;
|
|
|
+ _repulser_top = _physics.makeParticle(100);
|
|
|
+ _repulser_top.fixed = true;
|
|
|
_repulser_center = _physics.makeParticle(100);
|
|
|
_repulser_center.fixed = true;
|
|
|
+ _repulser_bottom = _physics.makeParticle(100);
|
|
|
+ _repulser_bottom.fixed = true;
|
|
|
_scrambler_TL = _physics.makeParticle(100);
|
|
|
_scrambler_TL.fixed = true;
|
|
|
_scrambler_TR = _physics.makeParticle(100);
|
|
@@ -174,15 +179,19 @@
|
|
|
resizePhysics();
|
|
|
};
|
|
|
function resizePhysics(){
|
|
|
+ // attracters
|
|
|
_attracter.position = {x:_canvas.width/2, y:_canvas.height/2};
|
|
|
+ // repulsers
|
|
|
+ _repulser_top.position = {x:_canvas.width/2, y:0};
|
|
|
_repulser_center.position = {x:_canvas.width/2, y:_canvas.height/2};
|
|
|
- _scrambler_TL.position = {x:-100, y:-100};
|
|
|
- _scrambler_TR.position = {x:_canvas.width+100, y:-100};
|
|
|
- _scrambler_BR.position = {x:_canvas.width+100, y:_canvas.height+100};
|
|
|
- _scrambler_BL.position = {x:-100, y:_canvas.height+100};
|
|
|
- _scrambler_CL.position = {x:-100, y:_canvas.height/2};
|
|
|
- _scrambler_CR.position = {x:_canvas.width+100, y:_canvas.height/2};
|
|
|
- // TODO: move _attracter and _repulser on window resize
|
|
|
+ _repulser_bottom.position = {x:_canvas.width/2, y:_canvas.height};
|
|
|
+ // scramblers
|
|
|
+ _scrambler_TL.position = {x:-200, y:_canvas.height/40};
|
|
|
+ _scrambler_BL.position = {x:-200, y:_canvas.height-_canvas.height/40};
|
|
|
+ // _scrambler_CL.position = {x:-200, y:_canvas.height/2};
|
|
|
+ _scrambler_TR.position = {x:_canvas.width+200, y:_canvas.height/40};
|
|
|
+ _scrambler_BR.position = {x:_canvas.width+200, y:_canvas.height-_canvas.height/40};
|
|
|
+ // _scrambler_CR.position = {x:_canvas.width+200, y:_canvas.height/2};
|
|
|
};
|
|
|
|
|
|
|
|
@@ -281,21 +290,25 @@
|
|
|
this.attract = _physics.makeAttraction(_attracter, this.p, 1000, _canvas.width*2);
|
|
|
this.attract.on = false;
|
|
|
// repulsers
|
|
|
- this.repulse_center = _physics.makeAttraction(_repulser_center, this.p, -100, _canvas.height/2);
|
|
|
+ this.repulse_top = _physics.makeAttraction(_repulser_top, this.p, -60, _canvas.height/6);
|
|
|
+ this.repulse_center = _physics.makeAttraction(_repulser_center, this.p, -50, _canvas.height/6);
|
|
|
+ this.repulse_bottom = _physics.makeAttraction(_repulser_bottom, this.p, -60, _canvas.height/6);
|
|
|
+ this.repulse_top.on = false;
|
|
|
this.repulse_center.on = false;
|
|
|
-
|
|
|
- this.scramble_TL = _physics.makeAttraction(_scrambler_TL, this.p, -100, _canvas.height/3);
|
|
|
+ this.repulse_bottom.on = false;
|
|
|
+ // Scramblers
|
|
|
+ this.scramble_TL = _physics.makeAttraction(_scrambler_TL, this.p, -100, _canvas.height/2.5);
|
|
|
+ this.scramble_TR = _physics.makeAttraction(_scrambler_TR, this.p, -100, _canvas.height/2.5);
|
|
|
+ this.scramble_BR = _physics.makeAttraction(_scrambler_BR, this.p, -100, _canvas.height/2.5);
|
|
|
+ this.scramble_BL = _physics.makeAttraction(_scrambler_BL, this.p, -100, _canvas.height/2.5);
|
|
|
+ // this.scramble_CR = _physics.makeAttraction(_scrambler_CR, this.p, -50, _canvas.height/4);
|
|
|
+ // this.scramble_CL = _physics.makeAttraction(_scrambler_CL, this.p, -50, _canvas.height/4);
|
|
|
this.scramble_TL.on = false;
|
|
|
- this.scramble_TR = _physics.makeAttraction(_scrambler_TR, this.p, -100, _canvas.height/3);
|
|
|
this.scramble_TR.on = false;
|
|
|
- this.scramble_BR = _physics.makeAttraction(_scrambler_BR, this.p, -100, _canvas.height/3);
|
|
|
this.scramble_BR.on = false;
|
|
|
- this.scramble_BL = _physics.makeAttraction(_scrambler_BL, this.p, -100, _canvas.height/3);
|
|
|
this.scramble_BL.on = false;
|
|
|
- this.scramble_CR = _physics.makeAttraction(_scrambler_CR, this.p, -100, _canvas.height/3);
|
|
|
- this.scramble_CR.on = false;
|
|
|
- this.scramble_CL = _physics.makeAttraction(_scrambler_CL, this.p, -100, _canvas.height/3);
|
|
|
- this.scramble_CL.on = false;
|
|
|
+ // this.scramble_CR.on = false;
|
|
|
+ // this.scramble_CL.on = false;
|
|
|
};
|
|
|
|
|
|
Node.prototype.calcWallLimits = function(){
|
|
@@ -316,6 +329,9 @@
|
|
|
|
|
|
// this.p.velocity.multiplyScalar(0.99);
|
|
|
|
|
|
+ if(this.center)
|
|
|
+ this.slowDownNearCenter();
|
|
|
+
|
|
|
if(!this.p.resting()){
|
|
|
// this.checkVelocityThreshold();
|
|
|
this.checkWallBouncing();
|
|
@@ -416,17 +432,40 @@
|
|
|
this.attract.on = false;
|
|
|
}
|
|
|
|
|
|
+ Node.prototype.slowDownNearCenter = function(){
|
|
|
+ // smouthly slow down node near center
|
|
|
+ // if(this.id == 1)
|
|
|
+ // console.log('this.p.velocity', this.p.velocity);
|
|
|
+ this.dist_to_attracter = this.p.distanceTo(_attracter);
|
|
|
+ if( this.dist_to_attracter < _canvas.width/4){
|
|
|
+ if( this.p.velocity.length() > 0.4 ){
|
|
|
+ this.p.velocity.multiplyScalar(0.995);
|
|
|
+ }
|
|
|
+ // if(Math.abs(this.p.velocity.x) > 1){
|
|
|
+ // this.p.velocity.x *= 0.99;
|
|
|
+ // }
|
|
|
+ // if(Math.abs(this.p.velocity.y) > 1){
|
|
|
+ // this.p.velocity.y *= 0.99;
|
|
|
+ // }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
Node.prototype.setAside = function(){
|
|
|
this.aside = true;
|
|
|
// this.fade();
|
|
|
this.stopScrambling();
|
|
|
this.unsetCentered();
|
|
|
+ this.repulse_top.on = true;
|
|
|
this.repulse_center.on = true;
|
|
|
+ this.repulse_bottom.on = true;
|
|
|
}
|
|
|
Node.prototype.unsetAside = function(){
|
|
|
this.aside = false;
|
|
|
// this.unFade();
|
|
|
+ this.repulse_top.on = false;
|
|
|
this.repulse_center.on = false;
|
|
|
+ this.repulse_bottom.on = false;
|
|
|
}
|
|
|
|
|
|
Node.prototype.scramble = function(){
|
|
@@ -489,9 +528,7 @@
|
|
|
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
|
|
|
+ // if(_nodes[n].center) continue;
|
|
|
|
|
|
// avoid colliding for scrambling nodes
|
|
|
if(_nodes[n].scrambling) continue;
|
|
@@ -538,8 +575,8 @@
|
|
|
_nodes[q].p.velocity.y = newVelY2;
|
|
|
|
|
|
// slow down particule on impact
|
|
|
- _nodes[n].p.velocity.multiplyScalar(_nodes[n].center ? 0.90 : 0.90);
|
|
|
- _nodes[q].p.velocity.multiplyScalar(_nodes[q].center ? 0.90 : 0.90);
|
|
|
+ _nodes[n].p.velocity.multiplyScalar(_nodes[n].center && _nodes[n].p.velocity.length() < 1 ? 1.1 : 0.90);
|
|
|
+ _nodes[q].p.velocity.multiplyScalar(_nodes[q].center && _nodes[q].p.velocity.length() < 1 ? 1.1 : 0.90);
|
|
|
|
|
|
|
|
|
// move particles if they overlap
|
|
@@ -580,12 +617,17 @@
|
|
|
// | _|| ' \ _| '_/ -_) -_|_-<
|
|
|
// |___|_||_\__|_| \___\___/__/
|
|
|
function filterEntree(t){
|
|
|
+ // shuydown articles if active
|
|
|
+ if(_$articles_link.is('.is-active'))
|
|
|
+ _$articles_link.trigger('click');
|
|
|
+
|
|
|
_nodes_centered = [];
|
|
|
for (var n = 0; n < _nodes.length; n++) {
|
|
|
if(_nodes[n].entrees.indexOf(t) == -1){
|
|
|
_nodes[n].setAside();
|
|
|
}else{
|
|
|
_nodes[n].setCenteredOnEntree(t);
|
|
|
+ // record centered nodes for inter node repulsions
|
|
|
_nodes_centered.push(_nodes[n]);
|
|
|
}
|
|
|
}
|
|
@@ -617,19 +659,37 @@
|
|
|
// console.log('_physics.attractions.length', _physics.attractions.length);
|
|
|
};
|
|
|
|
|
|
+
|
|
|
+ // ___ _ _ _
|
|
|
+ // / __| __ _ _ __ _ _ __ | |__| (_)_ _ __ _
|
|
|
+ // \__ \/ _| '_/ _` | ' \| '_ \ | | ' \/ _` |
|
|
|
+ // |___/\__|_| \__,_|_|_|_|_.__/_|_|_||_\__, |
|
|
|
+ // |___/
|
|
|
function scrambleCollection(){
|
|
|
for (var i = 0; i < _nodes.length; i++) {
|
|
|
_nodes[i].scramble();
|
|
|
}
|
|
|
- setTimeout(stopScrambling, 5000);
|
|
|
+ // setTimeout(stopScrambling, 2000);
|
|
|
+ stopScrambling();
|
|
|
};
|
|
|
|
|
|
function stopScrambling(){
|
|
|
for (var i = 0; i < _nodes.length; i++) {
|
|
|
- _nodes[i].stopScrambling();
|
|
|
+ setTimeout(function(n){
|
|
|
+ n.stopScrambling();
|
|
|
+ }.bind(this, _nodes[i]), 1000 + Math.random()*4000);
|
|
|
}
|
|
|
};
|
|
|
|
|
|
+ function closeAllEntries(){
|
|
|
+ _$entrees_block_termlinks.each(function(index, el) {
|
|
|
+ if($(this).parents('li').is('.opened')){
|
|
|
+ $(this).trigger('click');
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ };
|
|
|
+
|
|
|
// _ _ _ _
|
|
|
// /_\ _ _| |_(_)__| |___ ___
|
|
|
// / _ \| '_| _| / _| / -_|_-<
|
|
@@ -654,6 +714,7 @@
|
|
|
$(this).toggleClass('is-active');
|
|
|
if($(this).is('.is-active')){
|
|
|
filterArticles();
|
|
|
+ closeAllEntries();
|
|
|
}else{
|
|
|
resetArticlesFilter();
|
|
|
}
|