Files
IWaniHugThatGator-Demo-Public/game/dev/actioneditor/menu_screen.rpy
2023-05-16 09:08:15 -05:00

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)]