Mercurial > web-gnusto
view trivial-zui.js @ 32:3a85b5915ea6
Added bad implementation of character input. The 'info' command in Troll no longer crashes the Z-Machine, but because we don't currently support multiple windows and the the 'info' command uses the top window as an interface, it still looks like it's hanging.
author | Atul Varma <varmaa@toolness.com> |
---|---|
date | Mon, 12 May 2008 11:23:47 -0700 |
parents | 5d7bf3684fc3 |
children | 8d34fb3e9108 |
line wrap: on
line source
var BACKSPACE_KEYCODE = 8; var RETURN_KEYCODE = 13; function TrivialZui() { this._activeWindow = 0; this._inputString = ""; this._currentCallback = null; var self = this; this.__proto__ = { _windowKeypress: function(event) { if ($("#current-input").length == 0) { // We're not waiting for a line of input, but we may // be waiting for a character of input. // Note that we have to return a ZSCII keycode here. // // For more information, see: // // http://www.gnelson.demon.co.uk/zspec/sect03.html if (self._currentCallback) { var keyCode = 0; if (event.charCode) { keyCode = event.charCode; } else { // TODO: Deal w/ arrow keys, etc. switch (event.keyCode) { case RETURN_KEYCODE: keyCode = event.keyCode; break; } } if (keyCode != 0) { var callback = self._currentCallback; self._currentCallback = null; callback(keyCode); } } return; } var oldInputString = self._inputString; if (event.charCode) { var newChar = String.fromCharCode(event.charCode); var lastChar = self._inputString.charAt( self._inputString.length - 1 ); if (!(newChar == " " && lastChar == " ")) { self._inputString += newChar; } } else { switch (event.keyCode) { case BACKSPACE_KEYCODE: if (self._inputString) { self._inputString = self._inputString.slice(0, -1); } break; case RETURN_KEYCODE: var finalInputString = self._inputString; var callback = self._currentCallback; self._inputString = ""; self._currentCallback = null; // TODO: Escape finalInputString. $("#current-input").replaceWith( ('<span class="finished-input">' + finalInputString + '</span><br/>') ); callback(finalInputString); } } if ($("#current-input") && oldInputString != self._inputString) { // TODO: Escape self._inputString. $("#current-input").html( self._inputString + '<span id="cursor">_</span>' ); } }, onLineInput: function(callback) { self._currentCallback = callback; $("#content").append( '<span id="current-input"><span id="cursor">_</span></span>' ); }, onCharacterInput: function(callback) { self._currentCallback = callback; }, onQuit: function() { }, onSetStyle: function(textStyle, foreground, background) { }, onSetWindow: function(window) { self._activeWindow = window; }, onEraseWindow: function(window) { if (window == 0) { self.onPrint("\n\n\n\n\n\n\n\n\n\n"); } }, onSetCursor: function(x, y) { }, onSplitWindow: function(window) { }, onPrint: function(output) { output = output.replace('\n', '<br/>', 'g'); if (self._activeWindow == 0) { $("#content").append(output); window.scroll(0, document.body.scrollHeight); } } }; $(window).keypress(self._windowKeypress); } $(document).ready( function() { var engine = new GnustoEngine(); var zui = new TrivialZui(); var runner = new EngineRunner(engine, zui); engine.loadStory(troll_z5); runner.run(); });