71 lines
2.7 KiB
Plaintext
71 lines
2.7 KiB
Plaintext
init python:
|
|
|
|
@renpy.pure
|
|
class ShowAlternateMenu(Action, DictEquality):
|
|
"""
|
|
:doc: menu_action
|
|
|
|
Show alternate menu screen at the bottom right corner of the cursor.
|
|
That screen can include textbuttons.
|
|
|
|
`button_list`
|
|
The list of tuple which has two elements. first is a string used
|
|
as text for textbutton and second is action.
|
|
`menu_width`
|
|
If the x-coordinate of the cursor plus this number is greater than
|
|
:var:`config.scren_witdth`, the menu will be displayed to the left
|
|
of the cursor. default is 300
|
|
`menu_height`
|
|
If the y-coordinate of the cursor plus this number is greater than
|
|
:var:`config.scren_witdth`, the menu will be displayed to the upper
|
|
of the cursor. default is 300
|
|
`style_prefix`
|
|
If not None, this is used for menu screen as style_prefix.
|
|
|
|
"""
|
|
def __init__(self, button_list, menu_width=300, menu_height=200, style_prefix=None):
|
|
self.button_list = button_list
|
|
self.style_prefix = style_prefix
|
|
self.menu_width = menu_width
|
|
self.menu_height = menu_height
|
|
|
|
def predict(self):
|
|
renpy.predict_screen("_alternate_menu", self.button_list,
|
|
menu_width=self.menu_width, menu_height=self.menu_height, style_prefix=self.style_prefix, _transient=True)
|
|
|
|
def __call__(self):
|
|
|
|
renpy.show_screen("_alternate_menu", self.button_list,
|
|
menu_width=self.menu_width, menu_height=self.menu_height, style_prefix=self.style_prefix, _transient=True)
|
|
renpy.restart_interaction()
|
|
|
|
|
|
init -1500:
|
|
$_alternate_menu_pos = None
|
|
screen _alternate_menu(button_list, menu_width=300, menu_height=200, style_prefix=None):
|
|
key ["game_menu", "dismiss"] action [Hide("_alternate_menu"), SetVariable("_alternate_menu_pos", None)]
|
|
modal True
|
|
|
|
if _alternate_menu_pos is None:
|
|
$_alternate_menu_pos = renpy.get_mouse_pos()
|
|
$(x, y) = _alternate_menu_pos
|
|
|
|
frame:
|
|
if style_prefix:
|
|
style_prefix style_prefix
|
|
pos (x, y)
|
|
if x + menu_width > config.screen_width:
|
|
xanchor 1.0
|
|
else:
|
|
xanchor 0.0
|
|
if y + menu_height > config.screen_height:
|
|
yanchor 1.0
|
|
else:
|
|
yanchor 0.0
|
|
vbox:
|
|
xfill False
|
|
for text, action in button_list:
|
|
if not isinstance(action, list):
|
|
$action = [action]
|
|
textbutton text action action+[Hide("_alternate_menu"), SetVariable("_alternate_menu_pos", None)]
|