home · contact · privacy
Add tile control drawing capabilities.
[plomrogue2] / rogue_chat_curses.py
index 0db2695266ea5aa45c66fff3153d0a230b46a714..295c04192bda3871ec2057088781299d0d595bd8 100755 (executable)
@@ -27,9 +27,17 @@ mode_helps = {
         'long': 'This mode is the first of two steps to change the password for a tile control character.  First enter the tile control character for which you want to change the password!'
     },
     'control_pw_pw': {
-        'short': '',
+        'short': 'change tile control password',
         'long': 'This mode is the second of two steps to change the password for a tile control character.  Enter the new password for the tile control character you chose.'
     },
+    'control_tile_type': {
+        'short': 'change tiles control',
+        'long': 'This mode is the first of two steps to change tile control areas on the map.  First enter the tile control character you want to write.'
+    },
+    'control_tile_draw': {
+        'short': 'change tiles control',
+        'long': 'This mode is the second of two steps to change tile control areas on the map.  Move cursor around the map to draw selected tile control character'
+    },
     'annotate': {
         'short': 'annotation',
         'long': 'This mode allows you to add/edit a comment on the tile you are currently standing on (provided your map editing password authorizes you so).  Hit Return to leave.'
@@ -43,15 +51,15 @@ mode_helps = {
         'long': 'This mode allows you to engage in chit-chat with other users.  Any line you enter into the input prompt that does not start with a "/" will be sent out to nearby players – but barriers and distance will reduce what they can read, so stand close to them to ensure they get your message.  Lines that start with a "/" are used for commands like:'
     },
     'login': {
-        'short': '',
+        'short': 'login',
         'long': 'Pick your player name.'
     },
     'waiting_for_server': {
-        'short': '',
+        'short': 'waiting for server response',
         'long': 'Waiting for a server response.'
     },
     'post_login_wait': {
-        'short': '',
+        'short': 'waiting for server response',
         'long': 'Waiting for a server response.'
     },
     'password': {
@@ -328,6 +336,8 @@ class TUI:
     mode_edit = Mode('edit', is_single_char_entry=True)
     mode_control_pw_type = Mode('control_pw_type', is_single_char_entry=True)
     mode_control_pw_pw = Mode('control_pw_pw', has_input_prompt=True)
+    mode_control_tile_type = Mode('control_tile_type', is_single_char_entry=True)
+    mode_control_tile_draw = Mode('control_tile_draw')
     mode_annotate = Mode('annotate', has_input_prompt=True, shows_info=True)
     mode_portal = Mode('portal', has_input_prompt=True, shows_info=True)
     mode_chat = Mode('chat', has_input_prompt=True)
@@ -342,8 +352,10 @@ class TUI:
         self.mode_play.available_modes = ["chat", "study", "edit",
                                           "annotate", "portal",
                                           "password", "admin",
-                                          "control_pw_type"]
+                                          "control_pw_type",
+                                          "control_tile_type"]
         self.mode_study.available_modes = ["chat", "play"]
+        self.mode_control_tile_draw.available_modes = ["play"]
         self.host = host
         self.game = Game()
         self.game.tui = self
@@ -365,6 +377,7 @@ class TUI:
             'switch_to_edit': 'm',
             'switch_to_admin': 'A',
             'switch_to_control_pw_type': 'C',
+            'switch_to_control_tile_type': 'Q',
             'flatten': 'F',
             'take_thing': 'z',
             'drop_thing': 'u',
@@ -461,13 +474,21 @@ class TUI:
         elif self.mode.name == 'password':
             self.input_ = self.password
 
+    def send_tile_control_command(self):
+        self.send('SET_TILE_CONTROL %s %s' %
+                  (self.explorer, quote(self.tile_control_char)))
+
     def switch_mode(self, mode_name):
         self.map_mode = 'terrain'
         self.mode = getattr(self, 'mode_' + mode_name)
-        if self.mode.shows_info:
+        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.query_info()
+            if self.mode.shows_info:
+                self.query_info()
+            elif self.mode.name == 'control_tile_draw':
+                self.send_tile_control_command()
+                self.map_mode = 'control'
         if self.mode.is_single_char_entry:
             self.show_help = True
         if self.mode.name == 'waiting_for_server':
@@ -533,7 +554,10 @@ class TUI:
             target = self.game.map_geometry.move_yx(self.explorer, direction)
             if target:
                 self.explorer = target
-                self.query_info()
+                if self.mode.shows_info:
+                    self.query_info()
+                elif self.mode.name == 'control_tile_draw':
+                    self.send_tile_control_command()
             else:
                 self.flash = True
 
@@ -604,7 +628,8 @@ class TUI:
             help = "hit [%s] for help" % self.keys['help']
             if self.mode.has_input_prompt:
                 help = "enter /help for help"
-            safe_addstr(1, self.window_width, 'MODE: %s – %s' % (self.mode.name, help))
+            safe_addstr(1, self.window_width,
+                        'MODE: %s – %s' % (self.mode.short_desc, help))
 
         def draw_map():
             if not self.game.turn_complete:
@@ -633,7 +658,7 @@ class TUI:
                         meta_char = '+'
                     map_lines_split[t.position.y][t.position.x] = symbol + meta_char
                     used_positions += [t.position]
-            if self.mode.shows_info:
+            if self.mode.shows_info or self.mode.name == 'control_tile_draw':
                 map_lines_split[self.explorer.y][self.explorer.x] = '??'
             map_lines = []
             if type(self.game.map_geometry) == MapGeometryHex:
@@ -665,8 +690,8 @@ class TUI:
                 map_y += 1
 
         def draw_help():
-            content = "%s mode help\n\n%s\n\n" % (self.mode.name,
-                                                  self.mode.help_intro)
+            content = "%s help\n\n%s\n\n" % (self.mode.short_desc,
+                                             self.mode.help_intro)
             if self.mode.name == 'play':
                 content += "Available actions:\n"
                 if 'MOVE' in self.game.tasks:
@@ -864,6 +889,14 @@ class TUI:
             elif self.mode.name == 'control_pw_type':
                 self.tile_control_char = key
                 self.switch_mode('control_pw_pw')
+            elif self.mode.name == 'control_tile_type':
+                self.tile_control_char = key
+                self.switch_mode('control_tile_draw')
+            elif self.mode.name == 'control_tile_draw':
+                if self.mode.mode_switch_on_key(self, key):
+                    continue
+                elif key in self.movement_keys:
+                    move_explorer(self.movement_keys[key])
 
 #TUI('localhost:5000')
 TUI('wss://plomlompom.com/rogue_chat/')