Lua: Проблемы с привязкой моей игровой сущности - PullRequest
1 голос
/ 11 декабря 2010

Игра, которую я делаю в настоящее время, имеет простую систему сущностей.У меня есть класс CEntity (без использования наследования, на основе компонентов) и менеджер сущностей.

CEntity связан с Lua с метатаблицей, и когда вы создаете новую сущность из Lua, новая сущность создается вC ++ в выделенных пользовательских данных.

Так что все будет в порядке, однако я столкнулся с одной огромной проблемой:

  • Как мне реализовать что-то вроде ents.GetByID ()?

ents.GetByID () должен возвращать ссылку на сущность с идентификатором x.Что я сейчас делаю: создаю новые пользовательские данные, заполняю memcpy () существующей сущности x.

Это, однако, явно не работает: во-первых, это портит менеджер сущностей, а во-вторых: если я изменяю«ссылочная» сущность, фактическая сущность остается прежней - у меня фактически есть две отдельные сущности.

  • Как мне вставить ссылку на существующий элемент данных в стеке?

1 Ответ

0 голосов
/ 11 декабря 2010

По сути, вам нужно привязать определенный ключ (скажем, ID) в реестре Lua к данным пользователя.Кроме того, memcpy = bad, mmkay?

Если бы вы написали простую функцию C, которая возвращает таблицу реестра Lua, было бы довольно тривиально и проще написать этот код на стороне Lua.

make_entity = function(ID, ...)
    local entity = CreateEntity(...);
    get_registry().EntityIDMap[ID] = entity;
    return entity;
end

get_entity = function(ID) 
    return get_registry().EntityIDMap[ID];
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...