UNPKG

cdf

Version:

A library for creating oldschool demo-like animations with JavaScript

171 lines (154 loc) 5.88 kB
(function (global) { var lib = global.cdf || {}; var starfield3D = lib.starfield3D = function(dest, nb, speed, w, h, centx, centy, color, ratio, offsetx, offsety) { this.dest = dest; this.test = true; this.n = nb || 300; this.star = new Array(this.n); this.w = typeof w !== 'Number' ? dest.w : w; this.h = typeof h !== 'Number' ? dest.h : h; this.x = 0; this.y = 0; this.z = 0; this.offsetx = offsetx || 0; this.offsety = offsety || 0; this.centx = centx; this.centy = centy; this.color = color || '#fff'; this.star_speed = speed || 1; this.star_ratio = ratio || 100; this.star_color_ratio = 0; this.x = Math.round(this.w / 2); this.y = Math.round(this.h / 2); this.z = (this.w + this.h) / 2; this.star_color_ratio = 1 / this.z; this.cursor_x = this.x; this.cursor_y = this.y; for (var i = 0; i < this.n; i++) { this.star[i] = [ Math.random() * this.w * 2 - this.x * 2, Math.random() * this.h * 2 - this.y * 2, Math.round(Math.random() * this.z), 0, 0 ]; } return this; } starfield3D.prototype.draw = function () { this.dest.ctx.save(); this.dest.ctx.globalAlpha = 1; this.dest.ctx.strokeStyle = this.color; for (var i = 0; i < this.n; i++) { this.test = true; this.star_x_save = this.star[i][3]; this.star_y_save = this.star[i][4]; this.star[i][0] += (this.centx - this.x) >> 4; if (this.star[i][0] > this.x << 1) { this.star[i][0] -= this.w << 1; this.test = false; } if (this.star[i][0] < -this.x << 1) { this.star[i][0] += this.w << 1; this.test = false; } this.star[i][1] += (this.centy - this.y) >> 4; if (this.star[i][1] > this.y << 1) { this.star[i][1] -= this.h << 1; this.test = false; } if (this.star[i][1] < -this.y << 1) { this.star[i][1] += this.h << 1; this.test = false; } this.star[i][2] -= this.star_speed; if (this.star[i][2] > this.z) { this.star[i][2] -= this.z; this.test = false; } if (this.star[i][2] < 0) { this.star[i][2] += this.z; this.test = false; } this.star[i][3] = this.x + (this.star[i][0] / this.star[i][2]) * this.star_ratio; this.star[i][4] = this.y + (this.star[i][1] / this.star[i][2]) * this.star_ratio; if (this.star_x_save > 0 && this.star_x_save < this.w && this.star_y_save > 0 && this.star_y_save < this.h && this.test) { this.dest.ctx.lineWidth = (1 - this.star_color_ratio * this.star[i][2]) * 2; this.dest.ctx.beginPath(); this.dest.ctx.moveTo(this.star_x_save + this.offsetx, this.star_y_save + this.offsety); this.dest.ctx.lineTo(this.star[i][3] + this.offsetx, this.star[i][4] + this.offsety); this.dest.ctx.stroke(); this.dest.ctx.closePath(); } } this.dest.ctx.restore(); } var Starfield3D = lib.Starfield3D = function(star_number){ this.star_number = star_number; } Starfield3D.prototype = { __calculateNewPositions:function(){ }, draw:function(target_canvas, x, y, w, h){ } } var starfield2D_dot = lib.starfield2D_dot = function(dst, params) { this.dst = dst; this.stars = new Array(); var t = 0; for (var i = 0; i < params.length; i++) { for (var j = 0; j < params[i].nb; j++) { this.stars[t] = { x: Math.random() * this.dst.canvas.width, y: Math.random() * this.dst.canvas.height, speedx: params[i].speedx, speedy: params[i].speedy, color: params[i].color, size: params[i].size }; t++; } } this.draw = function () { for (var i = 0; i < this.stars.length; i++) { this.dst.plot(this.stars[i].x, this.stars[i].y, this.stars[i].size, this.stars[i].color); this.stars[i].x += this.stars[i].speedx; this.stars[i].y += this.stars[i].speedy; if (this.stars[i].x > this.dst.canvas.width) this.stars[i].x = 0; if (this.stars[i].x < 0) this.stars[i].x = this.dst.canvas.width; if (this.stars[i].y > this.dst.canvas.height) this.stars[i].y = 0; if (this.stars[i].y < 0) this.stars[i].y = this.dst.canvas.height; } } }; var starfield2D_img = lib.starfield2D_img = function(dst, img, params) { this.dst = dst; this.stars = new Array(); this.img = img; var t = 0; for (var i = 0; i < params.length; i++) { for (var j = 0; j < params[i].nb; j++) { this.stars[t] = { x: Math.random() * this.dst.canvas.width, y: Math.random() * this.dst.canvas.height, speedx: params[i].speedx, speedy: params[i].speedy, params: params[i].params }; t++; } } this.draw = function () { for (var i = 0; i < this.stars.length; i++) { this.dst.ctx.drawImage(this.img[this.stars[i].params].img, this.stars[i].x, this.stars[i].y); this.stars[i].x += this.stars[i].speedx; this.stars[i].y += this.stars[i].speedy; if (this.stars[i].x > this.dst.canvas.width) this.stars[i].x = 0 - this.img[this.stars[i].params].img.width; if (this.stars[i].x < 0 - this.img[this.stars[i].params].img.width) this.stars[i].x = this.dst.canvas.width; if (this.stars[i].y > this.dst.canvas.height) this.stars[i].y = 0 - this.img[this.stars[i].params].img.height; if (this.stars[i].y < 0 - this.img[this.stars[i].params].img.height) this.stars[i].y = this.dst.canvas.height; } } }; if(typeof module!=='undefined'&& module.exports){module.exports=lib;}else{global.cdf=lib;} })(window);