Я хочу добавить полную поддержку сценариев Lua в мой игровой движок.Одна из самых больших целей, которые я поставил перед собой, - сохранить полную модульность.Это означает, что я не хочу, чтобы остальная часть моего движка, за исключением связующей части Lua, использовала какую-либо специфическую для Lua функциональность.
До сих пор это оказалось не сложно.Чистая связывающая часть функций C ++ и Lua - например, связывание объектов Vector, Color и Entity, а также таких модулей, как библиотека Draw или Physics, легко изолируются от остальной части движка.
Теперь моя проблема заключаетсяв событиях .Мне нужно предоставить возможность сценаристам реагировать на игровые события.Это включает вызов функций Lua из движка.
Примеры: вызов OnCreate
, OnUpdate
, OnCollide
для сущностей из C ++ в Lua.
Эти события происходят в моем базовом классе CEntity, и модуль Lua не имеет возможностизная, когда и как они происходят.
Возможные решения:
- Добавьте вызов функции к событиям в базовом объекте C ++, который вызывает событие вскрипт Lua
Плохо, плохо, плохо!Это привязка Lua, смешанная прямо с базовым классом сущностей!
- Добавить какую-то систему событий в мой движок, где события сущностей вызывают событие, которое также может быть перехвачено модулем привязки Lua и обработаносоответственно.
К сожалению, я не слишком много знаю об этом.Я уверен, что это будет довольно сложно реализовать, а также принесет некоторые незначительные проблемы с логикой и производительностью.
- Как я могу запускать события (вызывать функцию перехвата) в Lua из моего движка C ++ безиметь какой-либо код привязки Lua вне модуля привязки Lua моей программы?