cdf
Version:
A library for creating oldschool demo-like animations with JavaScript
171 lines (154 loc) • 5.88 kB
JavaScript
(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);