Я работаю над игровым движком на C ++, используя Lua для поведения NPC. Я столкнулся с некоторыми проблемами во время проектирования.
Для всего, что требует более одного фрейма для выполнения, я хотел использовать связанный список процессов (которые являются классами C ++). Итак, это:
goto(point_a)
say("Oh dear, this lawn looks really scruffy!")
mowLawn()
создаст объект GotoProcess, у которого будет указатель на объект SayProcess, у которого будет указатель на объект MowLawnProcess. Эти объекты будут созданы мгновенно, когда появится NPC, дальнейшие сценарии не требуются.
Первый из этих объектов будет обновляться каждый кадр. Когда он будет завершен, он будет удален, а следующий будет использован для обновления.
Я расширил эту модель с помощью ParallelProcess, который будет содержать несколько процессов, которые обновляются одновременно.
Я обнаружил некоторые серьезные проблемы. Посмотрите на этот пример: я хочу, чтобы персонаж прошел к point_a, а затем впал в бешенство и просто атаковал любого, кто приближается. Сценарий будет выглядеть так:
goto(point_a)
while true do
character = getNearestCharacterId()
attack(character)
end
Это не сработает с моим дизайном. Прежде всего, символьная переменная будет установлена в начале, когда персонаж даже не начал переходить к точке point_a. Затем скрипт продолжит добавлять AttackProcesses навсегда из-за цикла while.
Я мог бы реализовать WhileProcess для цикла и оценивать скрипт построчно. Я сомневаюсь, что это увеличит читабельность кода.
Есть ли другой общий подход, который я не придумал для решения этой проблемы?