X-Git-Url: https://plomlompom.com/repos/condition_descriptions?a=blobdiff_plain;f=new2%2Frogue_chat.html;h=bc90c07e72d09ac8b6dc5a51f0c7b26911bbce59;hb=a0afb82a75abf2907e57ba5e6d2244fb02613a7c;hp=dde77beb49459827ca7f40cce210b45d6257ccad;hpb=cb106b4dc08acf7b26df00af98cd829a8c6a43a5;p=plomrogue2-experiments diff --git a/new2/rogue_chat.html b/new2/rogue_chat.html index dde77be..bc90c07 100644 --- a/new2/rogue_chat.html +++ b/new2/rogue_chat.html @@ -78,7 +78,7 @@ let parser = { } return tokens; }, - parse_position(position_string) { + parse_yx(position_string) { let coordinate_strings = position_string.split(',') let position = [0, 0]; position[0] = coordinate_strings[0].slice(2); @@ -101,6 +101,18 @@ let tui = { }, draw_map: function() { terminal.drawBox(0, 0, terminal.rows, terminal.cols / 2); + let map_line = ""; + let y = 0; + for (let i = 0, x = 0; i < game.map.length; i++, x++) { + if (x >= game.map_size[1]) { + terminal.write(y, 0, map_line); + map_line = ""; + x = 0; + y += 1; + }; + map_line += game.map[i]; + } + terminal.write(y, 0, map_line); for (const t in game.things) { terminal.write(game.things[t][0], game.things[t][1], '@'); } @@ -113,9 +125,20 @@ let tui = { terminal.drawBox(terminal.rows - 1, terminal.cols / 2, 1, terminal.cols / 2, 'black'); terminal.write(terminal.rows - 1, terminal.cols / 2, chat.input_line); }, - log_msg: function(msg) { - chat.history.unshift(msg); + log_msg: function(msg, indent=0) { + let line_length = (terminal.cols / 2) - indent; + let chunk = ""; + for (let i = 0, x = 0; i < msg.length; i++, x++) { + if (x >= line_length) { + chat.history.unshift(' '.repeat(indent) + chunk); + chunk = ""; + x = 0; + }; + chunk += msg[i]; + } + chat.history.unshift(' '.repeat(indent) + chunk); if (chat.history.length > terminal.rows - 2) { + chat.history.pop(); }; this.draw_history(); @@ -124,18 +147,22 @@ let tui = { let game = { things: {}, - tick: 0 + tick: 0, + map: "", + map_size: [1,1] } let chat = { input_line:"", - history: ["contain whitespace, escape them with \\.", - "Use double quotes for strings that", - "Use arrow keys to move your avatar.", - " QUERY USER TEXT - send TEXT to USER", - " ALL TEXT - send TEXT to all users", - " LOGIN USER - register as USER", - "commands:"] + history: [" visible ASCII char in the input prompt.", + " To write on the map, enter on a single", + " contain whitespace, escape them with \\.", + " Use double quotes for strings that", + " Use arrow keys to move your avatar.", + " QUERY USER TEXT - send TEXT to USER", + " ALL TEXT - send TEXT to all users", + " LOGIN USER - register as USER", + " commands:"] } terminal.initialize() @@ -155,8 +182,12 @@ document.addEventListener('keydown', (event) => { chat.input_line = chat.input_line.slice(0, -1); tui.draw_input_line(); } else if (event.key === 'Enter') { - websocket.send(chat.input_line); - chat.input_line = '' + if (chat.input_line.length === 1) { + websocket.send("TASK:WRITE " + chat.input_line); + } else { + websocket.send(chat.input_line); + } + chat.input_line = ''; tui.draw_input_line(); } else if (event.key === 'ArrowLeft') { websocket.send('TASK:MOVE LEFT'); @@ -167,7 +198,6 @@ document.addEventListener('keydown', (event) => { } else if (event.key === 'ArrowDown') { websocket.send('TASK:MOVE DOWN'); }; - console.log(event.key); }, false); let websocket = new WebSocket(websocket_location); @@ -176,13 +206,19 @@ websocket.onmessage = function (event) { if (tokens[0] === 'TURN') { game.things = {} game.tick = parseInt(tokens[1]); + } else if (tokens[0] === 'THING_POS') { + game.things[tokens[1]] = parser.parse_yx(tokens[2]); + } else if (tokens[0] === 'MAP') { + game.map_size = parser.parse_yx(tokens[1]); + game.map = tokens[2] + } else if (tokens[0] === 'GAME_STATE_COMPLETE') { tui.draw_tick_line(); tui.draw_map(); - } else if (tokens[0] === 'THING_POS') { - game.things[tokens[1]] = parser.parse_position(tokens[2]); tui.draw_map(); } else if (tokens[0] === 'LOG') { - tui.log_msg(' ' + tokens[1]); + tui.log_msg(tokens[1], 1); + } else if (tokens[0] === 'META') { + tui.log_msg(tokens[1]); } else if (tokens[0] === 'UNHANDLED_INPUT') { tui.log_msg('unknown command'); } else if (tokens[0] === 'GAME_ERROR') {