对于我正在进行的项目,我们有大约2k定义我们用来识别游戏中的不同项目,它看起来像这样:
#define ITEMID_WEAPON_SWORD_PEARL 41
#define ITEMID_WEAPON_SWORD_CYCLONE 42
#define ITEMID_WEAPON_SWORD_INVADERS 43
#define ITEMID_WEAPON_SWORD_SWITCH 44
#define ITEMID_WEAPON_SWORD_MULTIBLADE 45
#define ITEMID_WEAPON_SWORD_KATANA 46
等等。请注意,这不是一个选择,它是由以前的开发人员设置的系统,并且在这一点上需要付出太多努力才能实用。
我被要求基本上制作一个制作系统,希望我可以使它干净整洁,我想用Lua。我的计划主要是做以下事情:
Cooking =
{
["Sandvich"] =
{
{ --In
{ITEMID_COOKING_BREAD, 2, -1},
{ITEMID_COOKING_MEAT, 1, -1},
{ITEMID_COOKING_TOMATO, 1, -1},
},
{ --Out
{ITEMID_COOKING_SANDVICH, 1}
}
}
}
我能看到的唯一问题是,就我所知,Lua本身无法读取C / C ++ #defines。 (也许它可以?那很好。)
我想知道是否有任何库或模块或者我可以用来阅读这些定义的内容,或者我是否应该使用其他方法而不是Lua?我承认自己相对不熟练,但考虑到起点,我应该能够以很少的努力获得一些东西。
答案 0 :(得分:3)
我不确定你的确切需求是什么。
如果您只需要用相应的数字替换这些标识符,运气好的话,您可以通过C预处理器(cpp
或gcc -E
)运行Lua文件。
如果要使用这些名称和值定义Lua变量,可以使用以下代码解析Lua中的C文件:
C=[[
#define ITEMID_WEAPON_SWORD_PEARL 41
#define ITEMID_WEAPON_SWORD_CYCLONE 42
#define ITEMID_WEAPON_SWORD_INVADERS 43
#define ITEMID_WEAPON_SWORD_SWITCH 44
#define ITEMID_WEAPON_SWORD_MULTIBLADE 45
#define ITEMID_WEAPON_SWORD_KATANA 46
]]
for k,v in C:gmatch("#define%s+(%S+)%s+(%d+)") do
_G[k]=tonumber(v)
end
如果您不想将变量设为全局变量,请使用其他表而不是_G
。
上面的代码只是一个测试。您可能希望逐行读取C文件或一次读取所有内容,然后进行匹配。
答案 1 :(得分:1)
您可以尝试使用boost::wave来解析这些标头。