понедельник, 1 июля 2019 г.

FungusLua. Контроль Fungus

Модуль Fungus предоставляет несколько функций для работы со стандартными повествовательными функциями и Блок-Схемами Fungus.

Вы можете управлять диалогами Say и Menu практически так же, как вы используете команды Say и Menu на обычной Блок-Схеме Fungus.

Когда вы используете функцию menu(), вы предоставляете другую функцию Lua для вызова, когда выбрана эта опция меню. Обязательно определите функцию выше в файле, прежде чем ссылаться на нее в вызове menu(). Если вы явно не установите объект SayDialog или MenuDialog для использования по умолчанию, они создаются автоматически.

Пример Повествования


В этом примере скрипт Lua демонстрирует некоторые функции диалога Say и Menu. Чтобы попробовать их, добавьте объект Lua на сцену (Tools > Fungus > Create > Lua) и скопируйте этот скрипт в текстовое поле Lua Script. Вам также может понадобиться добавить объект EventSystem в сцену (GameObject> UI> Event System), чтобы кнопки меню реагировали на ввод пользователя. 

-- Показать текст в SayDialog
say("Hi there")
say "This syntax also works for say commands"
-- Показать список опций в MenuDialog
-- (Обратите внимание на фигурные скобки здесь!)
local choice = choose{ "Go left", "Go right" }
if choice == 1 then
    say("You chose left")
elseif choice == 2 then
    say("You chose right")
end


 Примечание. Синтаксис фигурных скобок означает, что список опций передается в качестве параметра таблицы в функцию Choose(). Это ярлык для написания этого:
local choice = choose( {"Go left", "Go right"} )

функции Say Dialog


Чтобы использовать пользовательский SayDialog:
  1. Добавить SayDialog на сцену (Tools > Fungus > Create > SayDialog)
  2. Выберите объект Lua в окне Иерархии и найдите компонент LuaBindings.
  3. Добавьте привязку(binding) к игровому объекту SayDialog и выберите компонент SayDialog. Нотабене Убедитесь, что вы выбрали правильный компонент!
  4. В сценарии Lua теперь вы можете активировать этот SayDialog с помощью функции setsaydialog(), передав ключ привязки SayDialog.

Чтобы изменить поведение функции say(), например, чтобы не ждать ввода, когда это сделано, сделайте это:

sayoptions.waitforinput = false

Вы можете связать объекты Character похожим образом и установить говорящего персонажа с помощью функции setcharacter().
Это список доступных функций для управления SayDialogs.
-- Опции для настройки поведения Say Dialog
sayoptions.clearprevious = true | false
sayoptions.waitforinput = true | false
sayoptions.fadewhendone = true | false
sayoptions.stopvoiceover = true | false
-- Установите активный saydialog для использования с функцией say
-- saydialog: привязка к компоненту SayDialog
setsaydialog (saydialog)
-- Получает активное диалоговое окно произнесения или создает его, если его нет
getsaydialog()
-- Установите активный персонаж в Say Dialog
-- персонаж: A Fungus.Character компонентимя спрайта в списке портретов персонажаThe name of a sprite in the character's portrait list
setcharacter(character, portrait)
-- Написать текст в активном Say Dialog
-- text: строка для записи в Say Dialog
-- voice: закадровый аудиоклип для воспроизведения
say(text, voiceclip)

Функции Menu Dialog

Вы настраиваете собственные MenuDialogs таким же образом, как SayDialogs, используя функцию setmenudialog () для установки активного MenuDialog.

Самый простой способ отобразить список опций - использовать функцию select (). Помните, что в массивах Lua индексы начинаются с 1, а не с 0, как в большинстве других языков.

Вы можете установить параметр, который будет отображаться, но недоступен для выбора, добавив к нему ~ character.
local choice = choose { "Option 1", "Option 2", "~Option 3" }
if choice == 1 then
    say "Chose option 1"
elseif choice == 2 then
    say "Chose option 2"
end
-- Option 3 is displayed but can't be selected
say "End options"

Полезным шаблоном является использование select () вместе с оператором goa Lua и метками. Это может быть удобно для выравнивания вложенных пунктов меню. Оператор goto не поддерживает переход в область действия локальной переменной, но это легко обойти, объявив локальную переменную во внешней области видимости. Вы также можете использовать глобальную переменную (не используя ключевое слово local).

local choice = 0
choice = choose { "Option A", "Option B" }
if choice == 1 then goto optionA end
if choice == 2 then goto optionB end
::optionA::
say "Chose option A"
goto endoptions
::optionB::
choice = choose { "Option C", "Option D" }
if choice == 1 then goto optionC end
if choice == 2 then goto optionD end
goto endoptions
::optionC::
say "Chose option C"
goto endoptions
::optionD::
say "Chose option D"
goto endoptions
::endoptions::
say "End options"


Функции menu () и menutimer () предоставляют альтернативный способ использования MenuDialog. Эти функции немедленно возвращаются, и функция обратного вызова вызывается, когда игрок выбирает опцию в меню.

Это список доступных функций MenuDialog.

-- Установите активный menudialog для использования с функцией menu setmenudialog(menudialog)
-- Получает диалоговое окно menu dialog, или создает его, если его еще нет
getmenudialog()
-- Показать список параметров меню и ждет, пока пользователь выберет один..
-- Когда параметр начинается ~ character он будет отображается, но не доступен 

-- Возвращает индекс выбранной опции.
-- Возвращает 0, если список опций пуст. Индексы массива Lua начинаются с 1, 

-- options: массив строк параметров. например { "Option 1", "Option 2" }
choose(options)
-- Список параметров меню и ждет, пользователь не выберет один, или истечет таймер.
-- Когда параметр начинается с ~ character он будет отображаться, но не будет доступен для выбора.
-- Возвращает индекс выбранной опции или значение по умолчанию, если таймер истекает.
-- Возвращает 0, если список опций пуст. Примечание: индексы массива Lua начинаются с 1, а не с 0).
-- options: массив строк параметров. например { "Option 1", "Option 2" }
-- duration: время игрок должен выбрать опцию.
-- defaultoption:  опция index для возврата, если таймер истекает.
choosetimer(options, duration, defaultoption)
-- Показать кнопку меню
-- text: текст для отображения на кнопке
-- callback: функция для вызова, когда выбрана эта опция
-- interactive (optional): если false, опция отображается как отключенное
menu(text, callback, interactive)
-- Отображение таймера, в течение которого игрок должен выбрать опцию.
-- duration: продолжительность отображения таймера.
-- callback: функция для вызова, если таймер истекает до выбора опции 

menutimer (duration, callback)
-- Очистить все отображаемые в данный момент пункты меню
clearmenu()

Функции  Portrait


Состояния портретов можно контролировать с помощью stage.

Сначала добавьте своих персонажей и сцену в список LuaBindings.

Затем в сценарии lua используйте команды stage, show, showPortrait и hide, чтобы управлять портретами на сцене.

-- Показать персонажа на этой стадии позиции
stage.show (character, "left")
-- показать персонажа с определенным портретом и переместить его
-- от одного этапа к другому.
stage.show(character, "happy", "offscreen right", "right")
-- показать конкретный портрет
stage.showPortrait(character, "amused")

-- скрыть персонажа
stage.hide(character)
-- Скрыть персонажа, исчезающего в позиции
stage.hide(character, "offscreen left")


Вы также можете указать любую доступную опцию Portrait, используя именованные аргументы.

stage.show{character=character, fromPosition="left", toPosition="right"}
stage.show{character=character, portrait="angry", facing="left"}
stage.hide{character=character}

Функция Conversation


Функция conversation() позволяет вам выполнять длительный обмен диалогами с помощью одного вызова функции. Многострочный синтаксис Lua [[ ]] здесь удобен. Поскольку функция dialog() принимает единственный строковый параметр, вы можете опустить обычные скобки функции.

conversation [[
john: Hello!
sherlock: Greetings.
]]


Смотрите документы для Conversation system.

Функции  Flowchart


Мы добавили специальные функции для say() и menu(), потому что они распространены в играх Fungus. Чтобы выполнить любые другие команды в Fungus от Lua, вы должны сделать это вместе с Блок-Схемой и Блоком, например так:
  1. Добавьте Блок-Схему и Блок (например, «MyBlock») в сцене.
  2. Добавьте команды Fungus, которые вы хотите выполнить из Lua, в Блоке. (например, Play Sound)
  3. Добавить объект Lua на сцену (Tools > Fungus > Create > Lua)
  4. В компоненте LuaBindings добавьте привязку к игровому объекту Блок-Схемы и выберите компонент Блок-Схемы.
  5. В компоненте LuaScript используйте функцию runblock() для выполнения Блока, передавая связанную Блок-Схему и имя Блока в качестве параметров.

runblock(flowchart, "MyBlock")

Вы также можете получить доступ к любой переменной Flowchart из Lua через функцию getvar().

-- Предположим, что переменная Flowchart связана с компонентом Flowchart в LuaBindings
-- MyVar - это строковая переменная, определенная в Flowchart
local myvar = getvar(flowchart, "MyVar")
print(myvar.value)
myvar.value = "New value for string"


Это список доступных функций для управления Блок-Схемами(Flowcharts).

-- Возвращает указанную переменную в блок-схему.
-- Чтобы получить доступ к значению переменной, используйте свойство .value. 

v = getvar(flowchart, "FloatVar")
-- v.value = 10 - устанавливает значение переменной равным 10
-- f = v.value - f теперь содержит 10
-- flowchart: Fungus Flowchart, содержащая блок для запуска.
-- varname: имя переменной, которую нужно получить.
getvar (
flowchart, varname)
-- запускает указанный блок в
flowchart
-- flowchart: Fungus Flowchart, содержащая блок для запуска.
-- blockname: имя блока для запуска.
--commandindex: индекс команды, с которой нужно начать выполнение
-- nowait: если false, будет приносить, пока блок не завершит выполнение. Если --true, то будет продолжено немедленно
runblock (блок-схема, имя блока, commandindex, nowait)

Комментариев нет:

Отправить комментарий

Примечание. Отправлять комментарии могут только участники этого блога.