Имитация СМС

Это старая версия. Новая здесь: https://renpyfordummies.blogspot.com/2018/08/gui.html

Имитация СМС. Что-то вроде режима NVL, но не NVL. Всё происходит в режиме ADV. На экран с СМС перескакивают только сообщения, которые начинаются с тегов "{#l}" и "{#r}" (сообщение от левого и правого собеседника соответственно). Есть команды для управления экраном СМС (показать, спрятать, очистить) и переменная для имени собеседника. Пользоваться просто – закинуть sms.rpy в папку game и можно вызывать экран командами.



# sms.rpy by Руслан barsunduk Небыков
# 10.04.2016 (доработано 19.06.2017) лизензия: CC0
init:
    transform _a(alpha=0.0):
        alpha alpha

init python:
    sms_text = []
    what2 = ""
    # заголовок можно менять в любой момент, меняя эту переменную
    sms_name = "Неизвестный"
    pp = 20
    # изъять текст смс из текстбокса и закинуть в экран смс
    def sms(txt):
        global what2
        what2 = txt
        if ("{#l}" in txt) or ("{#r}" in txt):
            sms_text.append(txt)
            what2 = ""
    SMS = renpy.curry(sms) # функцию в Action
    # показать экран смс
    def sms_on(effect=dissolve):
        renpy.show_screen("sms_screen", _layer="master")
        renpy.with_statement(effect)
    # спрятать экран смс
    def sms_off(effect=dissolve):
        renpy.hide_screen("sms_screen", layer="master")
        renpy.with_statement(effect)
    # очистить экран смс
    def sms_clear(effect=dissolve):
        global sms_text
        sms_text = []
        renpy.restart_interaction()

# экран с смсками
screen sms_screen:
    frame:
        # изображение пустого экрана
        background "smsbg"
        align(.85, .0)
        yfill True
        # ширина
        xminimum 450
        xmaximum 450
        # отступ сообщений от верха
        top_padding 92
        # контейнер для пузырьков с сообщениями
        vbox:
            xfill True
            yanchor 1.0
            yalign 1.0
            for i in sms_text:
                # пузырьки с сообщениями
                textbutton _("{color=#000}{font=roboto.ttf}" + i + "{/font}{/color}"):
                    xminimum 160
                    yminimum 100
                    top_padding pp
                    bottom_padding pp
                    left_padding pp*4
                    right_padding pp*4
                    if "{#r}" in i:
                        xalign 1.0
                        background Frame("smsright", 60, 38)
                    else:
                        xalign 0.0
                        background Frame("smsleft", 60, 38)
                    action []
            # это чтобы первые сообщения появлялись сверху
            frame:
                yfill True
                background None
        # заголовочная часть интерфейса, прячет верхние сообщения
        add "smscaption" align(.5, .0) yoffset -92
        # имя собеседника
        text "{color=#fff}{font=robotoblack.ttf}" + sms_name + "{/font}{/color}" align(.5, .0) yoffset -46

# копия стандартного экрана say, с небольшими изменениями,
# которые позволяют скрыть основное окно, если в тексте есть теги для смс
screen say:
    default side_image = None
    default two_window = False
    on "show" action SMS(what) # сначала обрабатываем наши теги для СМС
    on "replace" action SMS(what)
    if not two_window:
        window:
            id "window"
            if not what2:
                background None
            vbox:
                style "say_vbox"
                if who:
                    text who id "who"
                text what id "what":
                    if not what2:
                        at _a(0)
    else:
        vbox:
            style "say_two_window_vbox"
            if who and what2:
                window:
                    style "say_who_window"
                    if not what2:
                        background None
                    text who:
                        id "who"
                        if not what2:
                            at _a(0)
            window:
                id "window"
                if not what2:
                    background None
                vbox:
                    style "say_vbox"
                    text what id "what"
                    if not what2:
                        at _a(0)
    if side_image:
        add side_image
    else:
        add SideImage() xalign 0.0 yalign 1.0
    use quick_menu

Комментарии