Меню в виде анимации отгибающейся страницы

init -4 python:
    # функции из 7dots.rpy
    window_center()
    images_auto()
init:
    $ menu_visible = False
    # пауза между кадрами анимации
    $ t = 0.03
    # анимация отгибания листа
    image list = anim.TransitionAnimation("list2", t, diss, "list3", t, diss, "list4")
    # анимация возврата листа на место
    image listoff = anim.TransitionAnimation("list4", t, diss, "list3", t, diss, "list2")
    # черный фон сэйбокса
    $ style.window.background = "#000000ff"

# экран с кнопками
screen scr_btns:
    # таймер - ждём, когда закончится анимация
    timer t*2 repeat False action SetVariable("menu_visible", True)
    # если анимация закончилась, показываем кнопки
    if menu_visible:
        # кнопка сворачивания листа в виде самого листа
        imagebutton idle "list4" hover "list4" focus_mask True xalign 1.0 yalign 0.0 action [Show("scr_list"),Hide("scr_btns")]
        # кнопки меню
        imagebutton auto "btn back %s" xpos config.screen_width-160 ypos 20 focus_mask True action [Rollback()]
        imagebutton auto "btn pref %s" xpos config.screen_width-80 ypos 40 focus_mask True action ShowMenu("preferences")
        imagebutton auto "btn hide %s" xpos config.screen_width-55 ypos 105 focus_mask True action HideInterface()
    else:
        # отображаем анимацию
        add "list" xalign 1.0 yalign 0.0

# экран с листком
screen scr_list:
    if menu_visible:
        # отображаем анимацию сворачивания
        add "listoff" xalign 1.0 yalign 0.0
    else:
        # кнопка - уголок листа
        imagebutton idle "list1" hover "list2" focus_mask True xalign 1.0 yalign 0.0 action [Show("scr_btns"), Hide("scr_list")]
    # таймер - ждём, когда закончится анимация
    timer t*2 repeat False action SetVariable("menu_visible", False)

label start:
    # отображаем наше свёрнутое меню
    show screen scr_list
    scene cg
    "Текст новеллы...\nСтраница 1"
    "Страница 2"
    "Страница 3"
    return

Комментарии