Я ведущий разработчик для Bitfighter, и добавляю боты, написанные пользователем, используя Lua. Я работаю с С++ и Lua, используя Lunar, чтобы склеить их вместе.
Я пытаюсь сделать что-то, что, по-моему, должно быть довольно простым: у меня есть объект С++ в Lua (бот в коде ниже), и я вызываю на нем метод (findItems), который заставляет С++ искать область вокруг робота и вернуть список найденных объектов (TestItems и другие, не показанные здесь). Мой вопрос заключается в том, как мне собрать и вернуть список найденных элементов в С++, а затем перебрать их в Lua?
В принципе, я хочу заполнить < < Создайте список элементов, верните их в lua → → ниже, и внесите любые исправления, которые могут мне понадобиться в самом коде Lua, который приведен ниже.
Я пытался сохранить код простым, но полным. Надеюсь, здесь не слишком много! Спасибо!
Файл заголовка С++
class TestItem : public LuaObject
{
public:
TestItem(); // C++ constructor
///// Lua Interface
TestItem(lua_State *L) { } ; // Lua constructor
static const char className[];
static Lunar<TestItem>::RegType methods[];
S32 getClassID(lua_State *L) { return returnInt(L, TestItemType); }
};
class LuaRobot : public Robot
{
LuaRobot(); // C++ constructor
///// Lua Interface
LuaRobot(lua_State *L) { } ; // Lua constructor
static const char className[];
static Lunar<LuaRobot>::RegType methods[];
S32 findItems(lua_State *L);
}
С++.cpp файл
const char LuaRobot::className[] = "Robot"; // Class name in Lua
// Define the methods we will expose to Lua
Lunar<LuaRobot>::RegType LuaRobot::methods[] =
{
method(LuaRobot, findItems),
{0,0} // End method list
};
S32 LuaRobot::findItems(lua_State *L)
{
range = getIntFromStack(L, 1); // Pop range from the stack
thisRobot->findObjects(fillVector, range); // Put items in fillVector
<<<< Create list of items, return it to lua >>>>
for(int i=0; i < fillVector.size(); i++)
do something(fillVector[i]); // Do... what, exactly?
return something;
}
/////
const char TestItem::className[] = "TestItem"; // Class name in Lua
// Define the methods we will expose to Lua
Lunar<TestItem>::RegType TestItem::methods[] =
{
// Standard gameItem methods
method(TestItem, getClassID),
{0,0} // End method list
};
Код Lua
bot = LuaRobot( Robot ) -- This is a reference to our bot
range = 10
items = bot:findItems( range )
for i, v in ipairs( items ) do
print( "Item Type: " .. v:getClassID() )
end