Actually use eslint and fix errors
This commit is contained in:
parent
9e660a7459
commit
85d1eddedd
@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
|
"extends": "standard",
|
||||||
"parserOptions": {
|
"parserOptions": {
|
||||||
"ecmaVersion": 6,
|
"ecmaVersion": 6,
|
||||||
"sourceType": "module",
|
"sourceType": "module",
|
||||||
@ -7,6 +8,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"rules": {
|
"rules": {
|
||||||
"semi": "always"
|
"semi": ["error", "always"],
|
||||||
|
"indent": ["error", 4]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +0,0 @@
|
|||||||
extends: standard
|
|
||||||
plugins:
|
|
||||||
- standard
|
|
||||||
- promise
|
|
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
node_modules
|
380
js/field.js
380
js/field.js
@ -1,32 +1,31 @@
|
|||||||
var renderer,
|
var renderer;
|
||||||
stage,
|
var stage;
|
||||||
screenWidth,
|
var screenWidth;
|
||||||
screenHeight,
|
var screenHeight;
|
||||||
counter,
|
var counter;
|
||||||
totalScreenPixels,
|
var totalScreenPixels;
|
||||||
cycleDuration,
|
var cycleDuration;
|
||||||
connectionDistance,
|
var connectionDistance;
|
||||||
connectionLimit,
|
var connectionLimit;
|
||||||
pointShiftDistance,
|
var pointShiftDistance;
|
||||||
colorShiftAmt,
|
// var colorShiftAmt;
|
||||||
disconnectedColorShiftAmt,
|
var disconnectedColorShiftAmt;
|
||||||
polygon,
|
var polygon;
|
||||||
startPoints,
|
var startPoints;
|
||||||
polygonPoints,
|
var polygonPoints;
|
||||||
tweeningFns,
|
var tweeningFns;
|
||||||
lastLoop,
|
var lastLoop;
|
||||||
thisLoop,
|
var thisLoop;
|
||||||
fps,
|
var fps;
|
||||||
fpsGraphic,
|
var fpsGraphic;
|
||||||
scrollDelta,
|
var scrollDelta;
|
||||||
pointShiftBiasX,
|
var pointShiftBiasX;
|
||||||
pointShiftBiasY,
|
var pointShiftBiasY;
|
||||||
|
var fpsEnabled = false;
|
||||||
fpsEnabled = false;
|
|
||||||
|
|
||||||
function randomInt (min, max) {
|
function randomInt (min, max) {
|
||||||
// inclusive of min and max
|
// inclusive of min and max
|
||||||
return Math.floor(Math.random() * (max - min + 1)) + min
|
return Math.floor(Math.random() * (max - min + 1)) + min;
|
||||||
}
|
}
|
||||||
|
|
||||||
function linearTweening (t, b, c, d) {
|
function linearTweening (t, b, c, d) {
|
||||||
@ -34,113 +33,115 @@ function linearTweening (t, b, c, d) {
|
|||||||
// b = start value
|
// b = start value
|
||||||
// c = change in value
|
// c = change in value
|
||||||
// d = duration
|
// d = duration
|
||||||
return ((c * t) / d) + b
|
return ((c * t) / d) + b;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* eslint-disable no-unused-vars */
|
||||||
function easeOutBounce (t, b, c, d) {
|
function easeOutBounce (t, b, c, d) {
|
||||||
if ((t /= d) < (1 / 2.75)) {
|
if ((t /= d) < (1 / 2.75)) {
|
||||||
return c * (7.5625 * t * t) + b
|
return c * (7.5625 * t * t) + b;
|
||||||
} else if (t < (2 / 2.75)) {
|
} else if (t < (2 / 2.75)) {
|
||||||
return c * (7.5625 * (t -= (1.5 / 2.75)) * t + 0.75) + b
|
return c * (7.5625 * (t -= (1.5 / 2.75)) * t + 0.75) + b;
|
||||||
} else if (t < (2.5 / 2.75)) {
|
} else if (t < (2.5 / 2.75)) {
|
||||||
return c * (7.5625 * (t -= (2.25 / 2.75)) * t + 0.9375) + b
|
return c * (7.5625 * (t -= (2.25 / 2.75)) * t + 0.9375) + b;
|
||||||
} else {
|
} else {
|
||||||
return c * (7.5625 * (t -= (2.625 / 2.75)) * t + 0.984375) + b
|
return c * (7.5625 * (t -= (2.625 / 2.75)) * t + 0.984375) + b;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function easeInSine (t, b, c, d) {
|
function easeInSine (t, b, c, d) {
|
||||||
return -c * Math.cos(t / d * (Math.PI / 2)) + c + b
|
return -c * Math.cos(t / d * (Math.PI / 2)) + c + b;
|
||||||
}
|
}
|
||||||
|
|
||||||
function easeOutSine (t, b, c, d) {
|
function easeOutSine (t, b, c, d) {
|
||||||
return c * Math.sin(t / d * (Math.PI / 2)) + b
|
return c * Math.sin(t / d * (Math.PI / 2)) + b;
|
||||||
}
|
}
|
||||||
|
|
||||||
function easeInOutSine (t, b, c, d) {
|
function easeInOutSine (t, b, c, d) {
|
||||||
return -c / 2 * (Math.cos(Math.PI * t / d) - 1) + b
|
return -c / 2 * (Math.cos(Math.PI * t / d) - 1) + b;
|
||||||
}
|
}
|
||||||
|
|
||||||
function easeInQuad (t, b, c, d) {
|
function easeInQuad (t, b, c, d) {
|
||||||
return c * (t /= d) * t + b
|
return c * (t /= d) * t + b;
|
||||||
}
|
}
|
||||||
|
|
||||||
function easeOutQuad (t, b, c, d) {
|
function easeOutQuad (t, b, c, d) {
|
||||||
return -c * (t /= d) * (t - 2) + b
|
return -c * (t /= d) * (t - 2) + b;
|
||||||
}
|
}
|
||||||
|
|
||||||
function easeInOutQuad (t, b, c, d) {
|
function easeInOutQuad (t, b, c, d) {
|
||||||
if ((t /= d / 2) < 1) return c / 2 * t * t + b
|
if ((t /= d / 2) < 1) return c / 2 * t * t + b;
|
||||||
return -c / 2 * ((--t) * (t - 2) - 1) + b
|
return -c / 2 * ((--t) * (t - 2) - 1) + b;
|
||||||
}
|
}
|
||||||
|
|
||||||
function easeInCubic (t, b, c, d) {
|
function easeInCubic (t, b, c, d) {
|
||||||
return c * (t /= d) * t * t + b
|
return c * (t /= d) * t * t + b;
|
||||||
}
|
}
|
||||||
|
|
||||||
function easeOutCubic (t, b, c, d) {
|
function easeOutCubic (t, b, c, d) {
|
||||||
return c * ((t = t / d - 1) * t * t + 1) + b
|
return c * ((t = t / d - 1) * t * t + 1) + b;
|
||||||
}
|
}
|
||||||
|
|
||||||
function easeInOutCubic (t, b, c, d) {
|
function easeInOutCubic (t, b, c, d) {
|
||||||
if ((t /= d / 2) < 1) return c / 2 * t * t * t + b
|
if ((t /= d / 2) < 1) return c / 2 * t * t * t + b;
|
||||||
return c / 2 * ((t -= 2) * t * t + 2) + b
|
return c / 2 * ((t -= 2) * t * t + 2) + b;
|
||||||
}
|
}
|
||||||
|
|
||||||
function easeInExpo (t, b, c, d) {
|
function easeInExpo (t, b, c, d) {
|
||||||
return (t == 0) ? b : c * Math.pow(2, 10 * (t / d - 1)) + b
|
return (t === 0) ? b : c * Math.pow(2, 10 * (t / d - 1)) + b;
|
||||||
}
|
}
|
||||||
|
|
||||||
function easeOutExpo (t, b, c, d) {
|
function easeOutExpo (t, b, c, d) {
|
||||||
return (t == d) ? b + c : c * (-Math.pow(2, -10 * t / d) + 1) + b
|
return (t === d) ? b + c : c * (-Math.pow(2, -10 * t / d) + 1) + b;
|
||||||
}
|
}
|
||||||
|
|
||||||
function easeInOutExpo (t, b, c, d) {
|
function easeInOutExpo (t, b, c, d) {
|
||||||
if (t == 0) return b
|
if (t === 0) return b;
|
||||||
if (t == d) return b + c
|
if (t === d) return b + c;
|
||||||
if ((t /= d / 2) < 1) return c / 2 * Math.pow(2, 10 * (t - 1)) + b
|
if ((t /= d / 2) < 1) return c / 2 * Math.pow(2, 10 * (t - 1)) + b;
|
||||||
return c / 2 * (-Math.pow(2, -10 * --t) + 2) + b
|
return c / 2 * (-Math.pow(2, -10 * --t) + 2) + b;
|
||||||
}
|
}
|
||||||
|
|
||||||
function easeInElastic (t, b, c, d) {
|
function easeInElastic (t, b, c, d) {
|
||||||
var s = 1.70158; var p = 0; var a = c
|
var s = 1.70158; var p = 0; var a = c;
|
||||||
if (t == 0) return b; if ((t /= d) == 1) return b + c; if (!p) p = d * 0.3
|
if (t === 0) return b; if ((t /= d) === 1) return b + c; if (!p) p = d * 0.3;
|
||||||
if (a < Math.abs(c)) { a = c; var s = p / 4 } else var s = p / (2 * Math.PI) * Math.asin(c / a)
|
if (a < Math.abs(c)) { a = c; s = p / 4; } else s = p / (2 * Math.PI) * Math.asin(c / a);
|
||||||
return -(a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b
|
return -(a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b;
|
||||||
}
|
}
|
||||||
|
|
||||||
function easeOutElastic (t, b, c, d) {
|
function easeOutElastic (t, b, c, d) {
|
||||||
var s = 1.70158; var p = 0; var a = c
|
var s = 1.70158; var p = 0; var a = c;
|
||||||
if (t == 0) return b; if ((t /= d) == 1) return b + c; if (!p) p = d * 0.3
|
if (t === 0) return b; if ((t /= d) === 1) return b + c; if (!p) p = d * 0.3;
|
||||||
if (a < Math.abs(c)) { a = c; var s = p / 4 } else var s = p / (2 * Math.PI) * Math.asin(c / a)
|
if (a < Math.abs(c)) { a = c; s = p / 4; } else s = p / (2 * Math.PI) * Math.asin(c / a);
|
||||||
return a * Math.pow(2, -10 * t) * Math.sin((t * d - s) * (2 * Math.PI) / p) + c + b
|
return a * Math.pow(2, -10 * t) * Math.sin((t * d - s) * (2 * Math.PI) / p) + c + b;
|
||||||
}
|
}
|
||||||
|
|
||||||
function easeInOutElastic (t, b, c, d) {
|
function easeInOutElastic (t, b, c, d) {
|
||||||
var s = 1.70158; var p = 0; var a = c
|
var s = 1.70158; var p = 0; var a = c;
|
||||||
if (t == 0) return b; if ((t /= d / 2) == 2) return b + c; if (!p) p = d * (0.3 * 1.5)
|
if (t === 0) return b; if ((t /= d / 2) === 2) return b + c; if (!p) p = d * (0.3 * 1.5);
|
||||||
if (a < Math.abs(c)) { a = c; var s = p / 4 } else var s = p / (2 * Math.PI) * Math.asin(c / a)
|
if (a < Math.abs(c)) { a = c; s = p / 4; } else s = p / (2 * Math.PI) * Math.asin(c / a);
|
||||||
if (t < 1) return -0.5 * (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b
|
if (t < 1) return -0.5 * (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b;
|
||||||
return a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p) * 0.5 + c + b
|
return a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p) * 0.5 + c + b;
|
||||||
}
|
}
|
||||||
|
|
||||||
function easeInCirc (t, b, c, d) {
|
function easeInCirc (t, b, c, d) {
|
||||||
return -c * (Math.sqrt(1 - (t /= d) * t) - 1) + b
|
return -c * (Math.sqrt(1 - (t /= d) * t) - 1) + b;
|
||||||
}
|
}
|
||||||
|
|
||||||
function easeOutCirc (t, b, c, d) {
|
function easeOutCirc (t, b, c, d) {
|
||||||
return c * Math.sqrt(1 - (t = t / d - 1) * t) + b
|
return c * Math.sqrt(1 - (t = t / d - 1) * t) + b;
|
||||||
}
|
}
|
||||||
|
|
||||||
function easeInOutCirc (t, b, c, d) {
|
function easeInOutCirc (t, b, c, d) {
|
||||||
if ((t /= d / 2) < 1) return -c / 2 * (Math.sqrt(1 - t * t) - 1) + b
|
if ((t /= d / 2) < 1) return -c / 2 * (Math.sqrt(1 - t * t) - 1) + b;
|
||||||
return c / 2 * (Math.sqrt(1 - (t -= 2) * t) + 1) + b
|
return c / 2 * (Math.sqrt(1 - (t -= 2) * t) + 1) + b;
|
||||||
}
|
}
|
||||||
|
/* eslint-enable no-unused-vars */
|
||||||
|
|
||||||
// from: http://stackoverflow.com/a/5624139
|
// from: http://stackoverflow.com/a/5624139
|
||||||
// modified to return integer literal
|
// modified to return integer literal
|
||||||
function rgbToHex (color) {
|
function rgbToHex (color) {
|
||||||
return parseInt(((1 << 24) + (color.r << 16) + (color.g << 8) + color.b).toString(16).slice(1), 16)
|
return parseInt(((1 << 24) + (color.r << 16) + (color.g << 8) + color.b).toString(16).slice(1), 16);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Choose a random RGB color */
|
/* Choose a random RGB color */
|
||||||
@ -149,7 +150,7 @@ function randomColor () {
|
|||||||
r: Math.floor(Math.random() * (255 + 1)),
|
r: Math.floor(Math.random() * (255 + 1)),
|
||||||
g: Math.floor(Math.random() * (255 + 1)),
|
g: Math.floor(Math.random() * (255 + 1)),
|
||||||
b: Math.floor(Math.random() * (255 + 1))
|
b: Math.floor(Math.random() * (255 + 1))
|
||||||
}
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Find the average of two RGB colors and return one RGB of that color */
|
/* Find the average of two RGB colors and return one RGB of that color */
|
||||||
@ -158,7 +159,7 @@ function averageColor (color1, color2) {
|
|||||||
r: Math.round((color1.r + color2.r) / 2),
|
r: Math.round((color1.r + color2.r) / 2),
|
||||||
g: Math.round((color1.g + color2.g) / 2),
|
g: Math.round((color1.g + color2.g) / 2),
|
||||||
b: Math.round((color1.b + color2.b) / 2)
|
b: Math.round((color1.b + color2.b) / 2)
|
||||||
}
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -170,7 +171,7 @@ function weightedAverageColor (color1, color2, weight) {
|
|||||||
r: Math.round(((color1.r * (2 * weight)) + (color2.r * (2 * (1 - weight)))) / 2),
|
r: Math.round(((color1.r * (2 * weight)) + (color2.r * (2 * (1 - weight)))) / 2),
|
||||||
g: Math.round(((color1.g * (2 * weight)) + (color2.g * (2 * (1 - weight)))) / 2),
|
g: Math.round(((color1.g * (2 * weight)) + (color2.g * (2 * (1 - weight)))) / 2),
|
||||||
b: Math.round(((color1.b * (2 * weight)) + (color2.b * (2 * (1 - weight)))) / 2)
|
b: Math.round(((color1.b * (2 * weight)) + (color2.b * (2 * (1 - weight)))) / 2)
|
||||||
}
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Darken the color by a factor of 0 to 1, where 1 is black and 0 is white */
|
/* Darken the color by a factor of 0 to 1, where 1 is black and 0 is white */
|
||||||
@ -179,17 +180,17 @@ function shadeColor (color, shadeFactor) {
|
|||||||
r: Math.round(color.r * (1 - shadeFactor)),
|
r: Math.round(color.r * (1 - shadeFactor)),
|
||||||
g: Math.round(color.g * (1 - shadeFactor)),
|
g: Math.round(color.g * (1 - shadeFactor)),
|
||||||
b: Math.round(color.b * (1 - shadeFactor))
|
b: Math.round(color.b * (1 - shadeFactor))
|
||||||
}
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Given a color component (red, green, or blue int), randomly shift by configurable amount */
|
/* Given a color component (red, green, or blue int), randomly shift by configurable amount */
|
||||||
function shiftColorComponent (component, maxShiftAmt) {
|
function shiftColorComponent (component, maxShiftAmt) {
|
||||||
var shiftAmt = randomInt(maxShiftAmt * -1, maxShiftAmt),
|
var shiftAmt = randomInt(maxShiftAmt * -1, maxShiftAmt);
|
||||||
newComponent = component + shiftAmt
|
var newComponent = component + shiftAmt;
|
||||||
if ((newComponent < 0) || (newComponent > 255)) {
|
if ((newComponent < 0) || (newComponent > 255)) {
|
||||||
newComponent = component - shiftAmt
|
newComponent = component - shiftAmt;
|
||||||
}
|
}
|
||||||
return newComponent
|
return newComponent;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Randomly shift a RGB color by a configurable amount and return new RGB color */
|
/* Randomly shift a RGB color by a configurable amount and return new RGB color */
|
||||||
@ -198,155 +199,156 @@ function shiftColor (color, maxShiftAmt) {
|
|||||||
r: shiftColorComponent(color.r, maxShiftAmt),
|
r: shiftColorComponent(color.r, maxShiftAmt),
|
||||||
g: shiftColorComponent(color.g, maxShiftAmt),
|
g: shiftColorComponent(color.g, maxShiftAmt),
|
||||||
b: shiftColorComponent(color.b, maxShiftAmt)
|
b: shiftColorComponent(color.b, maxShiftAmt)
|
||||||
}
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
function distance (point1, point2) {
|
function distance (point1, point2) {
|
||||||
var a = point1[0] - point2[0]
|
var a = point1[0] - point2[0];
|
||||||
var b = point1[1] - point2[1]
|
var b = point1[1] - point2[1];
|
||||||
return Math.sqrt(a * a + b * b)
|
return Math.sqrt(a * a + b * b);
|
||||||
}
|
}
|
||||||
|
|
||||||
function getRandomPoints (numPoints, maxX, maxY, tweeningFns) {
|
function getRandomPoints (numPoints, maxX, maxY, tweeningFns) {
|
||||||
var points = [],
|
var i, x, y, color, cycleStart, easingFn;
|
||||||
i, x, y, cycleStart, easingFn
|
var points = [];
|
||||||
for (i = 0; i < numPoints; i++) {
|
for (i = 0; i < numPoints; i++) {
|
||||||
x = randomInt(0, maxX - 1)
|
x = randomInt(0, maxX - 1);
|
||||||
y = randomInt(0, maxY - 1)
|
y = randomInt(0, maxY - 1);
|
||||||
cycleStart = randomInt(0, cycleDuration - 1)
|
cycleStart = randomInt(0, cycleDuration - 1);
|
||||||
color = randomColor()
|
color = randomColor();
|
||||||
easingFn = randomInt(0, tweeningFns.length - 1)
|
easingFn = randomInt(0, tweeningFns.length - 1);
|
||||||
points[i] = [x, y, cycleStart, color, easingFn]
|
points[i] = [x, y, cycleStart, color, easingFn];
|
||||||
}
|
}
|
||||||
return points
|
return points;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line no-unused-vars
|
||||||
function shiftPointCounter (original, maxShiftAmt) {
|
function shiftPointCounter (original, maxShiftAmt) {
|
||||||
var shiftAmt = randomInt(maxShiftAmt * -1, 0),
|
var shiftAmt = randomInt(maxShiftAmt * -1, 0);
|
||||||
newCounter = original + shiftAmt
|
var newCounter = original + shiftAmt;
|
||||||
if (newCounter < 0) {
|
if (newCounter < 0) {
|
||||||
newCounter = cycleDuration + shiftAmt
|
newCounter = cycleDuration + shiftAmt;
|
||||||
}
|
}
|
||||||
return newCounter
|
return newCounter;
|
||||||
}
|
}
|
||||||
|
|
||||||
function shiftPoints (points, maxShiftAmt, counter, tweeningFns) {
|
function shiftPoints (points, maxShiftAmt, counter, tweeningFns) {
|
||||||
var i, shiftX, shiftY, candidateX, candidateY
|
var i, shiftX, shiftY, candidateX, candidateY;
|
||||||
for (i = 0; i < points.original.length; i++) {
|
for (i = 0; i < points.original.length; i++) {
|
||||||
if (points.target[i][2] >= cycleDuration) {
|
if (points.target[i][2] >= cycleDuration) {
|
||||||
// cycleDuration was reduced and now this point's cycle is out of bounds. Randomly pick a new valid one.
|
// cycleDuration was reduced and now this point's cycle is out of bounds. Randomly pick a new valid one.
|
||||||
points.target[i][2] = randomInt(0, cycleDuration - 1)
|
points.target[i][2] = randomInt(0, cycleDuration - 1);
|
||||||
}
|
}
|
||||||
if (points.target[i][2] === counter) {
|
if (points.target[i][2] === counter) {
|
||||||
points.original[i] = points.target[i].slice()
|
points.original[i] = points.target[i].slice();
|
||||||
shiftX = randomInt(maxShiftAmt * -1, maxShiftAmt)
|
shiftX = randomInt(maxShiftAmt * -1, maxShiftAmt);
|
||||||
shiftY = randomInt(maxShiftAmt * -1, maxShiftAmt)
|
shiftY = randomInt(maxShiftAmt * -1, maxShiftAmt);
|
||||||
if (((shiftX < 0) && (pointShiftBiasX === 1)) || ((shiftX > 0) && (pointShiftBiasX === -1))) {
|
if (((shiftX < 0) && (pointShiftBiasX === 1)) || ((shiftX > 0) && (pointShiftBiasX === -1))) {
|
||||||
shiftX = shiftX * -1
|
shiftX = shiftX * -1;
|
||||||
}
|
}
|
||||||
if (((shiftY < 0) && (pointShiftBiasY === 1)) || ((shiftY > 0) && (pointShiftBiasY === -1))) {
|
if (((shiftY < 0) && (pointShiftBiasY === 1)) || ((shiftY > 0) && (pointShiftBiasY === -1))) {
|
||||||
shiftY = shiftY * -1
|
shiftY = shiftY * -1;
|
||||||
}
|
}
|
||||||
candidateX = points.original[i][0] + shiftX
|
candidateX = points.original[i][0] + shiftX;
|
||||||
candidateY = points.original[i][1] + shiftY
|
candidateY = points.original[i][1] + shiftY;
|
||||||
if ((candidateX > screenWidth) || (candidateX < 0)) {
|
if ((candidateX > screenWidth) || (candidateX < 0)) {
|
||||||
candidateX = points.original[i][0] - shiftX
|
candidateX = points.original[i][0] - shiftX;
|
||||||
}
|
}
|
||||||
if ((candidateY > screenHeight) || (candidateY < 0)) {
|
if ((candidateY > screenHeight) || (candidateY < 0)) {
|
||||||
candidateY = points.original[i][1] - shiftY
|
candidateY = points.original[i][1] - shiftY;
|
||||||
}
|
}
|
||||||
points.target[i][0] = candidateX
|
points.target[i][0] = candidateX;
|
||||||
points.target[i][1] = candidateY
|
points.target[i][1] = candidateY;
|
||||||
points.target[i][4] = randomInt(0, tweeningFns.length - 1)
|
points.target[i][4] = randomInt(0, tweeningFns.length - 1);
|
||||||
// FIXME: buggy, makes points jump around too fast
|
// FIXME: buggy, makes points jump around too fast
|
||||||
// points.target[i][2] = shiftPointCounter(points.original[i][2], maxShiftAmt);
|
// points.target[i][2] = shiftPointCounter(points.original[i][2], maxShiftAmt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// clear pointShiftBiases now that they have been "used"
|
// clear pointShiftBiases now that they have been "used"
|
||||||
pointShiftBiasX = 0
|
pointShiftBiasX = 0;
|
||||||
pointShiftBiasY = 0
|
pointShiftBiasY = 0;
|
||||||
|
|
||||||
return points
|
return points;
|
||||||
}
|
}
|
||||||
|
|
||||||
function redistributeCycles (points) {
|
function redistributeCycles (points) {
|
||||||
for (i = 0; i < points.original.length; i++) {
|
for (var i = 0; i < points.original.length; i++) {
|
||||||
points.target[i][2] = randomInt(0, cycleDuration - 1)
|
points.target[i][2] = randomInt(0, cycleDuration - 1);
|
||||||
}
|
}
|
||||||
return points
|
return points;
|
||||||
}
|
}
|
||||||
|
|
||||||
function relativeCounter (counter, targetStart) {
|
function relativeCounter (counter, targetStart) {
|
||||||
var relCounter = counter - targetStart
|
var relCounter = counter - targetStart;
|
||||||
if (relCounter < 0) {
|
if (relCounter < 0) {
|
||||||
return cycleDuration + relCounter
|
return cycleDuration + relCounter;
|
||||||
}
|
}
|
||||||
return relCounter
|
return relCounter;
|
||||||
}
|
}
|
||||||
|
|
||||||
function drawPolygon (polygon, points, counter, tweeningFns) {
|
function drawPolygon (polygon, points, counter, tweeningFns) {
|
||||||
var i, j, easingFn, avgColor, connectionCount, dist, proximity
|
var i, j, easingFn, avgColor, shadedColor, connectionCount, dist, connectivity;
|
||||||
// calculate vectors
|
// calculate vectors
|
||||||
for (i = 0; i < points.original.length; i++) {
|
for (i = 0; i < points.original.length; i++) {
|
||||||
easingFn = tweeningFns[points.target[i][4]]
|
easingFn = tweeningFns[points.target[i][4]];
|
||||||
points.tweened[i][0] = easingFn(relativeCounter(counter, points.target[i][2]), points.original[i][0], points.target[i][0] - points.original[i][0], cycleDuration)
|
points.tweened[i][0] = easingFn(relativeCounter(counter, points.target[i][2]), points.original[i][0], points.target[i][0] - points.original[i][0], cycleDuration);
|
||||||
points.tweened[i][1] = easingFn(relativeCounter(counter, points.target[i][2]), points.original[i][1], points.target[i][1] - points.original[i][1], cycleDuration)
|
points.tweened[i][1] = easingFn(relativeCounter(counter, points.target[i][2]), points.original[i][1], points.target[i][1] - points.original[i][1], cycleDuration);
|
||||||
}
|
}
|
||||||
// draw lines
|
// draw lines
|
||||||
for (i = 0; i < points.original.length; i++) {
|
for (i = 0; i < points.original.length; i++) {
|
||||||
connectionCount = 0
|
connectionCount = 0;
|
||||||
for (j = i + 1; j < points.original.length; j++) {
|
for (j = i + 1; j < points.original.length; j++) {
|
||||||
// TODO pick the N (connectionLimit) closest connections instead of the first N that occur sequentially.
|
// TODO pick the N (connectionLimit) closest connections instead of the first N that occur sequentially.
|
||||||
if (connectionCount >= connectionLimit) break
|
if (connectionCount >= connectionLimit) break;
|
||||||
dist = distance(points.tweened[i], points.tweened[j])
|
dist = distance(points.tweened[i], points.tweened[j]);
|
||||||
connectivity = dist / connectionDistance
|
connectivity = dist / connectionDistance;
|
||||||
if ((j !== i) && (dist <= connectionDistance)) {
|
if ((j !== i) && (dist <= connectionDistance)) {
|
||||||
// find average color of both points
|
// find average color of both points
|
||||||
if ((points.tweened[i][2] === counter) || (points.tweened[j][2] === counter)) {
|
if ((points.tweened[i][2] === counter) || (points.tweened[j][2] === counter)) {
|
||||||
// avgColor = shiftColor(avgColor, Math.round(colorShiftAmt * (1 - connectivity)));
|
// avgColor = shiftColor(avgColor, Math.round(colorShiftAmt * (1 - connectivity)));
|
||||||
points.tweened[i][3] = weightedAverageColor(points.tweened[i][3], points.tweened[j][3], connectivity)
|
points.tweened[i][3] = weightedAverageColor(points.tweened[i][3], points.tweened[j][3], connectivity);
|
||||||
points.tweened[j][3] = weightedAverageColor(points.tweened[j][3], points.tweened[i][3], connectivity)
|
points.tweened[j][3] = weightedAverageColor(points.tweened[j][3], points.tweened[i][3], connectivity);
|
||||||
}
|
}
|
||||||
avgColor = averageColor(points.tweened[i][3], points.tweened[j][3])
|
avgColor = averageColor(points.tweened[i][3], points.tweened[j][3]);
|
||||||
shadedColor = shadeColor(avgColor, connectivity)
|
shadedColor = shadeColor(avgColor, connectivity);
|
||||||
polygon.lineStyle(1, rgbToHex(shadedColor), 1)
|
polygon.lineStyle(1, rgbToHex(shadedColor), 1);
|
||||||
|
|
||||||
polygon.moveTo(points.tweened[i][0], points.tweened[i][1])
|
polygon.moveTo(points.tweened[i][0], points.tweened[i][1]);
|
||||||
polygon.lineTo(points.tweened[j][0], points.tweened[j][1])
|
polygon.lineTo(points.tweened[j][0], points.tweened[j][1]);
|
||||||
connectionCount = connectionCount + 1
|
connectionCount = connectionCount + 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (connectionCount === 0) {
|
if (connectionCount === 0) {
|
||||||
points.tweened[i][3] = shiftColor(points.tweened[i][3], disconnectedColorShiftAmt)
|
points.tweened[i][3] = shiftColor(points.tweened[i][3], disconnectedColorShiftAmt);
|
||||||
}
|
}
|
||||||
|
|
||||||
// draw vectors
|
// draw vectors
|
||||||
polygon.lineStyle(1, rgbToHex(points.tweened[i][3]), 1)
|
polygon.lineStyle(1, rgbToHex(points.tweened[i][3]), 1);
|
||||||
polygon.drawCircle(points.tweened[i][0], points.tweened[i][1], 1)
|
polygon.drawCircle(points.tweened[i][0], points.tweened[i][1], 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function loop () {
|
function loop () {
|
||||||
screenWidth = document.documentElement.clientWidth
|
screenWidth = document.documentElement.clientWidth;
|
||||||
screenHeight = document.documentElement.clientHeight
|
screenHeight = document.documentElement.clientHeight;
|
||||||
renderer.resize(screenWidth, screenHeight)
|
renderer.resize(screenWidth, screenHeight);
|
||||||
|
|
||||||
polygon.clear()
|
polygon.clear();
|
||||||
|
|
||||||
drawPolygon(polygon, polygonPoints, counter, tweeningFns)
|
drawPolygon(polygon, polygonPoints, counter, tweeningFns);
|
||||||
|
|
||||||
counter += 1
|
counter += 1;
|
||||||
counter = counter % cycleDuration
|
counter = counter % cycleDuration;
|
||||||
|
|
||||||
if (counter === 0 && fpsEnabled) {
|
if (counter === 0 && fpsEnabled) {
|
||||||
thisLoop = new Date()
|
thisLoop = new Date();
|
||||||
fps = Math.round((1000 / (thisLoop - lastLoop)) * cycleDuration)
|
fps = Math.round((1000 / (thisLoop - lastLoop)) * cycleDuration);
|
||||||
fpsGraphic.setText(fps.toString())
|
fpsGraphic.setText(fps.toString());
|
||||||
lastLoop = thisLoop
|
lastLoop = thisLoop;
|
||||||
}
|
}
|
||||||
|
|
||||||
polygonPoints = shiftPoints(polygonPoints, pointShiftDistance, counter, tweeningFns)
|
polygonPoints = shiftPoints(polygonPoints, pointShiftDistance, counter, tweeningFns);
|
||||||
|
|
||||||
// var mousePosition = renderer.plugins.interaction.mouse.global;
|
// var mousePosition = renderer.plugins.interaction.mouse.global;
|
||||||
// triangle.x = mousePosition.x;
|
// triangle.x = mousePosition.x;
|
||||||
@ -354,44 +356,44 @@ function loop () {
|
|||||||
|
|
||||||
// If user scrolled, modify cycleDuration by amount scrolled
|
// If user scrolled, modify cycleDuration by amount scrolled
|
||||||
if (scrollDelta !== 0) {
|
if (scrollDelta !== 0) {
|
||||||
cycleDuration = cycleDuration + scrollDelta
|
cycleDuration = cycleDuration + scrollDelta;
|
||||||
if (cycleDuration < 1) {
|
if (cycleDuration < 1) {
|
||||||
cycleDuration = 1
|
cycleDuration = 1;
|
||||||
}
|
}
|
||||||
scrollDelta = 0
|
scrollDelta = 0;
|
||||||
polygonPoints = redistributeCycles(polygonPoints)
|
polygonPoints = redistributeCycles(polygonPoints);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Tell the `renderer` to `render` the `stage`
|
// Tell the `renderer` to `render` the `stage`
|
||||||
renderer.render(stage)
|
renderer.render(stage);
|
||||||
requestAnimationFrame(loop)
|
window.requestAnimationFrame(loop);
|
||||||
}
|
}
|
||||||
|
|
||||||
function loopStart () {
|
function loopStart () {
|
||||||
screenWidth = document.documentElement.clientWidth
|
screenWidth = document.documentElement.clientWidth;
|
||||||
screenHeight = document.documentElement.clientHeight
|
screenHeight = document.documentElement.clientHeight;
|
||||||
// Create the renderer
|
// Create the renderer
|
||||||
renderer = PIXI.autoDetectRenderer(screenWidth, screenHeight, {antialias: true, resolution: 2})
|
renderer = window.PIXI.autoDetectRenderer(screenWidth, screenHeight, {antialias: true, resolution: 2});
|
||||||
|
|
||||||
// Add the canvas to the HTML document
|
// Add the canvas to the HTML document
|
||||||
document.body.appendChild(renderer.view)
|
document.body.appendChild(renderer.view);
|
||||||
|
|
||||||
// Create a container object called the `stage`
|
// Create a container object called the `stage`
|
||||||
stage = new PIXI.Container()
|
stage = new window.PIXI.Container();
|
||||||
|
|
||||||
renderer.view.style.position = 'absolute'
|
renderer.view.style.position = 'absolute';
|
||||||
renderer.view.style.display = 'block'
|
renderer.view.style.display = 'block';
|
||||||
renderer.autoResize = true
|
renderer.autoResize = true;
|
||||||
|
|
||||||
counter = 0
|
counter = 0;
|
||||||
totalScreenPixels = screenWidth + screenHeight
|
totalScreenPixels = screenWidth + screenHeight;
|
||||||
cycleDuration = 60
|
cycleDuration = 60;
|
||||||
connectionDistance = Math.min(Math.round(totalScreenPixels / 16), 75)
|
connectionDistance = Math.min(Math.round(totalScreenPixels / 16), 75);
|
||||||
connectionLimit = 10
|
connectionLimit = 10;
|
||||||
pointShiftDistance = Math.round(totalScreenPixels / 45)
|
pointShiftDistance = Math.round(totalScreenPixels / 45);
|
||||||
colorShiftAmt = 80
|
// colorShiftAmt = 80;
|
||||||
disconnectedColorShiftAmt = 10
|
disconnectedColorShiftAmt = 10;
|
||||||
polygon = new PIXI.Graphics()
|
polygon = new window.PIXI.Graphics();
|
||||||
tweeningFns = [
|
tweeningFns = [
|
||||||
linearTweening,
|
linearTweening,
|
||||||
easeInSine,
|
easeInSine,
|
||||||
@ -413,35 +415,35 @@ function loopStart () {
|
|||||||
// easeInCirc,
|
// easeInCirc,
|
||||||
// easeOutCirc,
|
// easeOutCirc,
|
||||||
// easeInOutCirc
|
// easeInOutCirc
|
||||||
]
|
];
|
||||||
startPoints = getRandomPoints(Math.round(totalScreenPixels / 6), screenWidth, screenHeight, tweeningFns)
|
startPoints = getRandomPoints(Math.round(totalScreenPixels / 6), screenWidth, screenHeight, tweeningFns);
|
||||||
polygonPoints = {
|
polygonPoints = {
|
||||||
original: startPoints,
|
original: startPoints,
|
||||||
target: JSON.parse(JSON.stringify(startPoints)),
|
target: JSON.parse(JSON.stringify(startPoints)),
|
||||||
tweened: JSON.parse(JSON.stringify(startPoints))
|
tweened: JSON.parse(JSON.stringify(startPoints))
|
||||||
}
|
};
|
||||||
stage.addChild(polygon)
|
stage.addChild(polygon);
|
||||||
|
|
||||||
fpsGraphic = new PIXI.Text('0', {font: '25px monospace', fill: 'yellow'})
|
fpsGraphic = new window.PIXI.Text('0', {font: '25px monospace', fill: 'yellow'});
|
||||||
fpsGraphic.x = 0
|
fpsGraphic.x = 0;
|
||||||
fpsGraphic.y = 0
|
fpsGraphic.y = 0;
|
||||||
|
|
||||||
if (fpsEnabled) {
|
if (fpsEnabled) {
|
||||||
stage.addChild(fpsGraphic)
|
stage.addChild(fpsGraphic);
|
||||||
}
|
}
|
||||||
|
|
||||||
lastLoop = new Date()
|
lastLoop = new Date();
|
||||||
|
|
||||||
scrollDelta = 0
|
scrollDelta = 0;
|
||||||
|
|
||||||
requestAnimationFrame(loop)
|
window.requestAnimationFrame(loop);
|
||||||
}
|
}
|
||||||
|
|
||||||
window.onload = loopStart
|
window.onload = loopStart;
|
||||||
|
|
||||||
window.addEventListener('mousewheel', function (e) {
|
window.addEventListener('mousewheel', function (e) {
|
||||||
scrollDelta = scrollDelta + ((e.deltaY / 100) * 3)
|
scrollDelta = scrollDelta + ((e.deltaY / 100) * 3);
|
||||||
})
|
});
|
||||||
|
|
||||||
// TODO: use jquery PEP to allow user to "pull" at a point elastically
|
// TODO: use jquery PEP to allow user to "pull" at a point elastically
|
||||||
// window.addEventListener('click', function(e) {
|
// window.addEventListener('click', function(e) {
|
||||||
@ -449,22 +451,22 @@ window.addEventListener('mousewheel', function (e) {
|
|||||||
|
|
||||||
window.addEventListener('keydown', function (e) {
|
window.addEventListener('keydown', function (e) {
|
||||||
if (e.keyCode === 37) { // left
|
if (e.keyCode === 37) { // left
|
||||||
pointShiftBiasX = -1
|
pointShiftBiasX = -1;
|
||||||
} else if (e.keyCode === 38) { // up
|
} else if (e.keyCode === 38) { // up
|
||||||
pointShiftBiasY = -1
|
pointShiftBiasY = -1;
|
||||||
} else if (e.keyCode === 39) { // right
|
} else if (e.keyCode === 39) { // right
|
||||||
pointShiftBiasX = 1
|
pointShiftBiasX = 1;
|
||||||
} else if (e.keyCode === 40) { // down
|
} else if (e.keyCode === 40) { // down
|
||||||
pointShiftBiasY = 1
|
pointShiftBiasY = 1;
|
||||||
} else if (e.keyCode === 70) { // f
|
} else if (e.keyCode === 70) { // f
|
||||||
// toggle fpsCounter
|
// toggle fpsCounter
|
||||||
if (fpsEnabled) {
|
if (fpsEnabled) {
|
||||||
stage.removeChild(fpsGraphic)
|
stage.removeChild(fpsGraphic);
|
||||||
fpsEnabled = false;
|
fpsEnabled = false;
|
||||||
} else {
|
} else {
|
||||||
stage.addChild(fpsGraphic)
|
stage.addChild(fpsGraphic);
|
||||||
fpsEnabled = true;
|
fpsEnabled = true;
|
||||||
lastLoop = new Date();
|
lastLoop = new Date();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user