function DC() { this._damageProbability = 0.0; this._report = false; this._reportTime = 0.0; signal('nylozHitPlayer', this.nylozHitPlayer.bind(this)); signal('newGame', this.newGame.bind(this)); signal('fix', this.fix.bind(this)); signal('update', this.update.bind(this)); signal('gameOver', this.gameOver.bind(this)); }
define(function (require) { "use strict"; var chart = require('galaxy').chart; var console = require('console'); var engines = require('engines'); var field = require('field'); var keys = require('keys'); var label = require('label'); var loop = require('loop'); var panel = require('panel'); var shield = require('shield'); var signal = require('signal'); var vars = require('vars'); var hyperwarp = require('hyperwarp'); var photons = require('photons'); var lrs = require('lrs'); var viewControl = require('viewControl'); var computer = require('computer'); /*----------------------------------------------------------------------------- Key Handler Table -----------------------------------------------------------------------------*/ var keytable = {}; (function () { var i; function engineControl(k) { if (hyperwarp.engaged()) { console.write('Hyperwarp aborted.'); } engines.setSpeed(parseInt(k)); } for (i = 0; i <= 9; ++i) { keytable[i.toString()] = engineControl; } })(); keytable['h'] = keytable['H'] = function () { if (hyperwarp.engaged()) { console.write('Hyperwarp aborted.'); engines.setSpeed(0); } else { console.write('Hyperwarp engines engaged.'); hyperwarp.engage(); } }; /* View control. */ keytable['a'] = keytable['A'] = viewControl.aft; keytable['f'] = keytable['F'] = viewControl.fore; keytable['l'] = keytable['L'] = viewControl.lrs; keytable['g'] = keytable['G'] = viewControl.chart; /* Instrument computer. */ keytable['t'] = keytable['T'] = function () { if (!computer.instruments.isAutotrackEnabled()) { console.write('Computer auto-tracking enabled.'); computer.instruments.autotrackEnable(); } else { console.write('Computer auto-tracking disabled.'); computer.instruments.autotrackDisable(); } }; keytable['m'] = keytable['M'] = function () { computer.instruments.switchTarget(); }; /* Attack computer. */ keytable['c'] = keytable['C'] = function () { if (!computer.attack.isEnabled()) { console.write('Attack computer enabled.'); computer.attack.enable(); } else { console.write('Attack computer disabled.'); computer.attack.disable(); } }; /* Shields. */ keytable['s'] = keytable['S'] = function () { if (shield.isEnabled()) { console.write('Shields disabled.'); shield.disable(); } else { console.write('Shields enabled.'); shield.enable(); } }; keytable['\e'] = keytable['p'] = keytable['P'] = function () { loop.enterPause(); }; /*----------------------------------------------------------------------------- Interface -----------------------------------------------------------------------------*/ var isGameOver = false; function onUpdate() { var movex = 0; var movey = 0; var k = ''; var f = null; if (isGameOver) { field.pitch = 0; field.yaw = 0; chart.movex = 0; chart.movey = 0; photons.fire = false; if (keys.key === '\e') { loop.enterPause(); } return; } if (keys.left) { --movex; } if (keys.right) { ++movex; } if (keys.up) { --movey; } if (keys.down) { ++movey; } /* Only fire missiles if not in hyperspace or hyperwarp. */ if (!hyperwarp.engaged() && !hyperwarp.inHyperspace() && field.speed < 70.0) { photons.fire = keys.fire; } else { photons.fire = false; } if (!chart.isShown() || hyperwarp.engaged()) { field.yaw = movex; field.pitch = -movey; chart.movex = 0; chart.movey = 0; } else { field.yaw = 0; field.pitch = 0; chart.movex = movex; chart.movey = movey; } k = keys.key; if (k !== '') { if (typeof keytable[k] === 'function') { keytable[k](k); } } } function onGameOver() { isGameOver = true; } function onNewGame() { isGameOver = false; } signal('update', onUpdate); signal('gameOver', onGameOver); signal('newGame', onNewGame); return onUpdate; });