mirror of
https://github.com/doublespeakgames/adarkroom.git
synced 2026-05-28 00:01:54 +08:00
2018ca3ae8
add $.Dispatch to handle object events add subscribe calls to files update SM fireUpdate to use new Dispatch There are some NaN issues right now, no time to bug hunt right now, it does kind of function though
175 lines
4.6 KiB
JavaScript
175 lines
4.6 KiB
JavaScript
/**
|
|
* Module that registers the starship!
|
|
*/
|
|
var Ship = {
|
|
LIFTOFF_COOLDOWN: 120,
|
|
ALLOY_PER_HULL: 1,
|
|
ALLOY_PER_THRUSTER: 1,
|
|
BASE_HULL: 0,
|
|
BASE_THRUSTERS: 1,
|
|
|
|
name: "Ship",
|
|
init: function(options) {
|
|
this.options = $.extend(
|
|
this.options,
|
|
options
|
|
);
|
|
|
|
if(!$SM.get('features.location.spaceShip')) {
|
|
$SM.set('features.location.spaceShip');
|
|
$SM.setM('game.spaceShip', {
|
|
hull: Ship.BASE_HULL,
|
|
thrusters: Ship.BASE_THRUSTERS
|
|
});
|
|
}
|
|
|
|
// Create the Ship tab
|
|
this.tab = Header.addLocation("An Old Starship", "ship", Ship);
|
|
|
|
// Create the Ship panel
|
|
this.panel = $('<div>').attr('id', "shipPanel")
|
|
.addClass('location')
|
|
.appendTo('div#locationSlider');
|
|
|
|
Engine.updateSlider();
|
|
|
|
// Draw the hull label
|
|
var hullRow = $('<div>').attr('id', 'hullRow').appendTo('div#shipPanel');
|
|
$('<div>').addClass('row_key').text('hull:').appendTo(hullRow);
|
|
$('<div>').addClass('row_val').text($SM.get('game.spaceShip.hull')).appendTo(hullRow);
|
|
$('<div>').addClass('clear').appendTo(hullRow);
|
|
|
|
// Draw the thrusters label
|
|
var engineRow = $('<div>').attr('id', 'engineRow').appendTo('div#shipPanel');
|
|
$('<div>').addClass('row_key').text('engine:').appendTo(engineRow);
|
|
$('<div>').addClass('row_val').text($SM.get('game.spaceShip.thrusters')).appendTo(engineRow);
|
|
$('<div>').addClass('clear').appendTo(engineRow);
|
|
|
|
// Draw the reinforce button
|
|
new Button.Button({
|
|
id: 'reinforceButton',
|
|
text: 'reinforce hull',
|
|
click: Ship.reinforceHull,
|
|
width: '100px',
|
|
cost: {'alien alloy': Ship.ALLOY_PER_HULL}
|
|
}).appendTo('div#shipPanel');
|
|
|
|
// Draw the engine button
|
|
new Button.Button({
|
|
id: 'engineButton',
|
|
text: 'upgrade engine',
|
|
click: Ship.upgradeEngine,
|
|
width: '100px',
|
|
cost: {'alien alloy': Ship.ALLOY_PER_THRUSTER}
|
|
}).appendTo('div#shipPanel');
|
|
|
|
// Draw the lift off button
|
|
var b = new Button.Button({
|
|
id: 'liftoffButton',
|
|
text: 'lift off',
|
|
click: Ship.checkLiftOff,
|
|
width: '100px',
|
|
cooldown: Ship.LIFTOFF_COOLDOWN
|
|
}).appendTo('div#shipPanel');
|
|
|
|
if($SM.get('game.spaceShip.hull') <= 0) {
|
|
Button.setDisabled(b, true);
|
|
}
|
|
|
|
// Init Space
|
|
Space.init();
|
|
|
|
//subscribe to stateUpdates
|
|
$.Dispatch('stateUpdate').subscribe(Ship.handleStateUpdates);
|
|
},
|
|
|
|
options: {}, // Nothing for now
|
|
|
|
onArrival: function(transition_diff) {
|
|
Ship.setTitle();
|
|
if(!$SM.get('game.spaceShip.seenShip')) {
|
|
Notifications.notify(Ship, 'somewhere above the debris cloud, the wanderer fleet hovers. been on this rock too long.');
|
|
$SM.set('game.spaceShip.seenShip', true);
|
|
Engine.saveGame();
|
|
}
|
|
|
|
Engine.moveStoresView(null, transition_diff);
|
|
},
|
|
|
|
setTitle: function() {
|
|
if(Engine.activeModule == this) {
|
|
document.title = "An Old Starship";
|
|
}
|
|
},
|
|
|
|
reinforceHull: function() {
|
|
if($SM.get('stores[\'alien alloy\']', true) < Ship.ALLOY_PER_HULL) {
|
|
Notifications.notify(Ship, "not enough alien alloy");
|
|
return false;
|
|
}
|
|
$SM.add('stores[\'alien alloy\']', -Ship.ALLOY_PER_HULL);
|
|
$SM.add('game.spaceShip.hull', 1);
|
|
if($SM.get('game.spaceShip.hull') > 0) {
|
|
Button.setDisabled($('#liftoffButton', Ship.panel), false);
|
|
}
|
|
$('#hullRow .row_val', Ship.panel).text($SM.get('game.spaceShip.hull'));
|
|
},
|
|
|
|
upgradeEngine: function() {
|
|
if($SM.get('stores[\'alien alloy\']', true) < Ship.ALLOY_PER_THRUSTER) {
|
|
Notifications.notify(Ship, "not enough alien alloy");
|
|
return false;
|
|
}
|
|
$SM.add('stores[\'alien alloy\']', -Ship.ALLOY_PER_THRUSTER);
|
|
$SM.add('game.spaceShip.thrusters', 1)
|
|
$('#engineRow .row_val', Ship.panel).text($SM.get('game.spaceShip.thrusters'));
|
|
},
|
|
|
|
getMaxHull: function() {
|
|
return $SM.get('game.spaceShip.hull');
|
|
},
|
|
|
|
checkLiftOff: function() {
|
|
if(!$SM.get('game.spaceShip.seenWarning')) {
|
|
Events.startEvent({
|
|
title: 'Ready to Leave?',
|
|
scenes: {
|
|
'start': {
|
|
text: [
|
|
"time to get out of this place. won't be coming back."
|
|
],
|
|
buttons: {
|
|
'fly': {
|
|
text: 'lift off',
|
|
onChoose: function() {
|
|
$SM.set('game.spaceShip.seenWarning', true);
|
|
Ship.liftOff();
|
|
},
|
|
nextScene: 'end'
|
|
},
|
|
'wait': {
|
|
text: 'linger',
|
|
onChoose: function() {
|
|
Button.clearCooldown($('#liftoffButton'));
|
|
},
|
|
nextScene: 'end'
|
|
}
|
|
}
|
|
}
|
|
}
|
|
});
|
|
} else {
|
|
Ship.liftOff();
|
|
}
|
|
},
|
|
|
|
liftOff: function () {
|
|
$('#outerSlider').animate({top: '700px'}, 300);
|
|
Space.onArrival();
|
|
Engine.activeModule = Space;
|
|
},
|
|
|
|
handleStateUpdates: function(e){
|
|
|
|
}
|
|
}; |