def call_screen(_screen_name, **kwargs): """ :doc: screens The programmatic equivalent of the show screen statement. This shows `_screen_name` as a screen, then causes an interaction to occur. The screen is hidden at the end of the interaction, and the result of the interaction is returned. Keyword arguments not beginning with _ are passed to the scope of the screen. """ renpy.exports.mode('screen') show_screen(_screen_name, _transient=True, **kwargs) roll_forward = renpy.exports.roll_forward_info() rv = None try: rv = renpy.ui.interact(mouse="screen", type="screen", roll_forward=roll_forward) return rv finally: renpy.exports.checkpoint(rv) with_none = renpy.config.implicit_with_none if with_none: renpy.game.interface.do_with(None, 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') 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 notify(message): """ :doc: other Causes Ren'Py to display the `message` using the notify screen. By default, this will cause the message to be dissolved in, displayed for two seconds, and dissolved out again. This is useful for actions that otherwise wouldn't produce feedback, like screenshots or quicksaves. Only one notification is displayed at a time. If a second notification is displayed, the first notification is replaced. """ hide_screen('notify') show_screen('notify', message=message) restart_interaction()
def call_screen(_screen_name, **kwargs): """ :doc: screens The programmatic equivalent of the show screen statement. This shows `_screen_name` as a screen, then causes an interaction to occur. The screen is hidden at the end of the interaction, and the result of the interaction is returned. Keyword arguments not beginning with _ are passed to the scope of the screen. """ renpy.exports.mode('screen') show_screen(_screen_name, _transient=True, **kwargs) roll_forward = renpy.exports.roll_forward_info() try: rv = renpy.ui.interact(mouse="screen", type="screen", roll_forward=roll_forward) renpy.exports.checkpoint(rv) except renpy.game.JumpException: with_none = renpy.config.implicit_with_none if with_none: renpy.game.interface.do_with(None, None) raise with_none = renpy.config.implicit_with_none if with_none: renpy.game.interface.do_with(None, None) return rv
def call_screen(_screen_name, **kwargs): """ :doc: screens The programmatic equivalent of the show screen statement. This shows `_screen_name` as a screen, then causes an interaction to occur. The screen is hidden at the end of the interaction, and the result of the interaction is returned. Keyword arguments not beginning with _ are passed to the scope of the screen. """ renpy.exports.mode("screen") show_screen(_screen_name, _transient=True, **kwargs) roll_forward = renpy.exports.roll_forward_info() try: rv = renpy.ui.interact(mouse="screen", type="screen", roll_forward=roll_forward) except (renpy.game.JumpException, renpy.game.CallException), e: rv = e
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 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') 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