summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/l_moninf.cc
diff options
context:
space:
mode:
authorRobert Vollmert <rvollmert@gmx.net>2009-10-27 19:16:50 +0100
committerRobert Vollmert <rvollmert@gmx.net>2009-10-27 19:16:50 +0100
commit5c2086ac6f8e8b53bfa9655cf02dca03c41850ce (patch)
treeadedbe0a773dc8e2113fdfad92d58c2f455c33e0 /crawl-ref/source/l_moninf.cc
parent4c3e4246769fecd226e08304a01d581e19a197d3 (diff)
downloadcrawl-ref-5c2086ac6f8e8b53bfa9655cf02dca03c41850ce.tar.gz
crawl-ref-5c2086ac6f8e8b53bfa9655cf02dca03c41850ce.zip
Start of monster_info lua binding.
Diffstat (limited to 'crawl-ref/source/l_moninf.cc')
-rw-r--r--crawl-ref/source/l_moninf.cc57
1 files changed, 57 insertions, 0 deletions
diff --git a/crawl-ref/source/l_moninf.cc b/crawl-ref/source/l_moninf.cc
new file mode 100644
index 0000000000..db21ca0074
--- /dev/null
+++ b/crawl-ref/source/l_moninf.cc
@@ -0,0 +1,57 @@
+/*
+ * 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<monster_info *>(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<monster_info>);
+}