Изолировать связующий код привязок Lua от остальной части моего игрового движка

Я хочу добавить полную поддержку сценариев 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 моей программы?

5
задан tshepang 4 May 2014 в 07:51
поделиться