R50 5feefc6454c55873d32ea9cb0e32943e
Автоматизирую рутинные задачи

Интерпретатор текстовых квестов с поддержкой HTML и JavaScript

Добавлено 14 июл 2018 в 12:15
Кратко о PolyQuest:
PolyQuest является модификацией проекта UrqW: https://github.com/narmiel/UrqW/ и, соответственно, обладает всеми возможностями UrqW.

Дополнительные возможности PolyQuest обеспечивают:
  • Поддержку веб-разметки через тэги <html>...</html>.
    Можно использовать все те же возможности html, что и для операторов
    печати, плюс гиперссылки в стиле AkURQ:

<a href="btn:метка">


(подробнее см. здесь: http://urq.plut.info/system/files/AkURQ.rar)



  • Поддержку выполнения кода JavaScript, который заключается внутри
    тэгов <script>...</script>. Все описываемые тэги могут
    находиться на месте очередного оператора URQL.



  • Возможность изменения html-содержимого текущей (работающей)
    странички. Реализуется несколькими возможными тэгами: <appendContent
    ... > ... </appendContent>, <appendScript ... > ...
    </appendScript>, <appendStyle ... > ...
    </appendStyle>, добавляющими к указанному элементу,
    соответственно, html-код, js-код и css-разметку. Внутри открывающего
    тэга указывается один из двух текстовых атрибутов: либо element,
    значением которого может быть "head" или "body", либо elementId,
    указывающий id конкретного элемента страницы, к которому добавляется
    содержимое, расположенное между открывающим и закрывающим тэгами.



  • Возможность внедрения переменных URQL в выполняемые фрагменты
    JavaScript. Объявляются такие переменные с помощью нового оператора let,
    имеющего вид:

    let <переменная>=<значение>

    или

    let <переменная>

  • При каждом создании такой переменной её имя заносится в список
    переменных, доступных для js-кода. При входе в выполняемый участок js-
    кода значения всех таких переменных передаются внутри JavaScript, а при
    выходе из него результирующие значения вновь заносятся в одноимённые
    переменные URQL. Также переменные URQL и JavaScript синхронизируются при
    каждом входе в поток выполнения кода URQL (в направлении JavaScript
    -> URQL) и при выходе из него и передаче управления пользователю (в
    обратном направлении URQL -> JavaScript).



  • Возможность управления последовательностью проигрывания музыки. С
    этой целью введена системная локация endmusicloop, заход на которую
    осуществляется в момент окончания проигрывания музыкальной композиции (с
    помощью оператора music или js-метода MusicPlay - см. ниже). Таким
    образом можно зациклить не одну музыкальную композицию, а сразу
    несколько, выбирая каждую следующую последовательно или случайным
    образом.



  • Возможность осуществления дополнительных действий при сохранении и
    загрузке игры. Заход на локацию onsave осуществляется до момента
    сохранения, а заход на локацию onload -- до момента восстановления
    состояния игры, соответственно. После выполнения всех действий по
    восстановлению состояния также может осуществляться заход на локацию
    afterload. Целью подобных действий может быть, например, инициализация
    каких-то переменных внутри JavaScript, прорисовка графического инвентаря
    и др.



  • Ряд вспомогательных функций JavaScript, осуществляющих взаимодействие с URQL-частью. К ним относятся




  • readParagraph -- переход на локацию;



  • UrqExec -- выполнение заданного в качестве параметра кода URQL;



  • UrqEval -- оценка значения URQL-выражения, заданного в качестве параметра. Работает аналогично выражению if, но внутри скрипта;



  • MusicPlay -- проигрывание музыкальной композиции (если указан параметр); возобновление проигрывания музыки (если без параметра);



  • MusicStop -- остановка музыки;



  • SoundPlay -- проигрывание звукового фрагмента;



  • SoundStop -- остановка звука.


    Надо отметить, что музыка и звуки проигрываются двумя различными
    потоками. При каждом начале проигрывания звукового фрагмента (оператором
    sound или js-функцией SoundPlay) музыка приостанавливается, а по его
    окончании возобновляется вновь.
3e61007bb8 B04f6df343