def send(): params = bottle.request.query if 'text' not in params: raise HTTPError(400, 'Need text to send!') if 'label' in params: label = params.label.lower() else: label = 'A' text = params.text color = constants.get_color(params.get('color', 'NONE')) mode = constants.get_mode(params.get('mode', 'COMPRESSED_ROTATE')) text = color + text text = general.parse_colors(text) if label == 'A': text = parse_labels(text) memory_entry = sign.find_entry(read_raw_memory_table(), label) if len(text) >= memory_entry['size']: raise HTTPError(400, 'Not enough space allocated. Need at least %s bytes.' % (len(text) + 1)) if label == 'A': sign.write(alphasign.Text(text, label=label, mode=mode)) else: sign.write(alphasign.String(text, label=label)) return {'result': 'Sucessfully sent text'}
def send(): params = bottle.request.query if 'text' not in params: raise HTTPError(400, 'Need text to send!') if 'label' in params: label = params.label.lower() else: label = 'A' text = params.text color = constants.get_color(params.get('color', 'NONE')) mode = constants.get_mode(params.get('mode', 'COMPRESSED_ROTATE')) text = color + text text = general.parse_colors(text) if label == 'A': text = parse_labels(text) memory_entry = sign.find_entry(read_raw_memory_table(), label) if len(text) >= memory_entry['size']: raise HTTPError( 400, 'Not enough space allocated. Need at least %s bytes.' % (len(text) + 1)) if label == 'A': sign.write(alphasign.Text(text, label=label, mode=mode)) else: sign.write(alphasign.String(text, label=label)) return {'result': 'Sucessfully sent text'}
def draw_messages(player, start_pos = 0): X, Y, W, H = 30, 40, 50, 10 libtcod.console_set_background_color(0, libtcod.black) libtcod.console_rect(0, X, Y, W, H, True, libtcod.BKGND_SET) libtcod.console_set_foreground_color(0, libtcod.white) if start_pos > 0: offset = 1 libtcod.console_print_left(0, X + 1, Y + 0, libtcod.BKGND_NONE, '? Too many messages; [any] to see more') else: offset = 0 try: for m, message in enumerate(player.message_log[start_pos:]): color = message.has_seen and libtcod.grey or libtcod.white libtcod.console_set_foreground_color(0, color) wrapped = wrap_text(message.text, W - 3, subsequent_indent = ' ') for line, text in enumerate(wrapped): if line == 0: if message.symbol1: libtcod.console_put_char_ex( 0, X + ((message.symbol2 is None) and 1 or 0), Y + offset, message.symbol1[0], message.symbol1[1] * (message.has_seen and 0.5 or 1), message.symbol1[2] * (message.has_seen and 0.5 or 1)) if message.symbol2: libtcod.console_put_char_ex( 0, X + 1, Y + offset, message.symbol2[0], message.symbol2[1] * (message.has_seen and 0.5 or 1), message.symbol2[2] * (message.has_seen and 0.5 or 1)) parsed_text, parse_data = parse_colors(text) libtcod.console_print_left(0, X + 3, Y + offset, libtcod.BKGND_NONE, parsed_text%parse_data) offset += 1 if offset >= H: if (not message.has_seen and line + 1 < len(wrapped)) or (m + 1 < len(player.message_log) and not player.message_log[start_pos+m+1].has_seen): raise TooManyMessages() else: raise LogIsFull() except LogIsFull: pass except TooManyMessages: draw_messages(player, start_pos + 1) return for message in player.message_log[start_pos:]: message.has_seen = True if start_pos > 0: libtcod.console_flush() key = libtcod.console_wait_for_keypress(True) draw_messages(player)
def write_file(request, label): memory_table = read_raw_memory_table() if 'type' in request: general.validate_label(label, request['type'], memory_table) memory_entry = sign.find_entry(memory_table, label) memory_table = sign.parse_raw_memory_table(memory_table) file_type = memory_entry['type'] if file_type == 'TEXT' or file_type == 'STRING': data = request['text'] #Prepend color. Ignore invalid colors. data = constants.get_color(request.get('color', 'NO_COLOR')) + data #parse colors data = general.parse_colors(data) #text-specific processing if file_type == 'TEXT': data = general.parse_labels(data, memory_table) #check size if len(data) > memory_entry['size']: raise HTTPError( 400, 'Not enough memory allocated. Requires %s, only %s allocated.' % (len(data), memory_entry['size'])) if file_type == 'TEXT': mode = constants.get_mode(request.get('mode', 'HOLD')) obj = alphasign.Text(data, label=label, mode=mode) elif file_type == 'STRING': obj = alphasign.String(data, label=label) elif file_type == 'DOTS': data = request['data'] rows = memory_entry['rows'] columns = memory_entry['columns'] obj = alphasign.Dots(rows, columns, label=label) for i, row in enumerate(data[:rows]): obj.set_row(i, row) sign.write(obj) return {'result': 'memory written successfully'}
def display_help(): help_menu_console = libtcod.console_new(80, 50) while True: for line, text in enumerate(HELP_TEXT): parsed_text, parse_data = parse_colors(text) libtcod.console_print_left(help_menu_console, 0, line, libtcod.BKGND_NONE, parsed_text%parse_data) libtcod.console_blit(help_menu_console, 0, 0, 80, 50, 0, 0, 0) libtcod.console_flush() key = libtcod.console_wait_for_keypress(True) if key.vk == libtcod.KEY_ESCAPE or key.c == ord('?'): break libtcod.console_delete(help_menu_console)
def write_file(request, label): memory_table = read_raw_memory_table() if 'type' in request: general.validate_label(label, request['type'], memory_table) memory_entry = sign.find_entry(memory_table, label) memory_table = sign.parse_raw_memory_table(memory_table) file_type = memory_entry['type'] if file_type == 'TEXT' or file_type == 'STRING': data = request['text'] #Prepend color. Ignore invalid colors. data = constants.get_color(request.get('color', 'NO_COLOR')) + data #parse colors data = general.parse_colors(data) #text-specific processing if file_type == 'TEXT': data = general.parse_labels(data, memory_table) #check size if len(data) > memory_entry['size']: raise HTTPError(400, 'Not enough memory allocated. Requires %s, only %s allocated.' % (len(data), memory_entry['size'])) if file_type == 'TEXT': mode = constants.get_mode(request.get('mode', 'HOLD')) obj = alphasign.Text(data, label=label, mode=mode) elif file_type == 'STRING': obj = alphasign.String(data, label=label) elif file_type == 'DOTS': data = request['data'] rows = memory_entry['rows'] columns = memory_entry['columns'] obj = alphasign.Dots(rows, columns, label=label) for i, row in enumerate(data[:rows]): obj.set_row(i, row) sign.write(obj) return {'result': 'memory written successfully'}
def display_message_log(player): message_log_console = libtcod.console_new(80, 40) start_on_line = 0 focus = 0 n_messages = len(player.message_log) while True: # draw the log libtcod.console_clear(message_log_console) libtcod.console_set_foreground_color(message_log_console, libtcod.white) libtcod.console_print_center(message_log_console, 40, 1, libtcod.BKGND_NONE, 'Message Log') offset = 3 line_n = 0 focus_age = player.message_log[focus].age focus_drawn = False try: for n, message in enumerate(player.message_log): for line, text in enumerate(wrap_text(message.text, 75, subsequent_indent = ' ')): if line_n < start_on_line: line_n += 1 if n == focus: raise FocusAboveScreen() continue if message.age == focus_age: shade = 1 else: shade = 0.5 libtcod.console_set_foreground_color(message_log_console, libtcod.white * shade) if line == 0: if n == focus: libtcod.console_put_char_ex( message_log_console, 0, offset, libtcod.CHAR_ARROW_E, libtcod.white, libtcod.black) if message.symbol1: libtcod.console_put_char_ex( message_log_console, (message.symbol2 is None) and 2 or 1, offset, message.symbol1[0], message.symbol1[1] * shade, message.symbol1[2] * shade ) if message.symbol2: libtcod.console_put_char_ex( message_log_console, 2, offset, message.symbol2[0], message.symbol2[1] * shade, message.symbol2[2] * shade ) parsed_text, parse_data = parse_colors(text) libtcod.console_print_left(message_log_console, 4, offset, libtcod.BKGND_NONE, parsed_text%parse_data) offset += 1 if offset >= 39: if focus_drawn: raise LogIsFull() else: raise FocusBelowScreen() if n == focus: focus_drawn = True except LogIsFull: pass except FocusAboveScreen: start_on_line = max(0, start_on_line - 35) continue except FocusBelowScreen: start_on_line += 35 continue libtcod.console_blit(message_log_console, 0, 0, 80, 40, 0, 0, 0) draw_hud(player) libtcod.console_flush() # wait for input key = libtcod.console_wait_for_keypress(True) if key.vk == libtcod.KEY_ESCAPE or key.c == ord('m'): break elif key.vk in DIRECTION_KEYS and DIRECTION_KEYS[key.vk][0] == 0: focus += DIRECTION_KEYS[key.vk][1] focus %= n_messages libtcod.console_delete(message_log_console)