FireURQ:Тултипы с помощью декораторов

Материал из IFВики
Версия от 20:23, 13 июня 2012; Fireton (обсуждение | вклад) (Отмена правки № 8164 участника Fireton (обсуждение))
Перейти к навигации Перейти к поиску

Пример со всплывающими подсказками, показанный Фаертоном перед релизом FireURQ 1.6.

100 HTML module goes here...
 :0
 pln
 pln
 pln Вы стоите на берегу быстрого <nowiki>[[ручья|!float("x1", 200, "Ручей шумит и бормочет, прохладная вода бежит на восток, к реке.")]]</nowiki>, весело бегущего между крупных замшелых <nowiki>[[валунов|!float("x2", 200, "Влажные большие валуны покрыты мхом и скользкими водорослями. Вода огибает их, и водоросли колышатся в потоке.")]]</nowiki>. Рядом с ручьём растёт раскидистое <nowiki>[[дерево|!float("x3", 300, "Это молодая плакучая ива, её длинные ветви колышит ветерок, и кажется, что шелест листьев переговаривается с журчаньем ручья...")]]</nowiki>, его ветви склоняются над водой, как будто дерево хочет напиться прохладной воды.
 end<br />
 :float ; unique id, width, text
 ; параметры:
 ; 1 - уникальный id (текст)
 ; 2 - ширина тултипа (число)
 ; 3 - текст тултипа<br />
 ; это id декораторов прямоугольника и текста тултипа
 rectid = "tiprect#%float_1$"
 textid = "tiptext#%float_1$"<br />
 if decor_#%rectid$_width = 0 then goto float_create ; если такой тултип уже есть, уничтожаем его
 decordel #%rectid$
 decordel #%textid$<br />
 :float_create
 ; создаём декораторы (почти полностью прозрачными)
 decoradd #%textid$ (0, 0, -2) TEXT float_3, 0x01030086, "arial.ttf[13]" ; текстовый (-2 - потому что "выше" всех)
 decor_#%textid$_width = float_2 ; задаём ширину текста
 decoradd #%rectid$ (0, 0, -1) RECT float_2+10, decor_#%textid$_height+10, 0x01f8c862 ; прямоугольник под текстом, чуть шире и выше текста<br />
 ; считаем позицию тултипа
 rect_y = mouse_y - decor_#%rectid$_height - 5 ; нижний край - над мышью
 if rect_y < 0 then rect_y = mouse_y + 5 ; если вылазит за экран, то пусть будет под мышью
 rect_x = mouse_x ; а левый край - прямо по мыши
 if rect_x + decor_#%rectid$_width > 800 then rect_x = 800 -  decor_#%rectid$_width ; если вылазит, скорректируем, чтобы не вылазил
 decormov #%rectid$ rect_x, rect_y ; перемещаем прямоугольник на вычисленную позицию
 decormov #%textid$ rect_x + 5, rect_y + 5 ; а текст - внутри прямоугольника<br />
 ; скриптуем декораторы (плавно зажечь, подождать 3 секунды и плавно потушить с небольшим сдвигом вниз)
 decor_#%textid$_script = "col 0xFF030086, 500 / pau 3000 / mvrx 0, 10, 1000/ col 0x01030086, 1000 / del"
 decor_#%rectid$_script = "col 0xFFf8c862, 500 / pau 3000 / mvrx 0, 10, 1000/ col 0x01f8c862, 1000 / del"
 end