X-Git-Url: https://plomlompom.com/repos/%7B%7Bprefix%7D%7D/balance?a=blobdiff_plain;f=new2%2Frogue_chat.html;h=f1146cb7c9cd70646656c85c80ef67a4882a4973;hb=428ba19a1984f385f5fc55201734a150f59dafcb;hp=6fec9085a43d82bf095cabb89f8ee8f1013041ad;hpb=33bfdaf647c6736d99aadc017ee935f3301d758a;p=plomrogue2-experiments diff --git a/new2/rogue_chat.html b/new2/rogue_chat.html index 6fec908..f1146cb 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); @@ -88,12 +88,8 @@ let parser = { } let tui = { - log_msg: function(msg) { - chat.history.unshift(msg); - if (chat.history.length > terminal.rows - 2) { - chat.history.pop(); - } - terminal.drawBox(1, terminal.cols / 2, terminal.rows - 2, terminal.cols); + draw_history: function() { + terminal.drawBox(1, terminal.cols / 2, terminal.rows - 2, terminal.cols, 'black'); let i = 0; for (let line of chat.history) { terminal.write(terminal.rows - 2 - i, terminal.cols / 2, line); @@ -105,32 +101,62 @@ 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], '@'); } }, draw_tick_line: function(n) { - terminal.drawBox(0, 0, terminal.rows, terminal.cols / 2); + terminal.drawBox(0, terminal.cols / 2, 1, terminal.cols / 2, 'black'); terminal.write(0, terminal.cols / 2, 'tick: ' + game.tick); }, draw_input_line: function() { 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); + if (chat.history.length > terminal.rows - 2) { + chat.history.pop(); + }; + this.draw_history(); } } let game = { things: {}, - tick: 0 + tick: 0, + map: "", + map_size: [1,1] } let chat = { - input_line: "", - history: [] + 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:"] } terminal.initialize() -terminal.drawBox(terminal.rows - 1, terminal.cols / 2, 1, terminal.cols, 'black'); +tui.draw_map(); +tui.draw_tick_line(); +tui.draw_history(); +tui.draw_input_line(); document.addEventListener('keydown', (event) => { if (chat.input_line === '') { @@ -164,14 +190,21 @@ websocket.onmessage = function (event) { if (tokens[0] === 'TURN') { game.things = {} game.tick = parseInt(tokens[1]); - tui.draw_tick_line(); } else if (tokens[0] === 'THING_POS') { - game.things[tokens[1]] = parser.parse_position(tokens[2]); + 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(); tui.draw_map(); } else if (tokens[0] === 'LOG') { tui.log_msg(' ' + tokens[1]); - } else if (tokens[0] === 'ARGUMENT_ERROR') { - tui.log_msg('syntax error: ' + tokens[1]); + } else if (tokens[0] === 'UNHANDLED_INPUT') { + tui.log_msg('unknown command'); + } else if (tokens[0] === 'GAME_ERROR') { + tui.log_msg('game error: ' + tokens[1]); } else if (tokens[0] === 'GAME_ERROR') { tui.log_msg('game error: ' + tokens[1]); } else {