Имитация СМС
Перейти к навигации
Перейти к поиску
Закидываем пару файлов в проект и пишем СМС-сообщения в строках типа:
"{#l=Привет!<<smile>>}Хм, снова смс с незнакомого номера..."
# забрасываем sms.rpy и 7dots.rpy в папку game вашего проекта и пишем смс-ки
# теги для смс:
# "{#l=Привет!}" - для смс от левого собеседника
# "{#r=И тебе привет!}" - для смс от правого собеседника
# "{#c=Лосяш покинул беседу.}" - для системных смс по центру
# "{#on}" или $ sms_on() - показать окно с смс
# "{#off}" или $ sms_off() - спрятать окно с смс
# "{#cls}" или $ sms_cls() - очистить окно с смс
# в одной строке может быть несколько разных тегов и обычный текст
# "<<smile>>" - вот так добавлять картинки
# историю сообщений можно просмотреть, листая экран мышкой или колесиком
# так же реализовано плавное исчезновение/появление текстбокса с учетои смс
init python:
# звуки смс
sms_c = "sms_c"
sms_l = "sms_l"
sms_r = "sms_r"
# длительность вибрации (если устройство ее поддерживает)
sms_vibrate = .5
# положение окна с смс
sms_xalign, sms_yalign = .75, .25
# размеры окна с смс (экран сотового)
sms_width, sms_height = 450, 600
# размеры одного смс
sms_w, sms_h = int(sms_width * .75), int(config.screen_height * .05)
# размеры заголовка с именем собеседника
sms_caption_height = 100
sms_caption_width = sms_width
# имя собеседника
sms_name = "Неизвестный"
# отступы для пузырьков смс
sms_xpadding = 32
sms_ypadding = 16
# внешние
sms_border = 16
# для хранения текста всех смс
sms_all = []
# теги для смс - в центре, слева, справа
sms_tags = ["c", "l", "r"]
# все тэги для смс, включая управление окном
sms_all_tags = sms_tags + ["on", "off", "cls"]
# получить текст и стиль смс из строки типа "r=Привет!"
def get_sms_text_style(txt):
smsstyle, smstext = get_key_val(txt)
if smsstyle in sms_tags:
return "sms_" + smsstyle, smstext
return None, txt
# изъять текст смс из текстбокса и закинуть в экран смс
def sms(text):
global sms_all, sms_last_what
# получить теги в виде строк
tags = get_tags_str(text)
# перебрать строки с тегами
for i in tags:
# разобрать строку на части, разделенные знаком =равно=
key, val = get_key_val(i)
# очистка окна смс
if key == "cls":
sms_cls()
# показать окно смс
if key == "on":
sms_on()
# спрятать окно смс
if key == "off":
sms_off()
# новое сообщение в окне смс
if key in sms_tags:
if val is None:
val = ""
# меняем смайлы на картинки
val = val.replace("<<", "{image=")
val = val.replace(">>", "}")
# добавляем на экран смс
sms_all.append(key + "=" + val)
renpy.restart_interaction()
# звук сообщения
sms_sound = "sms_" + key
if sms_sound:
splay(sms_sound)
if sms_vibrate > 0:
renpy.vibrate(sms_vibrate)
# из функции в action
SMS = renpy.curry(sms)
# показать экран смс
def sms_on(effect=dissolve):
renpy.show_screen('sms_screen', _layer="master")
renpy.transition(effect)
# спрятать экран смс
def sms_off(effect=dissolve):
renpy.hide_screen('sms_screen', layer="master")
renpy.transition(effect)
# очистить экран смс
def sms_cls(effect=dissolve):
global sms_all
sms_all = []
sms_on(effect=effect)
# для хранения последнего видимого в текстбоксе текста
sms_last_what = None
# листать вниз
yadjValue = float("inf")
yadj = ui.adjustment()
init:
# прозрачность
transform transparent(alpha=.0):
alpha alpha
# стиль для фрейма с смсками
style sms_frame is frame:
# изображение пустого экрана
background "smsbg"
yfill True
xminimum sms_width xmaximum sms_width
yminimum sms_height ymaximum sms_height
xmargin 0 ymargin 0
xpadding 0 ypadding 0
# стиль системных смс по центру
style sms_c is button:
background "#0000"
xalign .5
xmargin sms_border ymargin sms_border / 2
xpadding 0 ypadding sms_ypadding
# цвет системных сообщений
$ style.sms_c_text.color = "#0008"
# стиль смс слева
style sms_l is sms_c:
xpadding sms_xpadding ypadding sms_ypadding
xmaximum sms_w yminimum sms_h
xalign .0
background Frame("smsleft", 16, 16)
# стиль смс справа
style sms_r is sms_l:
xalign 1.0
background Frame("smsright", 16, 16)
# стиль окошка с именем собеседника
style sms_caption is button:
background Frame("smstop", 0, 0)
xfill True
xminimum sms_caption_width
yminimum sms_caption_height
# стиль окошка с именем собеседника
style sms_bottom is button:
background Frame("smsbottom", 0, 0)
xminimum sms_caption_width
yminimum sms_caption_height / 2
# стиль текста с именем собеседника
style sms_caption_text is button_text:
color "#fff"
font "fonts/robotoblack.ttf"
align (.4, .75)
# эффект для появления/исчезновения текстбокса
transform inout(t=.25):
on show:
alpha .0
linear t alpha 1.0
on hide:
alpha 1.0
linear t alpha .0
# проявить
transform inin(t=.25):
alpha .0
linear t alpha 1.0
# растворить
transform outout(t=.25):
alpha 1.0
linear t alpha .0
# экран с смсками
screen sms_screen:
python:
yadj.value = yadjValue
vbox:
align(sms_xalign, sms_yalign)
frame:
style "sms_frame"
vbox:
# имя собеседника
textbutton sms_name style "sms_caption" align(.5, .0)
# контейнер для пузырьков с сообщениями
frame:
xmargin 0 ymargin 0
xpadding 0 ypadding 0
background None
viewport:
id "sms_vp"
xinitial 1.0
yfill False
mousewheel True
draggable True
side_xfill True
transclude
yadjustment yadj
vbox:
xfill True
yanchor 1.0
yalign 1.0
for i in sms_all:
# пузырьки с сообщениями
$ sms_style, sms_text = get_sms_text_style(i)
textbutton sms_text:
if sms_style:
style sms_style
action []
textbutton " " style "sms_bottom" action [] yalign 1.0
# переписываем экран say
screen say(who, what):
# обработка тегов смс
on "show" action SMS(what)
on "hide" action SetVariable("sms_last_what", del_tags(what))
style_prefix "say"
window:
# чтобы пустое окно не маячило
if not del_tags(what):
# а плавно исчезало
if sms_last_what:
at outout()
else:
# на старте было вообще невидимым
at transparent()
else:
if not sms_last_what:
# плавно появлялось, если появился видимый текст
at inin()
else:
# чтобы текстовое окно плавно появлялось и исчезало в остальных случаях
at inout()
id "window"
if who is not None:
window:
id "namebox"
style "namebox"
text who id "who"
text what id "what"
## Если есть боковое изображение ("голова"), показывает её поверх текста.
## По стандарту не показывается на варианте для мобильных устройств — мало
## места.
if not renpy.variant("small"):
add SideImage() xalign 0.0 yalign 1.0
- Сссылка на архив с тестовым проектом: test-sms.zip
- Источник: Renpy для чайников: Имитация СМС
На главную страницу | Книга рецептов Энциклопедии Ren'Py | Renpy для чайников | Вернуться к началу статьи |