Я действительно хочу добавить Lua Scripting в свой игровой движок. Я работаю с Lua и привязал его к C++, используя luabind, но мне нужна помощь в разработке того, как я буду строить свои игровые объекты с помощью Lua.Интеграция Lua для создания моих GameEntities в моей игровой машине?
Информация Двигатель:
компонент ориентированной, в основном каждый GameEntity
список components
, которые обновляются в дельта Т интервала. В основном Game Scenes
состоят из коллекций Game Entities.
Итак, вот дилемма:
Скажем, у меня есть этот Lua файл, чтобы определить GameEntity и его компоненты:
GameEntity =
{
-- Entity Name
"ZombieFighter",
-- All the components that make the entity.
Components =
{
-- Component to define the health of the entity
health =
{
"compHealth", -- Component In-Engine Name
100, -- total health
0.1, -- regeneration rate
},
-- Component to define the Animations of the entity
compAnimation =
{
"compAnimatedSprite",
spritesheet =
{
"spritesheet.gif", -- Spritesheet file name.
80, -- Spritesheet frame width.
80, -- Spritesheet frame height.
},
animations =
{
-- Animation name, Animation spritesheet coords, Animation frame duration.
{"stand", {0,0,1,0,2,0,3,0}, 0.10},
{"walk", {4,0,5,0,6,0,7,0}, 0.10},
{"attack",{8,0,9,0,10,0}, 0.08},
},
},
},
}
Как вы можете видеть, это GameEntity определяется 2-х компонентов, " compHealth
"и" compAnimatedSprite
". Эти две совершенно разные компоненты требуют совершенно разных параметров инициализации. Здравоохранение, требующее целого числа и поплавка (общее количество и регенерация), а с другой стороны - анимации, требующие имя листа спрайта, и определение всех анимаций (кадров, продолжительности и т. Д.).
Я хотел бы сделать какой-то абстрактный класс с помощью некоторого виртуального метода инициализатора, который может использоваться всеми моими компонентами, которые требуют связывания Lua, чтобы облегчить инициализацию Lua, но это кажется трудным, поскольку виртуальный класс не является будет иметь один виртуальный метод init. Это связано с тем, что для всех инициализаторов компонентов (или большинства из них) требуются разные параметры инициализации (компоненту здоровья требуется другой init, чем компонент Animated Sprite или компонент AI).
Что вы предлагаете упростить привязки Lua к конструкторам этих компонентов? или как вы это сделаете?
PS: Я должен использовать C++ для этого проекта.