Skip to content

Commit

Permalink
some refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
Armen138 committed Feb 15, 2013
1 parent 58f5148 commit fdbcafc
Show file tree
Hide file tree
Showing 9 changed files with 163 additions and 132 deletions.
Binary file added fonts/akashi.ttf
Binary file not shown.
Binary file added images/fire-bomb.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
35 changes: 35 additions & 0 deletions js/bullet.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
define(["ParticleSystem", "canvas", "effects"], function(PS, Canvas, effects) {
var bullet = function(position, enemies) {
var start = Date.now();
var speed = 0.7;
var dead = false;
var baseY = position.Y;
var baseX = position.X;
var trail = new PS.ParticleSystem(effects("bullet"));
var b = {
draw: function() {
trail.draw(Canvas.element, position.X, position.Y, 17);
position.Y = baseY - ((Date.now() - start) * speed);
//position.X = baseX - ((Date.now() - start) * speed);
if(position.Y < -10 && !dead) {
trail.kill();
dead = true;
}
for(var i = 0; i < enemies.length; i++) {
if((Math.abs(enemies[i].position.X - position.X) < 30) &&
(Math.abs(enemies[i].position.Y - position.Y) < 30)) {
enemies[i].die();
trail.kill();
dead = true;
}
}
if(trail.isDone()) {
return true;
}
return false;
}
};
return b;
};
return bullet;
});
12 changes: 12 additions & 0 deletions js/effects.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
define(function() {
return function(effect) {
switch(effect) {
case "bullet":
return {"emitterStartLocation":{"x":0,"y":0},"emitterStopLocation":{"x":0,"y":0},"systemLifeSpan":0,"particleSpawnArea":{"x":0,"y":0},"maxParticles":300,"averageLifeSpan":0.3,"lifeSpanVariance":0.1,"startColor":{"red":255,"green":167,"blue":63,"alpha":1},"stopColor":{"red":0,"green":0,"blue":0,"alpha":1},"averageVelocity":{"horizontal":0,"vertical":0},"velocityVariance":{"x":0.3,"y":0.3},"minParticleSize":2,"maxParticleSize":4,"particleFadeTime":0.6,"globalCompositeOperation":"lighter","renderType":"spriteSheet","type":"relative"};
break;
case "shield":
return {"emitterStartLocation":{"x":0,"y":0},"emitterStopLocation":{"x":0,"y":0},"systemLifeSpan":0,"particleSpawnArea":{"x":0,"y":0},"maxParticles":300,"averageLifeSpan":0.3,"lifeSpanVariance":0.1,"startColor":{"red":63,"green":167,"blue":255,"alpha":1},"stopColor":{"red":0,"green":0,"blue":0,"alpha":1},"averageVelocity":{"horizontal":0,"vertical":0},"velocityVariance":{"x":0.3,"y":0.3},"minParticleSize":2,"maxParticleSize":4,"particleFadeTime":0.6,"globalCompositeOperation":"lighter","renderType":"spriteSheet","type":"relative"};
break;
}
}
});
38 changes: 38 additions & 0 deletions js/enemy.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
define(["canvas", "events"], function(Canvas, events) {
var enemy = function(image, position) {
var start = Date.now();
var speed = 0.2;
var dead = false;
var hp = 10;
var startPosition = {X: position.X, Y: position.Y};
var e = {
position: position,
hit: function(damage) {
hp -= damage;
if(hp < 0) {
e.die();
}
},
die: function() {
dead = true;
e.fire("death");
},
draw: function() {
position.Y = startPosition.Y + ((Date.now() - start) * speed);
Canvas.context.save();
var angle = 90 * 0.0174532925;
Canvas.context.translate(position.X, position.Y);
Canvas.context.rotate(angle);
Canvas.context.drawImage(image, 264, 945, 22, 25, 0, 0, 22, 25);
Canvas.context.restore();
if(position.Y > Canvas.height || dead) {
return true;
}
return false;
}
}
events.attach(e);
return e;
};
return enemy;
});
4 changes: 2 additions & 2 deletions js/events.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@
eventList[ev].push(f);
return obj;
},
fire: function(ev, obj) {
fire: function(ev, evobj) {
if(eventList[ev]) {
for(var i = 0; i < eventList[ev].length; i++) {
if(eventList[ev][i](obj)) {
if(eventList[ev][i].call(obj, evobj)) {
return;
}
}
Expand Down
148 changes: 18 additions & 130 deletions js/game.js
Original file line number Diff line number Diff line change
@@ -1,22 +1,15 @@
define(["canvas", "resources", "keys", "menu", "raf", "ParticleSystem"], function(Canvas, Resources, keys, Menu, raf, PS) {
define(["canvas", "resources", "keys", "menu", "stars", "enemy", "effects", "bullet", "powerup", "raf", "ParticleSystem"], function(Canvas, Resources, keys, Menu, Stars, Enemy, effects, Bullet, Powerup, raf, PS) {
Canvas.size(window.innerWidth, window.innerHeight);
//Canvas.size(1080, 700);
//Canvas.element.style.width = "auto";
//Canvas.element.style.height = "100%";
var bulletPS = function() {
return {"emitterStartLocation":{"x":0,"y":0},"emitterStopLocation":{"x":0,"y":0},"systemLifeSpan":0,"particleSpawnArea":{"x":0,"y":0},"maxParticles":300,"averageLifeSpan":0.3,"lifeSpanVariance":0.1,"startColor":{"red":255,"green":167,"blue":63,"alpha":1},"stopColor":{"red":0,"green":0,"blue":0,"alpha":1},"averageVelocity":{"horizontal":0,"vertical":0},"velocityVariance":{"x":0.3,"y":0.3},"minParticleSize":2,"maxParticleSize":4,"particleFadeTime":0.6,"globalCompositeOperation":"lighter","renderType":"spriteSheet","type":"relative"};
};
var shieldPS = function() {
return {"emitterStartLocation":{"x":0,"y":0},"emitterStopLocation":{"x":0,"y":0},"systemLifeSpan":0,"particleSpawnArea":{"x":0,"y":0},"maxParticles":300,"averageLifeSpan":0.3,"lifeSpanVariance":0.1,"startColor":{"red":63,"green":167,"blue":255,"alpha":1},"stopColor":{"red":0,"green":0,"blue":0,"alpha":1},"averageVelocity":{"horizontal":0,"vertical":0},"velocityVariance":{"x":0.3,"y":0.3},"minParticleSize":2,"maxParticleSize":4,"particleFadeTime":0.6,"globalCompositeOperation":"lighter","renderType":"spriteSheet","type":"relative"};
}

Resources.on("load", function() {
console.log("loaded");
game.run();
console.log(Canvas.size());
});
Resources.load({
"ships": "images/spaceships_1.png",
"logo": "images/spacedefender.png"
"logo": "images/spacedefender.png",
"bomb": "images/fire-bomb.png"
});


Expand Down Expand Up @@ -56,103 +49,10 @@ define(["canvas", "resources", "keys", "menu", "raf", "ParticleSystem"], functio
}
], Resources.images.logo);

var stars = function() {
var starMap = [];
var maxStars = 100;
var maxLayers = 4;
for(var l = 0; l < maxLayers; l++) {
starMap[l] = [];
for(var i = 0; i < maxStars; i++) {
starMap[l].push({X: Math.random() * Canvas.width | 0,
Y: Math.random() * Canvas.height | 0});
}
}
var s = {
draw: function() {
for(var l = 0; l < starMap.length; l++) {
var shade = 200 / (l + 1);
Canvas.context.fillStyle = "rgb(" + shade + "," + shade + "," + shade + ")";
for(var i = 0; i < starMap[l].length; i++) {
Canvas.context.fillRect(starMap[l][i].X, starMap[l][i].Y, 2, 2);
starMap[l][i].Y += (1 / l);
if(starMap[l][i].Y > Canvas.height) {
starMap[l][i].Y -= Canvas.height;
}
}
}
}
}
return s;
}
var enemy = function(position) {
var start = Date.now();
var speed = 0.2;
var dead = false;
var hp = 10;
var startPosition = {X: position.X, Y: position.Y};
var e = {
position: position,
hit: function(damage) {
hp -= damage;
if(hp < 0) {
e.die();
}
},
die: function() {
dead = true;
},
draw: function() {
position.Y = startPosition.Y + ((Date.now() - start) * speed);
Canvas.context.save();
var angle = 90 * 0.0174532925;
Canvas.context.translate(position.X, position.Y);
Canvas.context.rotate(angle);
Canvas.context.drawImage(Resources.images.ships, 264, 945, 22, 25, 0, 0, 22, 25);
Canvas.context.restore();
if(position.Y > Canvas.height || dead) {
return true;
}
return false;
}
}
return e;
};

var bullet = function(position) {
var start = Date.now();
var speed = 0.7;
var dead = false;
var baseY = position.Y;
var baseX = position.X;
var trail = new PS.ParticleSystem(bulletPS());
var b = {
draw: function() {
trail.draw(Canvas.element, position.X, position.Y, 17);
position.Y = baseY - ((Date.now() - start) * speed);
//position.X = baseX - ((Date.now() - start) * speed);
if(position.Y < -10 && !dead) {
trail.kill();
dead = true;
}
for(var i = 0; i < enemies.length; i++) {
if((Math.abs(enemies[i].position.X - position.X) < 30) &&
(Math.abs(enemies[i].position.Y - position.Y) < 30)) {
enemies[i].die();
trail.kill();
dead = true;
}
}
if(trail.isDone()) {
return true;
}
return false;
}
};
return b;
};
var bullets = [];
var lastShot = 0;
var shield = new PS.ParticleSystem(shieldPS());
var shield = new PS.ParticleSystem(effects("shield"));
var shieldAngle = 0;
var lastShield = 0;
var ship = {
Expand Down Expand Up @@ -213,35 +113,14 @@ define(["canvas", "resources", "keys", "menu", "raf", "ParticleSystem"], functio
fire: function() {
if(Date.now() - lastShot > ship.loadTime) {
lastShot = Date.now();
bullets.push(bullet({X: ship.X + 11, Y: ship.Y - 25}));
bullets.push(Bullet({X: ship.X + 11, Y: ship.Y - 25}, enemies));
}
}
}
var down = {};
var enemies = [];
var starField = stars();
/*
var game = {
run: function() {
Canvas.clear("black");
starField.draw();
ship.draw();
for(var i = enemies.length - 1; i >= 0; --i) {
if(enemies[i].draw()) {
enemies.splice(i, 1);
}
}
setTimeout(game.run, 17);
},
controls: {
up: keys.UP,
down: keys.DOWN,
left: keys.LEFT,
right: keys.RIGHT,
fire: keys.SPACE
}
};*/

var powerups = [];
var starField = Stars(Canvas);
var play = {
init: function() {},
clear: function(cb) {
Expand All @@ -256,6 +135,11 @@ define(["canvas", "resources", "keys", "menu", "raf", "ParticleSystem"], functio
enemies.splice(i, 1);
}
}
for(var i = powerups.length - 1; i >= 0; --i) {
if(powerups[i].draw()) {
powerups.splice(i, 1);
}
}
},
controls: {
up: keys.UP,
Expand Down Expand Up @@ -295,7 +179,11 @@ define(["canvas", "resources", "keys", "menu", "raf", "ParticleSystem"], functio

game.state = home;
setInterval(function() {
enemies.push(enemy({X: Math.random() * Canvas.width | 0, Y: 0}));
var enemy = Enemy(Resources.images.ships, {X: Math.random() * Canvas.width | 0, Y: 0});
enemy.on("death", function() {
powerups.push(Powerup(Resources.images.bomb, function() { alert("boop"); }, this.position));
});
enemies.push(enemy);
}, 1000);

window.addEventListener("blur", function() {
Expand Down
27 changes: 27 additions & 0 deletions js/powerup.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
define(["canvas"], function(Canvas) {
var powerup = function(image, action, position) {
var start = Date.now();
var lastScale = 0;
var scaleTime = 50;
var scale = 0.5;
var inc = 0.1;
return {
draw: function() {
//scale = 0.5 + ((Date.now() - start) % 50 / 50);
if(Date.now() - lastScale > scaleTime) {
lastScale = Date.now();
scale += inc;
if(scale === 1.2 || scale === 0.4) {
inc *= -1;
}
}
Canvas.context.save();
Canvas.context.translate(position.X, position.Y);
Canvas.context.scale(scale, scale);
Canvas.context.drawImage(image, -1 * (image.width / 2) * scale, -1 * (image.height / 2) * scale);
Canvas.context.restore();
}
};
};
return powerup;
})
31 changes: 31 additions & 0 deletions js/stars.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
define(function() {
var stars = function(Canvas) {
var starMap = [];
var maxStars = 100;
var maxLayers = 4;
for(var l = 0; l < maxLayers; l++) {
starMap[l] = [];
for(var i = 0; i < maxStars; i++) {
starMap[l].push({X: Math.random() * Canvas.width | 0,
Y: Math.random() * Canvas.height | 0});
}
}
var s = {
draw: function() {
for(var l = 0; l < starMap.length; l++) {
var shade = 200 / (l + 1);
Canvas.context.fillStyle = "rgb(" + shade + "," + shade + "," + shade + ")";
for(var i = 0; i < starMap[l].length; i++) {
Canvas.context.fillRect(starMap[l][i].X, starMap[l][i].Y, 2, 2);
starMap[l][i].Y += (1 / l);
if(starMap[l][i].Y > Canvas.height) {
starMap[l][i].Y -= Canvas.height;
}
}
}
}
}
return s;
}
return stars;
});

0 comments on commit fdbcafc

Please sign in to comment.