/* * File: l_moninf.cc * Summary: User-accessible monster info. */ #include "AppHdr.h" #include "l_libs.h" #include "cluautil.h" #include "mon-info.h" #define MONINF_METATABLE "monster.info" void lua_push_moninf(lua_State *ls, monster_info *mi) { monster_info **miref = clua_new_userdata(ls, MONINF_METATABLE); *miref = mi; } #define MONINF(ls, n, var) \ monster_info *var = *(monster_info **) \ luaL_checkudata(ls, n, MONINF_METATABLE) #define MIRET1(type, field) \ static int moninf_get_##field(lua_State *ls) \ { \ MONINF(ls, 1, mi); \ lua_push##type(ls, mi->m_##field); \ return (1); \ } #define MIREG(field) { #field, moninf_get_##field } MIRET1(number, damage_level) LUAFN(moninf_get_damage_desc) { MONINF(ls, 1, mi); lua_pushstring(ls, mi->m_damage_desc.c_str()); return (1); } static const struct luaL_reg moninf_lib[] = { MIREG(damage_level), MIREG(damage_desc), { NULL, NULL } }; void cluaopen_moninf(lua_State *ls) { clua_register_metatable(ls, MONINF_METATABLE, moninf_lib, lua_object_gc); }