X-Git-Url: https://plomlompom.com/repos/?a=blobdiff_plain;f=new2%2Frogue_chat_nocanvas_monochrome.html;h=a3f81f2a0bf206ee5bdd81e767223d63feda45b5;hb=d111426abddb8b84eb609cfa8916d036b05a5d52;hp=db7e3037eaeab97c3a0085d70d0d4451411ea31b;hpb=47e43a5b4f32159302be343648e0027f2e01ca5a;p=plomrogue2-experiments diff --git a/new2/rogue_chat_nocanvas_monochrome.html b/new2/rogue_chat_nocanvas_monochrome.html index db7e303..a3f81f2 100644 --- a/new2/rogue_chat_nocanvas_monochrome.html +++ b/new2/rogue_chat_nocanvas_monochrome.html @@ -98,7 +98,7 @@ let parser = { }; return [tokens, token_starts]; }, - parse_yx(position_string) { + parse_yx: function(position_string) { let coordinate_strings = position_string.split(',') let position = [0, 0]; position[0] = parseInt(coordinate_strings[0].slice(2)); @@ -107,17 +107,42 @@ let parser = { }, } -function quote(str) { - let quoted = ['"']; - for (let i = 0; i < str.length; i++) { - let c = str[i]; - if (c in ['"', '\\']) { - quoted.push('\\'); +let server = { + init: function(url) { + this.websocket = new WebSocket(url); + this.websocket.onopen = function(event) { + window.setInterval(function() { server.send(['PING']) }, 30000); + server.send(['GET_GAMESTATE']); }; - quoted.push(c); + }, + send: function(tokens) { + this.websocket.send(unparser.untokenize(tokens)); + } +} + +let unparser = { + quote: function(str) { + let quoted = ['"']; + for (let i = 0; i < str.length; i++) { + let c = str[i]; + if (c in ['"', '\\']) { + quoted.push('\\'); + }; + quoted.push(c); + } + quoted.push('"'); + return quoted.join(''); + }, + to_yx: function(yx_coordinate) { + return "Y:" + yx_coordinate[0] + ",X:" + yx_coordinate[1]; + }, + untokenize: function(tokens) { + let quoted_tokens = []; + for (let token of tokens) { + quoted_tokens.push(this.quote(token)); + } + return quoted_tokens.join(" "); } - quoted.push('"'); - return quoted.join(''); } let tui = { @@ -218,11 +243,11 @@ let tui = { tui.log_msg("HELP"); tui.log_msg(""); tui.log_msg("chat mode commands:"); - tui.log_msg("/login USER - register as USER"); - tui.log_msg("/msg USER TEXT - send TEXT to USER"); - tui.log_msg("/help - show this help"); - tui.log_msg("/play or /p - switch to play mode"); - tui.log_msg("/study or /s - switch to study mode"); + tui.log_msg(":login USER - register as USER"); + tui.log_msg(":msg USER TEXT - send TEXT to USER"); + tui.log_msg(":help - show this help"); + tui.log_msg(":play or :p - switch to play mode"); + tui.log_msg(":study or :s - switch to study mode"); tui.log_msg(""); tui.log_msg("play mode commands:"); tui.log_msg("w, a, s, d - move avatar"); @@ -271,12 +296,8 @@ terminal.initialize(); tui.log_help(); tui.full_refresh(); -let websocket = new WebSocket(websocket_location); -websocket.onopen = function (event) { - window.setInterval(function() { websocket.send('PING') }, 30000); - websocket.send('GET_GAMESTATE'); -} -websocket.onmessage = function (event) { +server.init(websocket_location); +server.websocket.onmessage = function (event) { let tokens = parser.tokenize(event.data)[0]; if (tokens[0] === 'TURN') { game.things = {} @@ -364,7 +385,7 @@ let explorer = { } }, query_info: function() { - websocket.send("GET_ANNOTATION Y:" + explorer.position[0] + ",X:" + explorer.position[1]); + server.send(["GET_ANNOTATION", unparser.to_yx(explorer.position)]); }, get_info: function() { if (this.position in this.info_db) { @@ -377,7 +398,7 @@ let explorer = { if (msg.length == 0) { msg = " "; // triggers annotation deletion } - websocket.send("ANNOTATE Y:" + explorer.position[0] + ",X:" + explorer.position[1] + " " + quote(msg)); + server.send(["ANNOTATE", unparser.to_yx(explorer.position), msg]); } } @@ -394,24 +415,24 @@ document.addEventListener('keydown', (event) => { } else if (event.key == 'Enter') { let [tokens, token_starts] = parser.tokenize(tui.input_line); if (tokens.length > 0 && tokens[0].length > 0) { - if (tokens[0][0] == '/') { - if (tokens[0] == '/play' || tokens[0] == '/p') { + if (tokens[0][0] == ':') { + if (tokens[0] == ':play' || tokens[0] == ':p') { tui.switch_mode('play'); - } else if (tokens[0] == '/study' || tokens[0] == '/s') { + } else if (tokens[0] == ':study' || tokens[0] == ':s') { tui.switch_mode('study'); - } else if (tokens[0] == '/help') { + } else if (tokens[0] == ':help') { tui.log_help(); tui.refresh(); - } else if (tokens[0] == '/login') { + } else if (tokens[0] == ':login') { if (tokens.length > 1) { - websocket.send('LOGIN ' + quote(tokens[1])); + server.send(['LOGIN', tokens[1]]); } else { tui.log_msg('? need login name'); } - } else if (tokens[0] == '/msg') { + } else if (tokens[0] == ':msg') { if (tokens.length > 2) { let msg = tui.input_line.slice(token_starts[2]); - websocket.send('QUERY ' + quote(tokens[1]) + ' ' + quote(msg)); + server.send(['QUERY', tokens[1], msg]); } else { tui.log_msg('? need message target and message'); } @@ -419,7 +440,7 @@ document.addEventListener('keydown', (event) => { tui.log_msg('? unknown command'); } } else { - websocket.send('ALL ' + quote(tui.input_line)); + server.send(['ALL', tui.input_line]); } } tui.input_line = ''; @@ -437,21 +458,21 @@ document.addEventListener('keydown', (event) => { tui.log_help(); tui.refresh(); } else if (event.key === 'f') { - websocket.send("TASK:FLATTEN_SURROUNDINGS"); + server.send(["TASK:FLATTEN_SURROUNDINGS"]); } else if (event.key === 'a') { - websocket.send('TASK:MOVE LEFT'); + server.send(['TASK:MOVE', 'LEFT']); } else if (event.key === 'd') { - websocket.send('TASK:MOVE RIGHT'); + server.send(['TASK:MOVE', 'RIGHT']); } else if (event.key === 'w') { - websocket.send('TASK:MOVE UP'); + server.send(['TASK:MOVE', 'UP']); } else if (event.key === 's') { - websocket.send('TASK:MOVE DOWN'); + server.send(['TASK:MOVE', 'DOWN']); }; } else if (tui.mode == 'edit') { - if (event.key.length === 1) { - websocket.send("TASK:WRITE " + quote(event.key)); + if (event.key != "Shift" && event.key.length == 1) { + server.send(["TASK:WRITE", event.key]); + tui.switch_mode('play'); } - tui.switch_mode('play'); } else if (tui.mode == 'study') { if (event.key === 'c') { tui.switch_mode('chat');