Skip to content

Commit 29f3976

Browse files
committed
Removing pixel lookup on landed canvas
1 parent 09ec33a commit 29f3976

File tree

1 file changed

+29
-3
lines changed

1 file changed

+29
-3
lines changed

www/static/js/snow.js

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434

3535
(function() {
3636
var canvas = document.createElement('canvas');
37-
var context = canvas.getContext && canvas.getContext('2d');
37+
var context = canvas.getContext('2d');
3838
var settleCanvas = document.createElement('canvas');
3939
var settleContext = context && settleCanvas.getContext('2d');
4040
var canvasStyle = canvas.style;
@@ -44,11 +44,33 @@
4444
var snowflakesPerPixelPerSecond = 0.02;
4545
var PIx2 = Math.PI*2;
4646
var assumedFps = 60;
47-
47+
var settlePoint;
48+
4849
function resizeCanvas() {
50+
settlePoint = Array(html.clientWidth);
4951
settleCanvas.width = canvas.width = html.clientWidth;
5052
settleCanvas.height = canvas.height = html.clientHeight;
5153
}
54+
55+
function updateSettlePoints(flake) {
56+
var size = flake.size * 0.8; // reduce coral effect
57+
var xStart = Math.floor(flake.x - size);
58+
var range = size * 2;
59+
var newY;
60+
61+
if (xStart < 0) {
62+
range += xStart;
63+
xStart = 0;
64+
}
65+
else if (xStart + range > settlePoint.length) {
66+
range -= xStart + range - settlePoint.length;
67+
}
68+
69+
for (var i = 0; i < range; i++) {
70+
newY = flake.y - (size * Math.cos( (i/range) * Math.PI - (Math.PI/2) ));
71+
settlePoint[i + xStart] = Math.min(settlePoint[i + xStart] || Infinity, newY);
72+
}
73+
}
5274

5375
var flakesToCreate = 0;
5476
function frame() {
@@ -79,8 +101,12 @@
79101
flake.tick();
80102

81103
// splice flake if it's now out of rendering zone
82-
if (flake.y > canvas.height || settleContext.getImageData(flake.x, flake.y, 1, 1).data[3] > 200) {
104+
if (flake.y >= canvas.height || flake.y >= settlePoint[Math.floor(flake.x)]) {
83105
activeFlakes.splice(i, 1);
106+
// this flake effects our settle points
107+
if (flake.alpha > 0.8) {
108+
updateSettlePoints(flake);
109+
}
84110
settleContext.fillStyle='rgba(255, 255, 255, ' + flake.alpha + ')';
85111
settleContext.beginPath();
86112
settleContext.arc(flake.x, flake.y, flake.size, 0, PIx2, true);

0 commit comments

Comments
 (0)