home · contact · privacy
Improve Firefox experience by not using / for client commands.
[plomrogue2-experiments] / new2 / rogue_chat_nocanvas_monochrome.html
index 863de8c5b09cbaa9c93774cfa80c43941dccd862..72ac10c5a5c7fbbfc268acaec4e232609eba3de2 100644 (file)
@@ -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);
 </script>
 </body></html>