From: Christian Heller Date: Fri, 20 Nov 2020 00:25:08 +0000 (+0100) Subject: Add tile control drawing capabilities. X-Git-Url: https://plomlompom.com/repos/%7B%7Bprefix%7D%7D/%7B%7B%20web_path%20%7D%7D/%7B%7Bdb.prefix%7D%7D/do_todos?a=commitdiff_plain;h=d3167bc558c709d7f10a237def2763530b7fed32;p=plomrogue2 Add tile control drawing capabilities. --- diff --git a/config.json b/config.json index 01777ee..3538488 100644 --- a/config.json +++ b/config.json @@ -8,6 +8,7 @@ "switch_to_edit": "m", "switch_to_admin": "A", "switch_to_control_pw_pw": "C", + "switch_to_control_tile_type": "Q", "flatten": "F", "take_thing": "z", "drop_thing": "u", diff --git a/plomrogue/commands.py b/plomrogue/commands.py index c079599..1df56bc 100644 --- a/plomrogue/commands.py +++ b/plomrogue/commands.py @@ -109,7 +109,8 @@ def cmd_SET_TILE_CONTROL(game, yx, control_char, connection_id): big_yx, little_yx = player.fov_stencil.source_yxyx(yx) map_control = game.get_map(big_yx, 'control') map_control[little_yx] = control_char -cmd_SET_TILE_CONTROL.argtypes = 'yx:nonneg char' + game.changed = True +cmd_SET_TILE_CONTROL.argtypes = 'yx_tuple:nonneg char' def cmd_SET_MAP_CONTROL_PASSWORD(game, tile_class, password, connection_id): player = game.get_player(connection_id) diff --git a/rogue_chat_curses.py b/rogue_chat_curses.py index 0db2695..295c041 100755 --- a/rogue_chat_curses.py +++ b/rogue_chat_curses.py @@ -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/') diff --git a/rogue_chat_nocanvas_monochrome.html b/rogue_chat_nocanvas_monochrome.html index 7928e24..c2c6bc7 100644 --- a/rogue_chat_nocanvas_monochrome.html +++ b/rogue_chat_nocanvas_monochrome.html @@ -32,6 +32,7 @@ terminal columns: +

edit keybindings

(see here for non-obvious available values):