Toggle navigation
Sign Up
Log In
Explore
Works
Folders
Tools
Collections
Artists
Groups
Groups
Topics
Tasks
Tasks
Jobs
Teams
Jobs
Recommendation
More Effects...
JS
var canvas = hexCanvas, w, h, ctx, hexGrid, rows, cols; var nextT = 0, fadeT = 0, hue = 0; var count = 0; var watchList = []; var c = createjs; var radius = 12; function init() { nextT = 0, fadeT = 0, hue = 0; count = 0; watchList = []; w = canvas.width = window.innerWidth; h = canvas.height = window.innerHeight; ctx = canvas.getContext("2d"); hexGrid = buildGrid(w, h, radius); } function drawHex(ctx, x, y, fill) { var r = radius + 0.01; ctx.beginPath(); var p = Math.PI / 6 * 2; for (var i = 0; i < 6; i++) { var x1 = x + Math.cos(p * i) * r, y1 = y + Math.sin(p * i) * r; if (i == 0) { ctx.moveTo(x1, y1); } else { ctx.lineTo(x1, y1); } } ctx.closePath(); ctx.fillStyle = fill; ctx.fill(); return ctx; } function buildGrid(w, h, r) { var rowh = r * Math.sin(Math.PI / 3); var colW = r * 2 * 1.5; rows = Math.ceil(h / rowh) + 1; cols = Math.ceil(w / colW) + 1; var grid = []; for (var row = 0; row < rows; row++) { var y = row * rowh; for (var col = 0; col < cols; col++) { var x = col * colW + (row % 2) * colW / 2; var hex = {col: col, row: row, tol: 1 + Rnd.float(2), pot: 0}; hex.color = c.Graphics.getHSL(Rnd.float(198, 204), 20, Rnd.float(75, 80), Rnd.float(0.01, 0.03)); hex.x = x; hex.y = y; grid.push(hex); } } // neighbors: for (var i = 0, l = grid.length; i < l; i++) { hex = grid[i]; var off = hex.row % 2; var col = hex.col; hex.neighbors = [ grid[i - cols * 2], col + off < cols ? grid[i - cols + off] : null, col + off < cols ? grid[i + cols + off] : null, grid[i + cols * 2], col + off > 0 ? grid[i + cols - 1 + off] : null, col + off > 0 ? grid[i - cols - 1 + off] : null ]; } return grid; } function drawGrid(ctx, grid) { for (var i = 0, l = grid.length; i < l; i++) { var hex = grid[i]; if (!hex.clean) { drawHex(ctx, hex.x, hex.y, hex.color); hex.clean = true; } } } function tick(evt) { var delta = evt.delta, grid = hexGrid; var t = getTime(); for (var i = watchList.length - 1; i >= 0; i--) { var hex = watchList[i]; if (hex.t < t) { watchList.splice(i, 1); trigger(hex, t); } } if (fadeT < t) { ctx.globalCompositeOperation = "destination-in"; ctx.fillStyle = c.Graphics.getHSL(0, 0, 100, 0.94); ctx.fillRect(0, 0, w, h); ctx.globalCompositeOperation = "lighter"; //"source-over"; fadeT = t + 100; } if (t > nextT) { hex = hexGrid[Rnd.integer(cols) - cols + cols * rows]; // hex.t = getTime() + Rnd.float(100, 200); hex.from = 3;//Rnd.integer(6); hex.hue = Rnd.float(-35, 50) * 0.3 + 0; hex.lm = 0.7; hex.chance = 1.2; watchList.push(hex); nextT = getTime() + 250; } drawGrid(ctx, hexGrid); } function trigger(hex, t) { hex.t = t + 1800; hex.color = c.Graphics.getHSL(hex.hue, 50, 100, Rnd.float(0.8, 1) * (1 - hex.row / rows) * hex.lm); hex.clean = false; var chance = hex.chance; while (Rnd.boolean(chance)) { var dir = (hex.from + 3 + Rnd.bit(0.5) * Rnd.sign() + 6) % 6; var neighbor = hex.neighbors[dir]; chance *= 0.4; if (!neighbor || neighbor.t > t) { continue; } neighbor.t = t + Rnd.float(20, 40); neighbor.from = (dir + 3) % 6; neighbor.chance = hex.chance * 0.996; neighbor.hue = hex.hue + Rnd.float(-3, 3) + (dir - 3) * 0; neighbor.lm = hex.lm; watchList.push(neighbor); } } function getTime() { return (new Date()).getTime(); } init(); window.addEventListener("resize", init); c.Ticker.timingMode = c.Ticker.RAF; c.Ticker.on("tick", tick, this);
CSS
html, body { margin:0px; padding:0px; background-color:#ffd214; font-family:sans-serif; font-size:16px; overflow:hidden; } code { font-family: monospace, serif; font-size: 1em; color:#FFFFFF } h1 { font-family:sans-serif; color:#FFFFFF } #logo { position: absolute; right:15px; bottom:0px; } p { color:#aeb7c0; } canvas { background-color:#ffd214; }
HTML
Join Effecthub.com
Working with Global Gaming Artists and Developers!
Login
Sign Up
Or Login with Your Email Address:
Email
Password
Remember
Or Sign Up with Your Email Address:
Your Email
This field must contain a valid email
Set Password
Password should be at least 1 character
Stay informed via email