Asteroids/scripts/asteroids.js
Tyler Williamson 43c64d4e61 Initial Commit
2018-03-23 17:26:30 -04:00

147 lines
4.1 KiB
JavaScript

/**
*
*/
var Main = {};
Main.asteroids = new Array();
Main.bullets = new Array();
Main.ship = new Ship();
Main.c;
Main.ctx;
Main.flag = new Array(false,false,false,false,0);
Main.alive = true;
Main.score = 0;
Main.init = function () {
c = document.getElementById("canvas");
Main.ctx = c.getContext("2d");
Main.ctx.strokeStyle="#FFFFFF";
window.addEventListener("keydown", Main.doMouseDown, false);
window.addEventListener("keyup", Main.doMouseUp, false); //TODO: change to canvas
window.requestAnimationFrame(Main.doFrameEvents);
};
Main.doMouseDown = function (event) {
switch (event.keyCode) {
case 38: Main.flag[0] = true; break; //Up
case 37: Main.flag[1] = true; break; //Left
case 39: Main.flag[2] = true; break; //Right
case 32: Main.flag[3] = true; break; //Space
}
}
Main.doMouseUp = function (event) { //TODO: rename
switch (event.keyCode) {
case 38: Main.flag[0] = false; break; //Up
case 37: Main.flag[1] = false; break; //Left
case 39: Main.flag[2] = false; break; //Right
case 32: Main.flag[3] = false; break; //Space
}
}
Main.doFrameEvents = function () { //TODO: name it better
Main.newLevel();
Main.move();
Main.checkCollisions();
Main.animate();
window.requestAnimationFrame(Main.doFrameEvents);
}
Main.newLevel = function () {
if (Main.asteroids.length == 0) {
Main.asteroids = new Array(
new Asteroid(50,50,2,Math.random() * Math.PI * 2),
new Asteroid(50,250,2,Math.random() * Math.PI * 2),
new Asteroid(50,450,2,Math.random() * Math.PI * 2),
new Asteroid(50,50,2,Math.random() * Math.PI * 2),
new Asteroid(250,50,2,Math.random() * Math.PI * 2),
new Asteroid(450,50,2,Math.random() * Math.PI * 2)
);
}
//TODO: this.
}
Main.checkCollisions = function () {
for (var i=0;i<Main.asteroids.length;i++) {
for (var ii=0;ii<Main.bullets.length;ii++) {
if (Main.asteroids[i].isCollision(Main.bullets[ii].x,Main.bullets[ii].y)) {
Main.score += (3 - Main.asteroids[i].size) * 250;
if (Main.asteroids[i].size > 0) {
angle = Math.random() * Math.PI * 2;
Main.asteroids.push(new Asteroid(Main.asteroids[i].x,Main.asteroids[i].y,Main.asteroids[i].size-1,angle));
Main.asteroids.push(new Asteroid(Main.asteroids[i].x,Main.asteroids[i].y,Main.asteroids[i].size-1,angle + Math.PI / 2));
}
Main.asteroids.splice(i,1);
Main.bullets.splice(ii,1);
break;
}
}
}
for (var i=0;i<Main.asteroids.length;i++) {
if (Main.ship.isCollision(Main.asteroids[i].x,Main.asteroids[i].y,Main.asteroids[i].radius)) {
//if (Main.asteroids[i].isCollision(Main.ship.x,Main.ship.y)) {
if (Main.asteroids[i].size > 0) {
angle = Math.random() * Math.PI * 2;
Main.asteroids.push(new Asteroid(Main.asteroids[i].x,Main.asteroids[i].y,Main.asteroids[i].size-1,angle));
Main.asteroids.push(new Asteroid(Main.asteroids[i].x,Main.asteroids[i].y,Main.asteroids[i].size-1,angle + Math.PI / 2));
}
Main.asteroids.splice(i,1);
Main.alive = false;
Main.ship.hide();
}
}
}
Main.move = function () {
if (Main.alive) {
if (Main.flag[4] == 15 || Main.flag[4] == 0)
Main.flag[4] = 0;
else
Main.flag[4]++;
if (Main.flag[0]) Main.ship.accelerate();
if (Main.flag[1]) Main.ship.turn(false);
if (Main.flag[2]) Main.ship.turn(true);
if (Main.flag[3] && Main.flag[4]==0) {
Main.bullets.push(new Bullet(Main.ship.x + 15 * Math.cos(Main.ship.angle),Main.ship.y + 15 * Math.sin(Main.ship.angle),Main.ship.angle));
Main.flag[4] = 1;
}
}
for (var i=0;i<Main.asteroids.length;i++)
Main.asteroids[i].move();
for (var i=0;i<Main.bullets.length;i++) {
Main.bullets[i].move();
if (Main.bullets[i].flag) {Main.bullets.splice(i,1);}
}
}
Main.animate = function () {
Main.ctx.clearRect(0, 0, c.width, c.height);
if (Main.alive) Main.ship.moveAndDraw(Main.ctx);
for (var i=0;i<Main.asteroids.length;i++)
Main.asteroids[i].draw(Main.ctx);
for (var i=0;i<Main.bullets.length;i++) {
Main.bullets[i].draw(Main.ctx);
if (Main.bullets[i].flag) {Main.bullets.splice(i,1);}
}
Main.ctx.font = "30px Lucida Console";
var count = 10 - Math.log10(Main.score+1);
var s = "";
for (var i=0;i<count;i++) s+="0";
Main.ctx.strokeText(s+Main.score,0,50);
}
window.onload = Main.init;