home · contact · privacy
In web client, only reconnect if websocket.readyState != 1.
[plomrogue2] / rogue_chat.html
index 1c1fd1a125ddce134471b3cfb8432726e6a6e2ca..1b62a81ad77c63aa1fc8b3f37697aab52c8f3759 100644 (file)
@@ -19,7 +19,7 @@ terminal rows: <input id="n_rows" type="number" step=4 min=24 value=24 />
 <div>
 keyboard input/control: <span id="keyboard_control"></span>
 </div>
-<h3>button controls for mouse players</h3>
+<h3>button controls for hard-to-remember keybindings</h3>
 <table id="move_table" style="float: left">
   <tr>
     <td style="text-align: right"><button id="hex_move_upleft"></button></td>
@@ -59,6 +59,7 @@ keyboard input/control: <span id="keyboard_control"></span>
       <button id="teleport"></button>
       <button id="install"></button>
       <button id="wear"></button>
+      <button id="spin"></button>
     </td>
   </tr>
   <tr>
@@ -99,6 +100,7 @@ keyboard input/control: <span id="keyboard_control"></span>
 <li>help: <input id="key_help" type="text" value="h" />
 <li>flatten surroundings: <input id="key_flatten" type="text" value="F" />
 <li>teleport: <input id="key_teleport" type="text" value="p" />
+<li>spin: <input id="key_spin" type="text" value="S" />
 <li>open/close: <input id="key_door" type="text" value="D" />
 <li>consume: <input id="key_consume" type="text" value="C" />
 <li>install: <input id="key_install" type="text" value="I" />
@@ -253,6 +255,7 @@ let key_descriptions = {
     'consume': 'consume',
     'install': '(un-)install',
     'wear': '(un-)wear',
+    'spin': 'spin',
     'toggle_map_mode': 'toggle map view',
     'toggle_tile_draw': 'toggle protection character drawing',
     'hex_move_upleft': 'up-left',
@@ -451,7 +454,6 @@ let server = {
         this.url = url;
         this.websocket = new WebSocket(this.url);
         this.websocket.onopen = function(event) {
-            server.connected = true;
             game.thing_types = {};
             game.terrains = {};
             server.send(['TASKS']);
@@ -461,7 +463,6 @@ let server = {
             tui.switch_mode('login');
         };
         this.websocket.onclose = function(event) {
-            server.connected = false;
             tui.switch_mode('waiting_for_server');
             tui.log_msg("@ server disconnected :(");
         };
@@ -693,6 +694,7 @@ let tui = {
       'wear': 'WEAR',
       'command': 'COMMAND',
       'consume': 'INTOXICATE',
+      'spin': 'SPIN',
   },
   offset: [0,0],
   map_lines: [],
@@ -701,7 +703,7 @@ let tui = {
       this.mode_play.available_modes = ["chat", "study", "edit", "admin_enter",
                                         "command_thing", "take_thing", "drop_thing"]
       this.mode_play.available_actions = ["move", "teleport", "door", "consume",
-                                          "install", "wear"];
+                                          "install", "wear", "spin"];
       this.mode_study.available_modes = ["chat", "play", "admin_enter", "edit"]
       this.mode_study.available_actions = ["toggle_map_mode", "move_explorer"];
       this.mode_admin.available_modes = ["admin_thing_protect", "control_pw_type",
@@ -1468,11 +1470,12 @@ tui.inputEl.addEventListener('keydown', (event) => {
     if (event.key == 'Enter') {
         event.preventDefault();
     }
-    if (tui.mode.has_input_prompt && event.key == 'Enter'
-        && tui.inputEl.value.length == 0
-        && ['chat', 'command_thing', 'take_thing', 'drop_thing',
-            'admin_enter'].includes(tui.mode.name)) {
-        if (tui.mode.name != 'chat') {
+    if ((!tui.mode.is_intro && event.key == 'Escape')
+        || (tui.mode.has_input_prompt && event.key == 'Enter'
+            && tui.inputEl.value.length == 0
+            && ['chat', 'command_thing', 'take_thing', 'drop_thing',
+                'admin_enter'].includes(tui.mode.name))) {
+        if (!['chat', 'play', 'study', 'edit'].includes(tui.mode.name)) {
             tui.log_msg('@ aborted');
         }
         tui.switch_mode('play');
@@ -1588,6 +1591,8 @@ tui.inputEl.addEventListener('keydown', (event) => {
               server.send(["TASK:INSTALL"]);
           } else if (event.key === tui.keys.wear && tui.task_action_on('wear')) {
               server.send(["TASK:WEAR"]);
+          } else if (event.key === tui.keys.spin && tui.task_action_on('spin')) {
+              server.send(["TASK:SPIN"]);
           } else if (event.key in tui.movement_keys && tui.task_action_on('move')) {
               server.send(['TASK:MOVE', tui.movement_keys[event.key]]);
           } else if (event.key === tui.keys.teleport) {
@@ -1653,13 +1658,13 @@ for (let key_selector of key_selectors) {
     }, false);
 }
 window.setInterval(function() {
-    if (server.connected) {
+    if (server.websocket.readyState == 1) {
         server.send(['PING']);
     } else {
         server.reconnect_to(server.url);
         tui.log_msg('@ attempting reconnect …')
     }
-}, 5000);
+}, 1000);
 window.setInterval(function() {
     let val = "?";
     let span_decoration = "none";
@@ -1710,6 +1715,9 @@ document.getElementById("install").onclick = function() {
 document.getElementById("wear").onclick = function() {
     server.send(['TASK:WEAR']);
 };
+document.getElementById("spin").onclick = function() {
+    server.send(['TASK:SPIN']);
+};
 document.getElementById("teleport").onclick = function() {
     game.teleport();
 };