Luaでメニューを調整できるようにしてみた
メニューの位置の調整と項目の追加をできるようにした。
lua_MenuPosXとlua_MenuPosYを弄るとメニューの位置が変わる。
lua_MenuTableに項目を追加するとitem="○○"の○○の項目が増える
-- menu table -- menu position lua_MenuPosX = 64 lua_MenuPosY = 32 -- create table lua_MenuTable = {} -- insert items lua_MenuTable[1] = { item="項目1" }; lua_MenuTable[2] = { item="項目2" }; lua_MenuTable[3] = { item="項目3" }; lua_MenuTable[4] = { item="戻る" }; -- get item num in lua_MenuTable function getTableNum() return table.maxn(lua_MenuTable) end -- get item in lua_MenuTable -- start index is 0 function getTableItem(index) if index < getTableNum() then return lua_MenuTable[index+1].item else return nil end end
C++コードだが、エラーチェックとしてない。
void cTestLuaModule::createMenuItem() { lua_getglobal(m_pLuaState, "lua_MenuPosX"); lua_isnumber(m_pLuaState, -1); m_PosX = lua_tointeger(m_pLuaState, -1); lua_pop(m_pLuaState, 1); lua_getglobal(m_pLuaState, "lua_MenuPosY"); lua_isnumber(m_pLuaState, -1); m_PosY = lua_tointeger(m_pLuaState, -1); lua_pop(m_pLuaState, 1); lua_getglobal(m_pLuaState, "getTableNum"); if(0 != lua_pcall(m_pLuaState, 0, 1, 0)) { perror(lua_tostring(m_pLuaState, -1)); } m_MenuItemNum = 0; if(lua_isnumber(m_pLuaState, -1)) { m_MenuItemNum = lua_tointeger(m_pLuaState, -1); lua_pop(m_pLuaState, 1); } m_pMenuItem = new TCHAR*[m_MenuItemNum]; int len = 0; int ret = 0; for(int i = 0; i < m_MenuItemNum; ++i) { lua_getglobal(m_pLuaState, "getTableItem"); lua_pushnumber(m_pLuaState, i); ret = lua_pcall(m_pLuaState, 1, 1, 0); if(0 == ret) { const char* str = lua_tostring(m_pLuaState, -1); len = strlen(str)+1; m_pMenuItem[i] = new TCHAR[len]; ::MultiByteToWideChar(CP_ACP, 0, str, -1, m_pMenuItem[i], len); lua_pop(m_pLuaState, 1); } } }