From dcb275a3ae06858ba25eee3c5cd7ab6c1d44a4df Mon Sep 17 00:00:00 2001
From: Christian Heller <c.heller@plomlompom.de>
Date: Tue, 27 Oct 2020 06:53:26 +0100
Subject: [PATCH] Initialize (centered) map view even before login.

---
 new2/plomrogue/commands.py               |  4 ++++
 new2/plomrogue/game.py                   |  3 ++-
 new2/rogue_chat_nocanvas_monochrome.html | 11 +++++++----
 3 files changed, 13 insertions(+), 5 deletions(-)

diff --git a/new2/plomrogue/commands.py b/new2/plomrogue/commands.py
index 4daf0ba..88a5211 100644
--- a/new2/plomrogue/commands.py
+++ b/new2/plomrogue/commands.py
@@ -28,6 +28,10 @@ def cmd_LOGIN(game, nick, connection_id):
     game.io.send('PLAYER_ID %s' % t.id_, connection_id)
 cmd_LOGIN.argtypes = 'string'
 
+def cmd_GET_GAMESTATE(game, connection_id):
+    game.send_gamestate(connection_id)
+cmd_GET_GAMESTATE.argtypes = ''
+
 def cmd_QUERY(game, target_nick, msg, connection_id):
     if not connection_id in game.sessions:
         raise GameError('can only query when logged in')
diff --git a/new2/plomrogue/game.py b/new2/plomrogue/game.py
index 406d96d..e7a4262 100755
--- a/new2/plomrogue/game.py
+++ b/new2/plomrogue/game.py
@@ -3,7 +3,7 @@ from plomrogue.tasks import (Task_WAIT, Task_MOVE, Task_WRITE,
 from plomrogue.errors import GameError
 from plomrogue.commands import (cmd_ALL, cmd_LOGIN, cmd_QUERY, cmd_PING,
                                 cmd_TURN, cmd_MAP_LINE, cmd_MAP, cmd_GET_ANNOTATION,
-                                cmd_ANNOTATE)
+                                cmd_ANNOTATE, cmd_GET_GAMESTATE)
 from plomrogue.io import GameIO
 from plomrogue.misc import quote
 from plomrogue.things import Thing, ThingPlayer 
@@ -50,6 +50,7 @@ class Game(GameBase):
                          'TURN': cmd_TURN,
                          'MAP_LINE': cmd_MAP_LINE,
                          'GET_ANNOTATION': cmd_GET_ANNOTATION,
+                         'GET_GAMESTATE': cmd_GET_GAMESTATE,
                          'ANNOTATE': cmd_ANNOTATE,
                          'MAP': cmd_MAP,
                          'PING': cmd_PING}
diff --git a/new2/rogue_chat_nocanvas_monochrome.html b/new2/rogue_chat_nocanvas_monochrome.html
index eaa180d..c5a4a1f 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;
@@ -271,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') {
@@ -481,7 +486,5 @@ document.addEventListener('keydown', (event) => {
         }
     }
 }, false);
-
-window.setInterval(function() { websocket.send('PING') }, 30000);
 </script>
 </body></html>
-- 
2.30.2