X-Git-Url: https://plomlompom.com/repos/%7B%7B%20web_path%20%7D%7D/decks/%7B%7Bdeck_id%7D%7D/cards/%7B%7Bcard_id%7D%7D/form?a=blobdiff_plain;f=new2%2Frogue_chat_nocanvas_monochrome.html;h=72ac10c5a5c7fbbfc268acaec4e232609eba3de2;hb=8f93c0c58d4bf9ba2a83e0c7e474045a0dd7178e;hp=863de8c5b09cbaa9c93774cfa80c43941dccd862;hpb=beebfdb7dac8e7630643c44e9ae8d3c79d5d39d8;p=plomrogue2-experiments diff --git a/new2/rogue_chat_nocanvas_monochrome.html b/new2/rogue_chat_nocanvas_monochrome.html index 863de8c..72ac10c 100644 --- a/new2/rogue_chat_nocanvas_monochrome.html +++ b/new2/rogue_chat_nocanvas_monochrome.html @@ -153,14 +153,15 @@ let tui = { }; map_lines.push(line); let player_position = [0,0]; + let center_pos = [Math.floor(game.map_size[0] / 2), + Math.floor(game.map_size[1] / 2)]; for (const thing_id in game.things) { let t = game.things[thing_id]; map_lines[t[0]][t[1]] = '@'; if (game.player_id == thing_id) { - player_position = t; + center_pos = t; } }; - let center_pos = player_position; if (tui.mode == 'study' || tui.mode == 'annotate') { map_lines[explorer.position[0]][explorer.position[1]] = '?'; center_pos = explorer.position; @@ -186,18 +187,24 @@ let tui = { terminal.write(terminal.rows - 1, terminal.cols / 2, '> ' + this.input_line); } }, - log_msg: function(msg) { - let line_length = (terminal.cols / 2); + msg_into_lines_of_width: function(msg, width) { let chunk = ""; + let lines = []; for (let i = 0, x = 0; i < msg.length; i++, x++) { - if (x >= line_length) { - this.log.unshift(chunk); + if (x >= width) { + lines.unshift(chunk); chunk = ""; x = 0; }; chunk += msg[i]; } - this.log.unshift(chunk); + lines.unshift(chunk); + return lines; + }, + log_msg: function(msg) { + let line_length = (terminal.cols / 2); + let chunk = ""; + this.log = this.msg_into_lines_of_width(msg, terminal.cols / 2).concat(this.log); while (this.log.length > terminal.rows - 2) { this.log.pop(); }; @@ -209,21 +216,22 @@ let tui = { log_help: function() { tui.log_msg(""); tui.log_msg("HELP"); - tui.log_msg("chat mode commands:"); tui.log_msg(""); - 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 - switch to play mode"); + 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(""); tui.log_msg("play mode commands:"); tui.log_msg("w, a, s, d - move avatar"); tui.log_msg("f - flatten surroundings"); tui.log_msg("e - write following ASCII character"); tui.log_msg("c - switch to chat mode"); - tui.log_msg("? - switch to investigation mode"); + tui.log_msg("? - switch to study mode"); tui.log_msg(""); - tui.log_msg("investigation mode commands:"); + tui.log_msg("study mode commands:"); tui.log_msg("w, a, s, d - move question mark"); tui.log_msg("A - annotate terrain"); tui.log_msg("c - switch to chat mode"); @@ -232,7 +240,8 @@ let tui = { }, draw_info: function() { terminal.drawBox(1, terminal.cols / 2, terminal.rows - 2, terminal.cols / 2); - let lines = explorer.get_info(); + let lines = this.msg_into_lines_of_width(explorer.get_info(), terminal.cols / 2); + lines.reverse(); for (let y = 1, i = 0; y < terminal.rows && i < lines.length; y++, i++) { terminal.write(y, terminal.cols / 2, lines[i]); } @@ -263,6 +272,10 @@ 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) { let tokens = parser.tokenize(event.data)[0]; if (tokens[0] === 'TURN') { @@ -355,9 +368,9 @@ let explorer = { }, get_info: function() { if (this.position in this.info_db) { - return [this.info_db[this.position]]; + return this.info_db[this.position]; } else { - return ['waiting …']; + return 'waiting …'; } }, annotate: function(msg) { @@ -381,21 +394,21 @@ 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') { + if (tokens[0][0] == ':') { + if (tokens[0] == ':play' || tokens[0] == ':p') { tui.switch_mode('play'); - } else if (tokens[0] == '/study') { + } 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])); } 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)); @@ -435,10 +448,10 @@ document.addEventListener('keydown', (event) => { websocket.send('TASK:MOVE DOWN'); }; } else if (tui.mode == 'edit') { - if (event.key.length === 1) { + if (event.key != "Shift" && event.key.length == 1) { websocket.send("TASK:WRITE " + quote(event.key)); + tui.switch_mode('play'); } - tui.switch_mode('play'); } else if (tui.mode == 'study') { if (event.key === 'c') { tui.switch_mode('chat'); @@ -473,7 +486,5 @@ document.addEventListener('keydown', (event) => { } } }, false); - -window.setInterval(function() { websocket.send('PING') }, 30000);