Я заинтересован во внедрении системы диалога, аналогичной тому, что делается здесь http://fungusdocs.snozbot.com/lua_controlling_fungus.html.
-- Display text in a SayDialog
say("Hi there")
say "This syntax also works for say commands"
-- Display a list of options in a MenuDialog
-- (Note the curly braces here!)
local choice = choose{ "Go left", "Go right" }
if choice == 1 then
say("You chose left")
elseif choice == 2 then
say("You chose right")
end
Мой вывод из этого фрагмента кода lua состоит в том, что код очень легко написать и следовать ему, и я собираюсь использовать аналогичный подход. Что мне интересно, так это то, как это можно реализовать без остановки кода двигателя в ожидании выбора.
вызов функции выбирать {"Идти влево", "Идти вправо"} возвращать значение, из-за которого я хочу сказать, что это синхронный вызов. Поскольку мы вызываем код механизма синхронно, мы затем останавливаем механизм, но этот вызов функции не должен быть прямым ответом на вопрос - я считаю, что на него нужно ответить в обычном основном цикле, чтобы не мешать остальным программа.
Насколько я понимаю, единственный способ решить эту проблему - использовать многопоточность. чтобы скрипт обрабатывался в отдельном потоке, который при вызове выбора сначала добавляет приглашение, затем ожидает ответа на запрос, получает результат и затем продолжает выполнение сценария lua.
Что было бы хорошим способом решить эту проблему, не делая код lua слишком громоздким для работы?