X-Git-Url: https://plomlompom.com/repos/foo.html?a=blobdiff_plain;f=rogue_chat_curses.py;h=65d5a339c013558cde62127d4ba8264f6d8b16f7;hb=2df42b53c56bd32dc445df532b4c42c53d97b767;hp=ff0c46c579559e0faacbb8bee6ff07ac19b01ffc;hpb=3b86e8effe9aa77fa87f86a1057d12d4c8019324;p=plomrogue2 diff --git a/rogue_chat_curses.py b/rogue_chat_curses.py index ff0c46c..65d5a33 100755 --- a/rogue_chat_curses.py +++ b/rogue_chat_curses.py @@ -786,13 +786,16 @@ class TUI: for i in range(len(self.selectables)): self.log_msg(str(i) + ': ' + self.selectables[i]) elif self.mode.name == 'enter_design': - self.log_msg('@ The design you enter must be %s lines of max %s ' - 'characters width each' - % (self.game.player.carrying.design[0].y, - self.game.player.carrying.design[0].x)) if self.game.player.carrying.type_ == 'Hat': + self.log_msg('@ The design you enter must be %s lines of max %s ' + 'characters width each' + % (self.game.player.carrying.design[0].y, + self.game.player.carrying.design[0].x)) self.log_msg('@ Legal characters: ' + self.game.players_hat_chars) self.log_msg('@ (Eat cookies to extend the ASCII characters available for drawing.)') + else: + self.log_msg('@ Width of first line determines maximum width for remaining design') + self.log_msg('@ Finish design by entering an empty line (multiple space characters do not count as empty)') elif self.mode.name == 'command_thing': self.send('TASK:COMMAND ' + quote('HELP')) elif self.mode.name == 'control_pw_pw': @@ -937,7 +940,8 @@ class TUI: self.size = YX(*stdscr.getmaxyx()) self.size = self.size - YX(self.size.y % 4, 0) self.size = self.size - YX(0, self.size.x % 4) - self.window_width = int(self.size.x / 2) + self.left_window_width = min(52, int(self.size.x / 2)) + self.right_window_width = self.size.x - self.left_window_width def recalc_input_lines(): if not self.mode.has_input_prompt: @@ -945,7 +949,7 @@ class TUI: else: self.input_lines = msg_into_lines_of_width(input_prompt + self.input_ + '█', - self.window_width) + self.right_window_width) def move_explorer(direction): target = self.game.map_geometry.move_yx(self.explorer, direction) @@ -960,41 +964,41 @@ class TUI: def draw_history(): lines = [] for line in self.log: - lines += msg_into_lines_of_width(line, self.window_width) + lines += msg_into_lines_of_width(line, self.right_window_width) lines.reverse() height_header = 2 max_y = self.size.y - len(self.input_lines) for i in range(len(lines)): if (i >= max_y - height_header): break - safe_addstr(max_y - i - 1, self.window_width, lines[i]) + safe_addstr(max_y - i - 1, self.left_window_width, lines[i]) def draw_info(): info = 'MAP VIEW: %s\n%s' % (self.map_mode, self.get_info()) - lines = msg_into_lines_of_width(info, self.window_width) + lines = msg_into_lines_of_width(info, self.right_window_width) height_header = 2 for i in range(len(lines)): y = height_header + i if y >= self.size.y - len(self.input_lines): break - safe_addstr(y, self.window_width, lines[i]) + safe_addstr(y, self.left_window_width, lines[i]) def draw_input(): y = self.size.y - len(self.input_lines) for i in range(len(self.input_lines)): - safe_addstr(y, self.window_width, self.input_lines[i]) + safe_addstr(y, self.left_window_width, self.input_lines[i]) y += 1 def draw_stats(): stats = 'ENERGY: %s BLADDER: %s' % (self.game.energy, self.game.bladder_pressure) - safe_addstr(0, self.window_width, stats) + safe_addstr(0, self.left_window_width, stats) def draw_mode(): 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, + safe_addstr(1, self.left_window_width, 'MODE: %s – %s' % (self.mode.short_desc, help)) def draw_map(): @@ -1051,7 +1055,7 @@ class TUI: for line in map_lines_split: self.map_lines += [''.join(line)] window_center = YX(int(self.size.y / 2), - int(self.window_width / 2)) + int(self.left_window_width / 2)) center = self.game.player.position if self.mode.shows_info or self.mode.name == 'control_tile_draw': center = self.explorer @@ -1064,7 +1068,7 @@ class TUI: map_y = max(0, self.offset.y) map_x = max(0, self.offset.x) while term_y < self.size.y and map_y < len(self.map_lines): - to_draw = self.map_lines[map_y][map_x:self.window_width + self.offset.x] + to_draw = self.map_lines[map_y][map_x:self.left_window_width + self.offset.x] safe_addstr(term_y, term_x, to_draw) term_y += 1 map_y += 1 @@ -1075,7 +1079,7 @@ class TUI: self.draw_face = False return - start_x = self.window_width - 10 + start_x = self.left_window_width - 10 def draw_body_part(body_part, end_y): safe_addstr(end_y - 3, start_x, '----------') safe_addstr(end_y - 2, start_x, '| ' + body_part[0:6] + ' |') @@ -1113,16 +1117,16 @@ class TUI: content += self.mode.list_available_modes(self) for i in range(self.size.y): safe_addstr(i, - self.window_width * (not self.mode.has_input_prompt), - ' ' * self.window_width) + self.left_window_width * (not self.mode.has_input_prompt), + ' ' * self.left_window_width) lines = [] for line in content.split('\n'): - lines += msg_into_lines_of_width(line, self.window_width) + lines += msg_into_lines_of_width(line, self.right_window_width) for i in range(len(lines)): if i >= self.size.y: break safe_addstr(i, - self.window_width * (not self.mode.has_input_prompt), + self.left_window_width * (not self.mode.has_input_prompt), lines[i]) def draw_screen(): @@ -1156,19 +1160,43 @@ class TUI: self.input_ = '' self.switch_mode('play') - def enter_ascii_art(command, height, width, with_pw=False): - if len(self.input_) > width: + def enter_ascii_art(command, height, width, + with_pw=False, with_size=False): + if with_size and self.ascii_draw_stage == 0: + width = len(self.input_) + if width > 36: + self.log_msg('? input too long, must be max 36; try again') + # TODO: move max width mechanism server-side + return + old_size = self.game.player.carrying.design[0] + if width != old_size.x: + # TODO: save remaining design? + self.game.player.carrying.design[1] = '' + self.game.player.carrying.design[0] = YX(old_size.y, width) + elif len(self.input_) > width: self.log_msg('? input too long, ' 'must be max %s; try again' % width) return - if len(self.input_) < width: - self.input_ += ' ' * (width - len(self.input_)) self.log_msg(' ' + self.input_) - self.full_ascii_draw += self.input_ + if with_size and self.input_ in {'', ' '}\ + and self.ascii_draw_stage > 0: + height = self.ascii_draw_stage + else: + if with_size: + height = self.ascii_draw_stage + 2 + if len(self.input_) < width: + self.input_ += ' ' * (width - len(self.input_)) + self.full_ascii_draw += self.input_ + if with_size: + old_size = self.game.player.carrying.design[0] + self.game.player.carrying.design[0] = YX(height, old_size.x) self.ascii_draw_stage += 1 if self.ascii_draw_stage < height: self.restore_input_values() else: + if with_pw and with_size: + self.send('%s_SIZE %s %s' % (command, YX(height, width), + quote(self.password))) if with_pw: self.send('%s %s %s' % (command, quote(self.full_ascii_draw), quote(self.password))) @@ -1280,7 +1308,7 @@ class TUI: self.restore_input_values() elif self.mode.has_input_prompt and key != '\n': # Return key self.input_ += key - max_length = self.window_width * self.size.y - len(input_prompt) - 1 + max_length = self.right_window_width * self.size.y - len(input_prompt) - 1 if len(self.input_) > max_length: self.input_ = self.input_[:max_length] elif key == self.keys['help'] and not self.mode.is_single_char_entry: @@ -1292,9 +1320,15 @@ class TUI: elif self.mode.name == 'enter_face' and key == '\n': enter_ascii_art('PLAYER_FACE', 3, 6) elif self.mode.name == 'enter_design' and key == '\n': - enter_ascii_art('THING_DESIGN', - self.game.player.carrying.design[0].y, - self.game.player.carrying.design[0].x, True) + if self.game.player.carrying.type_ == 'Hat': + enter_ascii_art('THING_DESIGN', + self.game.player.carrying.design[0].y, + self.game.player.carrying.design[0].x, True) + else: + enter_ascii_art('THING_DESIGN', + self.game.player.carrying.design[0].y, + self.game.player.carrying.design[0].x, + True, True) elif self.mode.name == 'take_thing' and key == '\n': pick_selectable('PICK_UP') elif self.mode.name == 'drop_thing' and key == '\n':