def input(prompt, default='', allow=None, exclude='{}', length=None, with_none=None): #@ReservedAssignment """ This pops up a window requesting that the user enter in some text. It returns the entered text. @param prompt: A prompt that is used to ask the user for the text. @param default: A default for the text that this input can return. @param length: If given, a limit to the amount of text that this function will return. @param allow: If not None, then if an input character is not in this string, it is ignored. @param exclude: If not None, then if an input character is in this set, it is ignored. @param with_none: If True, performs a with None after the input. If None, takes the value from config.implicit_with_none. """ renpy.exports.mode('input') if has_screen("input"): widget_properties = { } widget_properties["input"] = dict(default=default, length=length, allow=allow, exclude=exclude) show_screen("input", _transient=True, _widget_properties=widget_properties, prompt=prompt) else: renpy.ui.window(style='input_window') renpy.ui.vbox() renpy.ui.text(prompt, style='input_prompt') renpy.ui.input(default, length=length, style='input_text', allow=allow, exclude=exclude) renpy.ui.close() renpy.exports.shown_window() roll_forward = renpy.exports.roll_forward_info() if not isinstance(roll_forward, basestring): roll_forward = None rv = renpy.ui.interact(mouse='prompt', type="input", roll_forward=roll_forward) renpy.exports.checkpoint(rv) if with_none is None: with_none = renpy.config.implicit_with_none if with_none: renpy.game.interface.do_with(None, None) return rv
def display_menu(items, window_style='menu_window', interact=True, with_none=None, caption_style='menu_caption', choice_style='menu_choice', choice_chosen_style='menu_choice_chosen', choice_button_style='menu_choice_button', choice_chosen_button_style='menu_choice_chosen_button', scope={ }, widget_properties=None, screen="choice", type="menu", #@ReservedAssignment predict_only=False, **kwargs): """ Displays a menu containing the given items, returning the value of the item the user selects. @param items: A list of tuples that are the items to be added to this menu. The first element of a tuple is a string that is used for this menuitem. The second element is the value to be returned if this item is selected, or None if this item is a non-selectable caption. @param interact: If True, then an interaction occurs. If False, no suc interaction occurs, and the user should call ui.interact() manually. @param with_none: If True, performs a with None after the input. If None, takes the value from config.implicit_with_none. """ if interact: renpy.exports.mode(type) choice_for_skipping() # The possible choices in the menu. choices = [ val for label, val in items ] while None in choices: choices.remove(None) # Roll forward. roll_forward = renpy.exports.roll_forward_info() if roll_forward not in choices: roll_forward = None # Auto choosing. if renpy.config.auto_choice_delay: renpy.ui.pausebehavior(renpy.config.auto_choice_delay, random.choice(choices)) # The chosen dictionary. chosen = renpy.game.persistent._chosen if chosen is None: chosen = renpy.game.persistent._chosen = { } # The location location=renpy.game.context().current # Show the menu. if has_screen(screen): item_actions = [ ] if widget_properties is None: props = { } else: props = widget_properties for (label, value) in items: if not label: value = None if value is not None: action = renpy.ui.returns(value) else: action = None label_chosen = ((location, label) in chosen) if renpy.config.choice_screen_chosen: item_actions.append((label, action, label_chosen)) else: item_actions.append((label, action)) show_screen(screen, items=item_actions, _widget_properties=props, _transient=True, **scope) else: renpy.ui.window(style=window_style, focus="menu") renpy.ui.menu(items, location=renpy.game.context().current, focus="choices", default=True, caption_style=caption_style, choice_style=choice_style, choice_chosen_style=choice_chosen_style, choice_button_style=choice_button_style, choice_chosen_button_style=choice_chosen_button_style, **kwargs) renpy.exports.shown_window() # Log the chosen choice. for label, val in items: if val is not None: log("Choice: " + label) else: log(label) log("") if interact: rv = renpy.ui.interact(mouse='menu', type=type, roll_forward=roll_forward) # Mark this as chosen. for label, val in items: if rv == val: chosen[(location, label)] = True for label, val in items: if rv == val: log("User chose: " + label) break else: log("No choice chosen.") log("") checkpoint(rv) if with_none is None: with_none = renpy.config.implicit_with_none if with_none: renpy.game.interface.do_with(None, None) return rv return None
def display_menu( items, window_style='menu_window', interact=True, with_none=None, caption_style='menu_caption', choice_style='menu_choice', choice_chosen_style='menu_choice_chosen', choice_button_style='menu_choice_button', choice_chosen_button_style='menu_choice_chosen_button', scope={}, widget_properties=None, screen="choice", type="menu", #@ReservedAssignment predict_only=False, **kwargs): """ Displays a menu containing the given items, returning the value of the item the user selects. @param items: A list of tuples that are the items to be added to this menu. The first element of a tuple is a string that is used for this menuitem. The second element is the value to be returned if this item is selected, or None if this item is a non-selectable caption. @param interact: If True, then an interaction occurs. If False, no suc interaction occurs, and the user should call ui.interact() manually. @param with_none: If True, performs a with None after the input. If None, takes the value from config.implicit_with_none. """ if interact: renpy.exports.mode(type) choice_for_skipping() # The possible choices in the menu. choices = [val for label, val in items] while None in choices: choices.remove(None) # Roll forward. roll_forward = renpy.exports.roll_forward_info() if roll_forward not in choices: roll_forward = None # Auto choosing. if renpy.config.auto_choice_delay: renpy.ui.pausebehavior(renpy.config.auto_choice_delay, random.choice(choices)) # The chosen dictionary. chosen = renpy.game.persistent._chosen if chosen is None: chosen = renpy.game.persistent._chosen = {} # The location location = renpy.game.context().current # Show the menu. if has_screen(screen): item_actions = [] if widget_properties is None: props = {} else: props = widget_properties for (label, value) in items: if not label: value = None if value is not None: action = renpy.ui.returns(value) else: action = None label_chosen = ((location, label) in chosen) if renpy.config.choice_screen_chosen: item_actions.append((label, action, label_chosen)) else: item_actions.append((label, action)) show_screen(screen, items=item_actions, _widget_properties=props, _transient=True, **scope) else: renpy.ui.window(style=window_style, focus="menu") renpy.ui.menu(items, location=renpy.game.context().current, focus="choices", default=True, caption_style=caption_style, choice_style=choice_style, choice_chosen_style=choice_chosen_style, choice_button_style=choice_button_style, choice_chosen_button_style=choice_chosen_button_style, **kwargs) renpy.exports.shown_window() # Log the chosen choice. for label, val in items: if val is not None: log("Choice: " + label) else: log(label) log("") if interact: rv = renpy.ui.interact(mouse='menu', type=type, roll_forward=roll_forward) # Mark this as chosen. for label, val in items: if rv == val: chosen[(location, label)] = True for label, val in items: if rv == val: log("User chose: " + label) break else: log("No choice chosen.") log("") checkpoint(rv) if with_none is None: with_none = renpy.config.implicit_with_none if with_none: renpy.game.interface.do_with(None, None) return rv return None
def input(prompt, default="", allow=None, exclude="{}", length=None, with_none=None): # @ReservedAssignment """ This pops up a window requesting that the user enter in some text. It returns the entered text. @param prompt: A prompt that is used to ask the user for the text. @param default: A default for the text that this input can return. @param length: If given, a limit to the amount of text that this function will return. @param allow: If not None, then if an input character is not in this string, it is ignored. @param exclude: If not None, then if an input character is in this set, it is ignored. @param with_none: If True, performs a with None after the input. If None, takes the value from config.implicit_with_none. """ renpy.exports.mode("input") roll_forward = renpy.exports.roll_forward_info() if not isinstance(roll_forward, basestring): roll_forward = None # use previous data in rollback if roll_forward is not None: default = roll_forward fixed = in_fixed_rollback() if has_screen("input"): widget_properties = {} widget_properties["input"] = dict( default=default, length=length, allow=allow, exclude=exclude, editable=not fixed ) show_screen("input", _transient=True, _widget_properties=widget_properties, prompt=prompt) else: renpy.ui.window(style="input_window") renpy.ui.vbox() renpy.ui.text(prompt, style="input_prompt") inputwidget = renpy.ui.input(default, length=length, style="input_text", allow=allow, exclude=exclude) # disable input in fixed rollback if fixed: inputwidget.disable() renpy.ui.close() renpy.exports.shown_window() # use normal "say" click behavior if input can't be changed if fixed: renpy.ui.saybehavior() rv = renpy.ui.interact(mouse="prompt", type="input", roll_forward=roll_forward) renpy.exports.checkpoint(rv) if with_none is None: with_none = renpy.config.implicit_with_none if with_none: renpy.game.interface.do_with(None, None) return rv
def input(prompt, default='', allow=None, exclude='{}', length=None, with_none=None): #@ReservedAssignment """ This pops up a window requesting that the user enter in some text. It returns the entered text. @param prompt: A prompt that is used to ask the user for the text. @param default: A default for the text that this input can return. @param length: If given, a limit to the amount of text that this function will return. @param allow: If not None, then if an input character is not in this string, it is ignored. @param exclude: If not None, then if an input character is in this set, it is ignored. @param with_none: If True, performs a with None after the input. If None, takes the value from config.implicit_with_none. """ renpy.exports.mode('input') if has_screen("input"): widget_properties = {} widget_properties["input"] = dict(default=default, length=length, allow=allow, exclude=exclude) show_screen("input", _transient=True, _widget_properties=widget_properties, prompt=prompt) else: renpy.ui.window(style='input_window') renpy.ui.vbox() renpy.ui.text(prompt, style='input_prompt') renpy.ui.input(default, length=length, style='input_text', allow=allow, exclude=exclude) renpy.ui.close() renpy.exports.shown_window() roll_forward = renpy.exports.roll_forward_info() if not isinstance(roll_forward, basestring): roll_forward = None rv = renpy.ui.interact(mouse='prompt', type="input", roll_forward=roll_forward) renpy.exports.checkpoint(rv) if with_none is None: with_none = renpy.config.implicit_with_none if with_none: renpy.game.interface.do_with(None, None) return rv