Meu mecanismo usa um sistema de entidade baseado em componentes internamente e quero vinculá-lo a Lua para scripts.
Agora, quero salvar as pessoas que escrevem scripts para digitar o trabalho. No C ++, para definir a posição de uma entidade, faça o seguinte:
pEntity->GetComponent< CPoint >()->SetPos( Vector( X, Y ) );
Isso significa que, se eu o vincular a Lua 1: 1, você também precisará:
ent:GetComponent( CP_POINT ):SetPos( 123, 456 )
Mas vamos ser honestos, você gostaria de digitar tanto apenas para definir a posição de uma entidade?
Acho que não, é por isso que "escondi" o sistema de componentes de Lua:
Agora, o que você faz é
ent:SetPos( 123, 456 )
O material do componente é tratado internamente. Você ainda pode adicionar e remover manualmente componentes de Lua com ent: AddComponent e ent: RemoveComponent, etc.
Agora, isso também não parece perfeito:
A meta-entidade da entidade fica confusa porque precisa assumir todas as funções de todos os componentes
Problemas de nomeação:
ent:SetJointMotorEnabled()
novamente parece meio ruim
Você tem alguma idéia de como eu poderia encontrar um melhor esquema de nomeação para funções de componentes, sem arriscar a comodidade dos scripts?
ent:"Point":SetPos(...)
..qual é quase o primeiro método novamente. Talvez use o segundo método para componentes comuns?