У меня есть класс с методом GetEnemiesLua. Я связал этот класс с lua, используя SWIG, и я могу вызвать этот метод, используя мой код lua.
Я пытаюсь получить метод для возврата таблицы объектов lua.
Вот мой текущий код:
void CGame::GetEnemiesLua(){
std::vector<Unit*> enemies = callback->GetEnemyUnits();
if( enemies.empty()){
lua_pushnil(ai->L);
return;
} else{
lua_newtable(ai->L);
int top = lua_gettop(ai->L);
int index = 1;
for (std::vector<Unit*>::iterator it = enemies.begin(); it != enemies.end(); ++it) {
//key
lua_pushinteger(ai->L,index);//lua_pushstring(L, key);
//value
CUnit* unit = new CUnit(callback,*it,this);
ai->PushIUnit(unit);
lua_settable(ai->L, -3);
++index;
}
::lua_pushvalue(ai->L,-1);
}
}
PushIUnit выглядит следующим образом:
void CTestAI::PushIUnit(IUnit* unit){
SWIG_NewPointerObj(L,unit,SWIGTYPE_p_IUnit,1);
}
Для проверки у меня есть следующий код:
t = game:GetEnemiesLua()
if t == nil then
game:SendToConsole("t is nil! ")
end
Результат всегда 'n is nil', несмотря на то, что это неверно. Я поставил точки останова в коде, и он действительно идет по циклу, а не делает lua_pushnil
.
Так как мне заставить мой метод возвращать таблицу при вызове через lua?