Очень полезные команды. Я, например, давно пытался узнать как отменить rollback, а то в бою (тактическая битва на гексагональной сетке) задетый скролл чинил неприятности.
Вот из моей библиотеки.
1. Перезапуск(не перезагрузка) и мгновенный выход(минуя "yes_no_promt").
Достали меня эти "Вы точно хотите выйти?", вот и сообразил нечто вот такое:
Это в секцию init:
Код:
def system_buttons():
if enable_overlays is True:
ui.vbox()
ui.textbutton(u"{font=System.ttf}{size=10}Перезапустить",clicked=ui.returns('start'),xmaximum=150,xfill=True,ymaximum=20,yfill=True)
ui.textbutton(u"{font=System.ttf}{size=10}Выйти",clicked=ui.returns('e_x_i_t'),xmaximum=150,xfill=True,ymaximum=20,yfill=True)
ui.close()
config.overlay_functions.append(system_buttons)
А это - после:
Код:
label e_x_i_t:
$ renpy.quit()
return
2. Среднее арифметическое
Код:
def avg(list):
tmp = 0.0
for i in range(len(list)):
tmp+=list[i]
return (tmp/len(list))
3. Сказать что-то в обычном режиме не выходя из питон-блока
Код:
def say(str):
ui.window(xalign=1.0,yalign=1.0)
ui.at(Position(xalign=0.05,yalign=0.1))
ui.text('%s' % str)
4. Короткий вызов ui.move
Код:
def uimove (src,dst,time):
sxp,syp = src
dxp,dyp = dst
ui.at(Move ((sxp,syp,0.5,0.5),(dxp,dyp,0.5,0.5),time,subpixel=True) )
5. Фунции для трансформа. Что делают - понятно из названия.
Код:
def trans_fadein(t, st, at):
t.zoom = min(1.0, 0.01 + st / 1.0)
t.alpha = min(1.0, 0.01 + st / 1.0)
return 0
def trans_alphain(t, st, at):
t.alpha = min(1.0, 0.01 + st / 1.0)
return 0
def trans_fadeout(d, st, at):
d.alpha = max(0.0, 1.0 - st / 2.0)
return 0
6. Взрыв частиц
Обязательные аргументыimg - файловый обьект или непосредственно имя png-картинки.
xs,ys - стартовая позиция.
xrad,yrad - горизонтальная/вертикальная границы разлёта
Необязательные аргументыwave - количество волн
cnt - количество частиц в волне
ВниманиеТак как содержит renpy.pause прерывает взаимодействие(на экране останутся только оверлеи).
Для плавного исчезновения частиц использует трансформ из предыдущего пункта.
Код:
def particle_burst(img, xs,ys, xrad,yrad, wave=10,cnt=100):
for ii in range (wave):
renpy.pause(0.1)
for i in range(cnt):
xd = renpy.random.random()
if xd > xs + xrad:
xd = xs + xrad
if xd < xs - xrad:
xd = xs - xrad
yd = renpy.random.random()
if yd > ys + yrad:
yd = ys + yrad
if yd < ys - yrad:
yd = ys - yrad
speed = renpy.random.random()
renpy.show(img,at_list=[Transform(function=trans_fadeout),Move((xs,ys,0.5,0.5),(xd,yd,0.5,0.5),speed)],tag='%d%d'%(i,ii))
for ii in range (wave):
for i in range(cnt):
renpy.transition(slow_dissolve)
renpy.hide('%d%d'%(i,ii))
7. Лёгкое расположение текста:
string - форматированная строка к выводу
x,y - позиция
anchor - якорь. Не дробь, а две буквы
Первая буква l - слева m - центр r - справа
Вторая буква u - сверху m - центр d - снизу
lu - слева-сверху, (0,0)
mm - в центре (0.5,0.5)
rm - справа по центру (1.0,0.5)
width = максимальная ширина
text2 не ограничивает ширину
Код:
def text(string,x,y,anchor,width=80):
point = anchor[:1]
if point == 'l':
xa = 0
elif point == 'm':
xa = 0.5
elif point == 'r':
xa = 1.0
else:
xa = 0.5
point = anchor[1:]
if point == 'u':
ya = 0
elif point == 'm':
ya = 0.5
elif point == 'd':
ya = 1.0
else:
ya = 0.5
del point
ui.at(Position(xpos=x,ypos=y,xanchor=xa,yanchor=ya))
ui.frame(background = Solid((253, 253, 253, 255)),xmaximum = width)
ui.text(string,style='txt')
def text2(string,x,y,anchor):
point = anchor[:1]
if point == 'l':
xa = 0
elif point == 'm':
xa = 0.5
elif point == 'r':
xa = 1.0
else:
xa = 0.5
point = anchor[1:]
if point == 'u':
ya = 0
elif point == 'm':
ya = 0.5
elif point == 'd':
ya = 1.0
else:
ya = 0.5
del point
ui.at(Position(xpos=x,ypos=y,xanchor=xa,yanchor=ya))
ui.text(string)