Прочитайте список параметров из LuaRef, используя LuaBridge

[РЕШЕНО]

Я создаю игровой движок, который использует LuaBridge для чтения компонентов для сущностей. В моем движке файл сущности выглядит так, где Компоненты — это список компонентов, которые есть у моей сущности, а остальные параметры используются для установки значений для каждого отдельного компонента:

-- myEntity.lua

Components = {"MeshRenderer", "Transform", "Rigidbody"}

MeshRenderer = {
    Type = "Sphere",
    Position = {0,300,0}
}

Transform = {
    Position = {0,150,0},
    Scale = {1,1,1},
    Rotation = {0,0,0}
}

Rigidbody = {
    Type = "Sphere",
    Mass = 1
}

В настоящее время я использую эту функцию (на С++), чтобы прочитать значение параметра (с учетом его имени) внутри LuaRef.

template<class T>
T readParameter(LuaRef& table, const std::string& parameterName)
{
    try {
        return table.rawget(parameterName).cast<T>();
    }
    catch (std::exception e) {
        // std::cout ...
        return NULL;
    }
}

Например, при вызове readVariable‹std::string›(myRigidbodyTable, Type), где myRigidbodyTable является LuaRef со значениями Rigidbody, эта функция должна возвращать std::string со значением Sphere.

Моя проблема заключается в том, что когда я заканчиваю чтение и сохранение значений моего компонента Transform, когда я хочу прочитать значения для Ridigbody, а мой движок считывает значение Type, в Stack:: push(lua_State* L, const std::string& str, std::error_code&).

Я почти уверен, что это связано с тем фактом, что мой компонент Transform хранит список значений для таких параметров, как Position, потому что у меня не было проблем при чтении компонентов, у которых было только одно значение для каждого параметра. Как правильно это сделать, если я что-то делаю не так?

Я также хотел бы отметить, что я новичок в LuaBridge, поэтому это может быть проблема новичка с решением, которое я не смог найти. Любая помощь приветствуется :)


person jorgmo02    schedule 28.04.2021    source источник


Ответы (1)


Обнаружил проблему, я не читал таблицу должным образом. Вместо

LuaRef myTable = getGlobal(state, tableName.c_str());

Я использовал следующее

LuaRef myTable = getGlobal(state, tableName.c_str()).getMetatable();
person jorgmo02    schedule 28.04.2021