mirror of
https://github.com/doublespeakgames/adarkroom.git
synced 2026-05-28 00:01:54 +08:00
99800f1abd
Refactoring of Outside.js to take better advantage of $SM and simplify
the code.
Includes a small bug fix to Room update handler
Also changed instances of escaped single quote (\') to double (") for
readability and simplicity.
====state changes====
//these were changed for the opposite reason the Room states were. These
seem like states that other locations and events may very well want to
interact with and possibly alter themselves
game.outside.buildings >> game.buildings
game.outside.population >> game.population
game.outside.workders >> game.workers
====functions removed====
Outside.numBuilding // just a $SM.get, no shortcut really needed since
Outside.numBuilding is a pretty long name
Outside.getPopulation // same here
Outside.addBuilding // just an add
Outside.addBuildings // just addM, but wasn't even actually used
====functions refactored====
Outside.killVillagers //moved updates to handler
Outside.updateWorkersView //added local to reduce gets
Outside.increasePopulation //updates moved to handler
Outside.increaseWorker // updates moved to handler
Outside.decreaseWorkder // updates moved to handler
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){
|
|
|
|
}
|
|
}; |