Я действительно хочу добавить Lua Scripting в мой игровой движок. Я работаю с Lua и привязал его к C ++ с помощью luabind, но мне нужна помощь, чтобы спроектировать способ создания моих игровых сущностей с использованием Lua.
Информация о двигателе:
Component Oriented, в основном каждый GameEntity
представляет собой список components
, который обновляется с интервалом дельта T. В основном Game Scenes
состоит из коллекций игровых сущностей.
Итак, вот дилемма:
Допустим, у меня есть этот файл 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 определяется двумя компонентами: "compHealth
" и "compAnimatedSprite
". Эти два совершенно разных компонента требуют совершенно разных параметров инициализации. Здоровье требует целого числа и числа с плавающей запятой (общее и регенерация), а с другой стороны, анимаций, требующих имя листа спрайта, и определения всех анимаций (кадры, длительности и т. Д.).
Я бы хотел создать какой-то абстрактный класс с некоторым виртуальным методом инициализатора, который мог бы использоваться всеми моими компонентами, для которых требуется привязка Lua для облегчения инициализации из Lua, но это кажется трудным, потому что виртуальный класс не собирается иметь один виртуальный метод инициализации. Это связано с тем, что для всех инициализаторов компонента (или большинства из них) требуются разные параметры инициализации (компонент работоспособности требует инициализации, отличной от компонента Animated Sprite или компонента AI).
Что вы предлагаете сделать привязки Lua к конструкторам этих компонентов проще? или как бы ты это сделал?
PS: я должен использовать C ++ для этого проекта.