home · contact · privacy
Cache player object, so some player data is available even during turn update.
[plomrogue2] / rogue_chat_curses.py
index 8fc2817cbaf45dd1582a84d83e630f38e2cabb5a..f10c79650020d615ff2480ff26af0b5a384347ba 100755 (executable)
@@ -267,11 +267,12 @@ def cmd_MAP_CONTROL(game, content):
 cmd_MAP_CONTROL.argtypes = 'string'
 
 def cmd_GAME_STATE_COMPLETE(game):
-    if game.tui.mode.name == 'post_login_wait':
-        game.tui.switch_mode('play')
     game.turn_complete = True
     game.tui.do_refresh = True
     game.tui.info_cached = None
+    game.player = game.get_thing(game.player_id)
+    if game.tui.mode.name == 'post_login_wait':
+        game.tui.switch_mode('play')
 cmd_GAME_STATE_COMPLETE.argtypes = ''
 
 def cmd_PORTAL(game, position, msg):
@@ -376,6 +377,7 @@ class Game(GameBase):
         self.annotations = {}
         self.portals = {}
         self.terrains = {}
+        self.player = None
 
     def get_string_options(self, string_option_type):
         if string_option_type == 'map_geometry':
@@ -629,15 +631,14 @@ class TUI:
         if self.mode and self.mode.name == 'control_tile_draw':
             self.log_msg('@ finished tile protection drawing.')
         self.tile_draw = False
-        player = self.game.get_thing(self.game.player_id)
         if mode_name == 'command_thing' and\
-           (not hasattr(player, 'carrying') or not player.carrying.commandable):
+           (not self.game.player.carrying or
+            not self.game.player.carrying.commandable):
             self.log_msg('? not carrying anything commandable')
             self.flash = True
             self.switch_mode('play')
             return
-        if mode_name == 'drop_thing' and\
-           not (hasattr(player, 'carrying' or player.carrying)):
+        if mode_name == 'drop_thing' and not self.game.player.carrying:
             self.log_msg('? not carrying anything droppable')
             self.flash = True
             self.switch_mode('play')
@@ -646,8 +647,9 @@ class TUI:
             mode_name = 'admin'
         elif mode_name in {'name_thing', 'admin_thing_protect'}:
             thing = None
-            for t in [t for t in self.game.things if t.position == player.position
-                      and t.id_ != player.id_]:
+            for t in [t for t in self.game.things
+                      if t.position == self.game.player.position
+                      and t.id_ != self.game.player.id_]:
                 thing = t
                 break
             if not thing:
@@ -663,8 +665,8 @@ class TUI:
         elif self.mode.name != 'edit':
             self.map_mode = 'terrain + things'
         if self.mode.shows_info or self.mode.name == 'control_tile_draw':
-            player = self.game.get_thing(self.game.player_id)
-            self.explorer = YX(player.position.y, player.position.x)
+            self.explorer = YX(self.game.player.position.y,
+                               self.game.player.position.x)
         if self.mode.is_single_char_entry:
             self.show_help = True
         if len(self.mode.intro_msg) > 0:
@@ -676,19 +678,18 @@ class TUI:
                 self.log_msg('@ enter username')
         elif self.mode.name == 'take_thing':
             self.log_msg('Portable things in reach for pick-up:')
-            player = self.game.get_thing(self.game.player_id)
-            select_range = [player.position,
-                            player.position + YX(0,-1),
-                            player.position + YX(0, 1),
-                            player.position + YX(-1, 0),
-                            player.position + YX(1, 0)]
+            select_range = [self.game.player.position,
+                            self.game.player.position + YX(0,-1),
+                            self.game.player.position + YX(0, 1),
+                            self.game.player.position + YX(-1, 0),
+                            self.game.player.position + YX(1, 0)]
             if type(self.game.map_geometry) == MapGeometryHex:
-                if player.position.y % 2:
-                    select_range += [player.position + YX(-1, 1),
-                                     player.position + YX(1, 1)]
+                if self.game.player.position.y % 2:
+                    select_range += [self.game.player.position + YX(-1, 1),
+                                     self.game.player.position + YX(1, 1)]
                 else:
-                    select_range += [player.position + YX(-1, -1),
-                                     player.position + YX(1, -1)]
+                    select_range += [self.game.player.position + YX(-1, -1),
+                                     self.game.player.position + YX(1, -1)]
             self.selectables = [t.id_ for t in self.game.things
                                 if t.portable and t.position in select_range]
             if len(self.selectables) == 0:
@@ -925,11 +926,11 @@ class TUI:
                         draw_thing(t, used_positions)
                     for t in [t for t in self.game.things if t.type_ == 'Player']:
                         draw_thing(t, used_positions)
-                player = self.game.get_thing(self.game.player_id)
                 if self.mode.shows_info or self.mode.name == 'control_tile_draw':
                     map_lines_split[self.explorer.y][self.explorer.x] = '??'
                 elif self.map_mode != 'terrain + things':
-                    map_lines_split[player.position.y][player.position.x] = '??'
+                    map_lines_split[self.game.player.position.y]\
+                        [self.game.player.position.x] = '??'
                 self.map_lines = []
                 if type(self.game.map_geometry) == MapGeometryHex:
                     indent = 0
@@ -941,7 +942,7 @@ class TUI:
                         self.map_lines += [''.join(line)]
                 window_center = YX(int(self.size.y / 2),
                                    int(self.window_width / 2))
-                center = player.position
+                center = self.game.player.position
                 if self.mode.shows_info or self.mode.name == 'control_tile_draw':
                     center = self.explorer
                 center = YX(center.y, center.x * 2)
@@ -1223,9 +1224,8 @@ class TUI:
                 elif key == self.keys['spin'] and task_action_on('spin'):
                     self.send('TASK:SPIN')
                 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]
+                    if self.game.player.position in self.game.portals:
+                        self.host = self.game.portals[self.game.player.position]
                         self.reconnect()
                     else:
                         self.flash = True