home · contact · privacy
Fix bug that emptied annotation input on pre-existing annotation.
[plomrogue2] / rogue_chat_curses.py
index b80a52ae28180d793b0b8d7276baa6f2b0802acf..15f4cd2db0b8773ff1ab68dd05abdc971f9227db 100755 (executable)
@@ -129,10 +129,6 @@ def cmd_GAME_STATE_COMPLETE(game):
         game.tui.switch_mode('play')
     if game.tui.mode.shows_info:
         game.tui.query_info()
-    player = game.get_thing(game.player_id)
-    if player.position in game.portals:
-        game.tui.teleport_target_host = game.portals[player.position]
-        game.tui.switch_mode('teleport')
     game.turn_complete = True
     game.tui.do_refresh = True
 cmd_GAME_STATE_COMPLETE.argtypes = ''
@@ -142,7 +138,8 @@ def cmd_PORTAL(game, position, msg):
 cmd_PORTAL.argtypes = 'yx_tuple:nonneg string'
 
 def cmd_PLAY_ERROR(game, msg):
-    game.tui.flash()
+    game.tui.log_msg('? ' + msg)
+    game.tui.flash = True
     game.tui.do_refresh = True
 cmd_PLAY_ERROR.argtypes = 'string'
 
@@ -158,6 +155,7 @@ cmd_ARGUMENT_ERROR.argtypes = 'string'
 
 def cmd_ANNOTATION(game, position, msg):
     game.info_db[position] = msg
+    game.tui.restore_input_values()
     if game.tui.mode.shows_info:
         game.tui.do_refresh = True
 cmd_ANNOTATION.argtypes = 'yx_tuple:nonneg string'
@@ -249,7 +247,6 @@ class TUI:
         self.mode_waiting_for_server = self.Mode('waiting_for_server', 'Waiting for a server response.', is_intro=True)
         self.mode_login = self.Mode('login', 'Pick your player name.', has_input_prompt=True, is_intro=True)
         self.mode_post_login_wait = self.Mode('post_login_wait', 'Waiting for a server response.', is_intro=True)
-        self.mode_teleport = self.Mode('teleport', 'Follow the instructions to re-connect and log-in to another server, or enter anything else to abort.', has_input_prompt=True)
         self.mode_password = self.Mode('password', 'This mode allows you to change the password that you send to authorize yourself for editing password-protected map tiles.  Hit return to confirm and leave.', has_input_prompt=True)
         self.game = Game()
         self.game.tui = self
@@ -272,6 +269,7 @@ class TUI:
             'flatten': 'F',
             'take_thing': 'z',
             'drop_thing': 'u',
+            'teleport': 'p',
             'toggle_map_mode': 'M',
             'hex_move_upleft': 'w',
             'hex_move_upright': 'e',
@@ -294,11 +292,9 @@ class TUI:
         self.force_instant_connect = True
         self.input_lines = []
         self.fov = ''
+        self.flash = False
         curses.wrapper(self.loop)
 
-    def flash(self):
-        curses.flash()
-
     def connect(self):
 
         def handle_recv(msg):
@@ -371,6 +367,7 @@ class TUI:
         if self.mode.shows_info:
             player = self.game.get_thing(self.game.player_id)
             self.explorer = YX(player.position.y, player.position.x)
+            self.query_info()
         if self.mode.name == 'waiting_for_server':
             self.log_msg('@ waiting for server …')
         if self.mode.name == 'edit':
@@ -380,9 +377,6 @@ class TUI:
                 self.send('LOGIN ' + quote(self.login_name))
             else:
                 self.log_msg('@ enter username')
-        elif self.mode.name == 'teleport':
-            self.log_msg("@ May teleport to %s" % (self.teleport_target_host)),
-            self.log_msg("@ Enter 'YES!' to enthusiastically affirm.");
         self.restore_input_values()
 
     def loop(self, stdscr):
@@ -432,12 +426,12 @@ class TUI:
                                                            self.window_width)
 
         def move_explorer(direction):
-            target = self.game.map_geometry.move(self.explorer, direction)
+            target = self.game.map_geometry.move_yx(self.explorer, direction)
             if target:
                 self.explorer = target
                 self.query_info()
             else:
-                self.flash()
+                self.flash = True
 
         def draw_history():
             lines = []
@@ -516,6 +510,8 @@ class TUI:
                 end = start + self.game.map_geometry.size.x
                 map_lines_split += [[c + ' ' for c in map_content[start:end]]]
             if self.map_mode == 'terrain':
+                for p in self.game.portals.keys():
+                    map_lines_split[p.y][p.x] = 'P '
                 used_positions = []
                 for t in self.game.things:
                     symbol = self.game.thing_types[t.type_]
@@ -570,6 +566,7 @@ class TUI:
                     content += "[%s] – drop carried thing\n" % self.keys['drop_thing']
                 if 'FLATTEN_SURROUNDINGS' in self.game.tasks:
                     content += "[%s] – flatten player's surroundings\n" % self.keys['flatten']
+                content += '[%s] – teleport to other space\n' % self.keys['teleport']
                 content += 'Other modes available from here:\n'
                 content += '[%s] – chat mode\n' % self.keys['switch_to_chat']
                 content += '[%s] – study mode\n' % self.keys['switch_to_study']
@@ -639,6 +636,9 @@ class TUI:
                 else:
                     self.send('PING')
                 last_ping = now
+            if self.flash:
+                curses.flash()
+                self.flash = False
             if self.do_refresh:
                 draw_screen()
                 self.do_refresh = False
@@ -693,13 +693,6 @@ class TUI:
                             self.send('NICK ' + quote(tokens[1]))
                         else:
                             self.log_msg('? need login name')
-                    #elif self.input_.startswith('/msg'):
-                    #    tokens = self.input_.split(maxsplit=2)
-                    #    if len(tokens) == 3:
-                    #        self.send('QUERY %s %s' % (quote(tokens[1]),
-                    #                                          quote(tokens[2])))
-                    #    else:
-                    #        self.log_msg('? need message target and message')
                     else:
                         self.log_msg('? unknown command')
                 else:
@@ -719,14 +712,6 @@ class TUI:
                                                quote(self.password)))
                 self.input_ = ""
                 self.switch_mode('play')
-            elif self.mode == self.mode_teleport and key == '\n':
-                if self.input_ == 'YES!':
-                    self.host = self.teleport_target_host
-                    self.reconnect()
-                else:
-                    self.log_msg('@ teleport aborted')
-                    self.switch_mode('play')
-                self.input_ = ''
             elif self.mode == self.mode_study:
                 if key == self.keys['switch_to_chat']:
                     self.switch_mode('chat')
@@ -760,10 +745,19 @@ class TUI:
                     self.send('TASK:PICK_UP')
                 elif key == self.keys['drop_thing'] and 'DROP' in self.game.tasks:
                     self.send('TASK:DROP')
+                elif key == self.keys['teleport']:
+                    player = self.game.get_thing(self.game.player_id)
+                    if player.position in self.game.portals:
+                        self.host = self.game.portals[player.position]
+                        self.reconnect()
+                    else:
+                        self.flash = True
+                        self.log_msg('? not standing on portal')
                 elif key in self.movement_keys and 'MOVE' in self.game.tasks:
                     self.send('TASK:MOVE ' + self.movement_keys[key])
             elif self.mode == self.mode_edit:
                 self.send('TASK:WRITE %s %s' % (key, quote(self.password)))
                 self.switch_mode('play')
 
-TUI('localhost:5000')
+#TUI('localhost:5000')
+TUI('wss://plomlompom.com/rogue_chat/')