Adding ADR to Github

This commit is contained in:
Michael Townsend
2013-07-03 07:56:13 -07:00
parent 9616c79816
commit 19abccfcc4
36 changed files with 9668 additions and 0 deletions
+453
View File
@@ -0,0 +1,453 @@
/**
* Module that registers spaaaaaaaaace!
*/
var Space = {
SHIP_SPEED: 3,
BASE_ASTEROID_DELAY: 500,
BASE_ASTEROID_SPEED: 1500,
FTB_SPEED: 60000,
STAR_WIDTH: 3000,
STAR_HEIGHT: 3000,
NUM_STARS: 200,
STAR_SPEED: 60000,
FRAME_DELAY: 100,
stars: null,
backStars: null,
ship: null,
lastMove: null,
done: false,
shipX: null,
shipY: null,
hull: 0,
name: "Space",
init: function(options) {
this.options = $.extend(
this.options,
options
);
// Create the Space panel
this.panel = $('<div>').attr('id', "spacePanel")
.addClass('location')
.appendTo('#outerSlider');
// Create the ship
Space.ship = $('<div>').text("@").attr('id', 'ship').appendTo(this.panel);
// Create the hull display
var h = $('<div>').attr('id', 'hullRemaining').appendTo(this.panel);
$('<div>').addClass('row_key').text('hull: ').appendTo(h);
$('<div>').addClass('row_val').appendTo(h);
},
options: {}, // Nothing for now
onArrival: function() {
Space.done = false;
Engine.keyLock = false;
Space.hull = Ship.getMaxHull();
Space.altitude = 0;
Space.setTitle();
Space.updateHull();
Space.up =
Space.down =
Space.left =
Space.right = false;
Space.ship.css({
top: '350px',
left: '350px'
});
Space.startAscent();
Space._shipTimer = setInterval(Space.moveShip, 33);
},
setTitle: function() {
if(Engine.activeModule == this) {
var t;
if(Space.altitude < 10) {
t = "Troposphere";
} else if(Space.altitude < 20) {
t = "Stratosphere";
} else if(Space.altitude < 30) {
t = "Mesosphere";
} else if(Space.altitude < 45) {
t = "Thermosphere";
} else if(Space.altitude < 60){
t = "Exosphere";
} else {
t = "Space";
}
document.title = t;
}
},
getSpeed: function() {
return Space.SHIP_SPEED + State.ship.thrusters;
},
updateHull: function() {
$('div#hullRemaining div.row_val', Space.panel).text(Space.hull + '/' + Ship.getMaxHull());
},
createAsteroid: function(noNext) {
var r = Math.random();
var c;
if(r < 0.2)
c = '#';
else if(r < 0.4)
c = '$'
else if(r < 0.6)
c = '%';
else if(r < 0.8)
c = '&';
else
c = 'H';
var x = Math.floor(Math.random() * 700);
var a = $('<div>').addClass('asteroid').text(c).appendTo('#spacePanel').css('left', x + 'px')
a.data({
xMin: x,
xMax: x + a.width(),
height: a.height()
});
a.animate({
top: '740px'
}, {
duration: Space.BASE_ASTEROID_SPEED - Math.floor(Math.random() * (Space.BASE_ASTEROID_SPEED * 0.65)),
easing: 'linear',
progress: function() {
// Collision detection
var t = $(this);
if(t.data('xMin') <= Space.shipX && t.data('xMax') >= Space.shipX) {
var aY = t.css('top');
aY = parseFloat(aY.substring(0, aY.length - 2));
if(aY <= Space.shipY && aY + t.data('height') >= Space.shipY) {
// Collision
Engine.log('collision');
t.remove();
Space.hull--;
Space.updateHull();
if(Space.hull == 0) {
Space.crash();
}
}
}
},
complete: function() {
$(this).remove();
}
});
if(!noNext) {
// Harder
if(Space.altitude > 10) {
Space.createAsteroid(true);
}
// HARDER
if(Space.altitude > 20) {
Space.createAsteroid(true);
Space.createAsteroid(true);
}
// HAAAAAARDERRRRR!!!!1
if(Space.altitude > 40) {
Space.createAsteroid(true);
Space.createAsteroid(true);
}
if(!Space.done) {
setTimeout(Space.createAsteroid, 1000 - (Space.altitude * 10));
}
}
},
moveShip: function() {
var x = Space.ship.css('left');
x = parseFloat(x.substring(0, x.length - 2));
var y = Space.ship.css('top');
y = parseFloat(y.substring(0, y.length - 2));
var dx = 0, dy = 0;
if(Space.up) {
dy -= Space.getSpeed();
} else if(Space.down) {
dy += Space.getSpeed();
}
if(Space.left) {
dx -= Space.getSpeed();
} else if(Space.right) {
dx += Space.getSpeed();
}
if(dx != 0 && dy != 0) {
dx = dx / Math.sqrt(2);
dy = dy / Math.sqrt(2);
}
if(Space.lastMove != null) {
var dt = Date.now() - Space.lastMove;
dx *= dt / 33;
dy *= dt / 33;
}
x = x + dx;
y = y + dy;
if(x < 10) {
x = 10;
} else if(x > 690) {
x = 690;
}
if(y < 10) {
y = 10;
} else if(y > 690) {
y = 690;
}
Space.shipX = x;
Space.shipY = y;
Space.ship.css({
left: x + 'px',
top: y + 'px',
});
Space.lastMove = Date.now();
},
startAscent: function() {
$('body').addClass('noMask').css({backgroundColor: '#FFFFFF'}).animate({
backgroundColor: '#000000'
}, {
duration: Space.FTB_SPEED,
easing: 'linear',
progress: function() {
var cur = $('body').css('background-color');
var s = 'linear-gradient(rgba' + cur.substring(3, cur.length - 1) + ', 0) 0%, rgba' +
cur.substring(3, cur.length - 1) + ', 1) 100%)';
$('#notifyGradient').attr('style', 'background-color:'+cur+';background:-webkit-' + s + ';background:' + s);
},
complete: Space.endGame
});
Space.drawStars();
Space._timer = setInterval(function() {
Space.altitude += 1;
if(Space.altitude % 10 == 0) {
Space.setTitle();
}
if(Space.altitude > 60) {
clearInterval(Space._timer);
}
}, 1000);
setTimeout(function() {
$('#spacePanel, .deleteSave, .share').animate({color: 'white'}, 500, 'linear');
}, Space.FTB_SPEED / 2);
Space.createAsteroid();
},
drawStars: function(duration) {
var starsContainer = $('<div>').attr('id', 'starsContainer').appendTo('body');
Space.stars = $('<div>').css('bottom', '0px').attr('id', 'stars').appendTo(starsContainer);
var s1 = $('<div>').css({
width: Space.STAR_WIDTH + 'px',
height: Space.STAR_HEIGHT + 'px'
});
var s2 = s1.clone();
Space.stars.append(s1).append(s2);
Space.drawStarAsync(s1, s2, 0);
Space.stars.data('speed', Space.STAR_SPEED);
Space.startAnimation(Space.stars);
Space.starsBack = $('<div>').css('bottom', '0px').attr('id', 'starsBack').appendTo(starsContainer);
s1 = $('<div>').css({
width: Space.STAR_WIDTH + 'px',
height: Space.STAR_HEIGHT + 'px'
});
s2 = s1.clone();
Space.starsBack.append(s1).append(s2);
Space.drawStarAsync(s1, s2, 0);
Space.starsBack.data('speed', Space.STAR_SPEED * 2);
Space.startAnimation(Space.starsBack);
},
startAnimation: function(el) {
el.animate({bottom: '-3000px'}, el.data('speed'), 'linear', function() {
$(this).css('bottom', '0px');
Space.startAnimation($(this));
});
},
drawStarAsync: function(el, el2, num) {
var top = Math.floor(Math.random() * Space.STAR_HEIGHT) + 'px';
var left = Math.floor(Math.random() * Space.STAR_WIDTH) + 'px';
$('<div>').text('.').addClass('star').css({
top: top,
left: left
}).appendTo(el);
$('<div>').text('.').addClass('star').css({
top: top,
left: left
}).appendTo(el2);
if(num < Space.NUM_STARS) {
setTimeout(function() { Space.drawStarAsync(el, el2, num + 1); }, 100);
}
},
crash: function() {
if(Space.done) return;
Engine.keyLock = true;
Space.done = true;
clearInterval(Space._timer);
clearInterval(Space._shipTimer);
// Craaaaash!
$('body').removeClass('noMask').stop().animate({
backgroundColor: '#FFFFFF'
}, {
duration: 300,
progress: function() {
var cur = $('body').css('background-color');
var s = 'linear-gradient(rgba' + cur.substring(3, cur.length - 1) + ', 0) 0%, rgba' +
cur.substring(3, cur.length - 1) + ', 1) 100%)';
$('#notifyGradient').attr('style', 'background-color:'+cur+';background:-webkit-' + s + ';background:' + s);
},
complete: function() {
Space.stars.remove();
Space.starsBack.remove();
Space.stars = Space.starsBack = null;
$('#starsContainer').remove();
}
});
$('#spacePanel, .deleteSave, .share').animate({color: 'black'}, 300, 'linear');
$('#outerSlider').animate({top: '0px'}, 300, 'linear');
Engine.activeModule = Ship;
Ship.onArrival();
Button.cooldown($('#liftoffButton'));
Engine.event('progress', 'crash');
},
endGame: function() {
if(Space.done) return;
Engine.event('progress', 'win');
Space.done = true;
clearInterval(Space._timer);
clearInterval(Space._shipTimer);
clearTimeout(Engine._saveTimer);
clearTimeout(Outside._popTimeout);
clearTimeout(Engine._incomeTimeout);
clearTimeout(Events._eventTimeout);
clearTimeout(Room._fireTimer);
clearTimeout(Room._tempTimer);
for(var k in Room.Craftables) {
Room.Craftables[k].button = null;
}
for(var k in Room.TradeGoods) {
Room.TradeGoods[k].button = null;
}
delete Outside._popTimeout;
$('#hullRemaining', Space.panel).animate({opacity: 0}, 500, 'linear');
Space.ship.animate({
top: '350px',
left: '240px'
}, 3000, 'linear', function() {
setTimeout(function() {
Space.ship.animate({
top: '-100px'
}, 200, 'linear', function() {
// Restart everything! Play FOREVER!
$('#outerSlider').css({'left': '0px', 'top': '0px'});
$('#locationSlider, #worldPanel, #spacePanel, #notifications').remove();
$('#header').empty();
setTimeout(function() {
$('body').removeClass('noMask').stop().animate({
opacity: 0,
'background-color': '#FFF'
}, {
duration: 2000,
progress: function() {
var cur = $('body').css('background-color');
var s = 'linear-gradient(rgba' + cur.substring(3, cur.length - 1) + ', 0) 0%, rgba' +
cur.substring(3, cur.length - 1) + ', 1) 100%)';
$('#notifyGradient').attr('style', 'background-color:'+cur+';background:-webkit-' + s + ';background:' + s);
},
complete: function() {
$('#starsContainer, .deleteSave, .share').remove();
if(typeof Storage != 'undefined' && localStorage) {
localStorage.clear();
}
delete window.State;
Engine.options = {};
setTimeout(function() {
Engine.init();
$('body').animate({
opacity: 1
}, 500, 'linear');
}, 2000);
}
});
}, 2000);
});
}, 2000);
});
},
keyDown: function(event) {
switch(event.which) {
case 38: // Up
case 87:
Space.up = true;
Engine.log('up on');
break;
case 40: // Down
case 83:
Space.down = true;
Engine.log('down on');
break;
case 37: // Left
case 65:
Space.left = true;
Engine.log('left on');
break;
case 39: // Right
case 68:
Space.right = true;
Engine.log('right on');
break;
}
},
keyUp: function(event) {
switch(event.which) {
case 38: // Up
case 87:
Space.up = false;
Engine.log('up off');
break;
case 40: // Down
case 83:
Space.down = false;
Engine.log('down off');
break;
case 37: // Left
case 65:
Space.left = false;
Engine.log('left off');
break;
case 39: // Right
case 68:
Space.right = false;
Engine.log('right off');
break;
}
}
};