summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/l_feat.cc
diff options
context:
space:
mode:
authorJude Brown <bookofjude@users.sourceforge.net>2009-11-27 14:52:31 +1000
committerJude Brown <bookofjude@users.sourceforge.net>2009-11-27 14:58:10 +1000
commit5194ce66d60829d7658eaf7c4e570bb88077d326 (patch)
tree9b44313f7b0cbfaa0b4d9512189867ba1fb36a1f /crawl-ref/source/l_feat.cc
parent74685cd97420cc5c40d83cc1ea688863c4dd1751 (diff)
downloadcrawl-ref-5194ce66d60829d7658eaf7c4e570bb88077d326.tar.gz
crawl-ref-5194ce66d60829d7658eaf7c4e570bb88077d326.zip
New Lua library: feat.
Provides wrappers for all of the feat_is_XXX functions from terrain.cc, as well as a few other functions. Also provides a macro which can wrap a function to take: * a set of co-ordinates (parsed with grd(coord_def(x, y))) * a string (parsed with dungeon_feature_by_name) * an integer (cast into dungeon_feature_type, can be fetched from dgn.grid(x, y)) All of the feat library functions can be used in this manner. For example: * feat.is_wall(x, y) * feat.is_wall(dgn.grid(x, y)) * feat.is_wall(7) * feat.is_wall("rock_wall")
Diffstat (limited to 'crawl-ref/source/l_feat.cc')
-rw-r--r--crawl-ref/source/l_feat.cc87
1 files changed, 87 insertions, 0 deletions
diff --git a/crawl-ref/source/l_feat.cc b/crawl-ref/source/l_feat.cc
new file mode 100644
index 0000000000..ce5cebce83
--- /dev/null
+++ b/crawl-ref/source/l_feat.cc
@@ -0,0 +1,87 @@
+/*
+ * File: l_featfeat.cc
+ * Summary: Boolean feat-related functions lua library "feat".
+ */
+
+#include "AppHdr.h"
+
+#include "clua.h"
+#include "cluautil.h"
+#include "l_libs.h"
+
+#include "coord.h"
+#include "dungeon.h"
+#include "terrain.h"
+
+#define FEATF(name, val) \
+ static int name(lua_State *ls) \
+ { \
+ if (lua_gettop(ls) == 2) \
+ { \
+ COORDS(c, 1, 2);\
+ lua_pushboolean(ls, val(grd(c)));\
+ } \
+ else if (lua_isnumber(ls, 1)) \
+ lua_pushboolean(ls, val(static_cast<dungeon_feature_type>( \
+ luaL_checkint(ls, 1)))); \
+ else if (lua_isstring(ls, 1)) \
+ lua_pushboolean(ls, val(dungeon_feature_by_name(\
+ luaL_checkstring(ls, 1))));\
+ return (1); \
+ }
+
+FEATF(_feat_destroys_items, feat_destroys_items)
+
+FEATF(_feat_is_wall, feat_is_wall)
+FEATF(_feat_is_solid, feat_is_solid)
+FEATF(_feat_is_opaque, feat_is_opaque)
+FEATF(_feat_is_closed_door, feat_is_closed_door)
+FEATF(_feat_is_secret_door, feat_is_secret_door)
+FEATF(_feat_is_statue_or_idol, feat_is_statue_or_idol)
+FEATF(_feat_is_rock, feat_is_rock)
+FEATF(_feat_is_permarock, feat_is_permarock)
+FEATF(_feat_is_stone_stair, feat_is_stone_stair)
+FEATF(_feat_is_staircase, feat_is_staircase)
+FEATF(_feat_is_escape_hatch, feat_is_escape_hatch)
+FEATF(_feat_is_trap, feat_is_trap)
+FEATF(_feat_is_sealable_portal, feat_sealable_portal)
+FEATF(_feat_is_portal, feat_is_portal)
+FEATF(_feat_is_stair, feat_is_stair)
+FEATF(_feat_is_travelable_stair, feat_is_travelable_stair)
+FEATF(_feat_is_gate, feat_is_gate)
+FEATF(_feat_is_water, feat_is_water)
+FEATF(_feat_is_watery, feat_is_watery)
+FEATF(_feat_is_altar, feat_is_altar)
+FEATF(_feat_is_player_altar, feat_is_player_altar)
+FEATF(_feat_is_branch_stairs, feat_is_branch_stairs)
+FEATF(_feat_is_critical, is_critical_feature)
+
+const struct luaL_reg feat_dlib[] =
+{
+{ "destroys_items", _feat_destroys_items },
+{ "is_wall", _feat_is_wall },
+{ "is_solid", _feat_is_solid },
+{ "is_opaque", _feat_is_opaque },
+{ "is_closed_door", _feat_is_closed_door },
+{ "is_secret_door", _feat_is_secret_door },
+{ "is_statue_or_idol", _feat_is_statue_or_idol },
+{ "is_rock", _feat_is_rock },
+{ "is_permarock", _feat_is_permarock },
+{ "is_stone_stair", _feat_is_stone_stair },
+{ "is_staircase", _feat_is_staircase },
+{ "is_escape_hatch", _feat_is_escape_hatch },
+{ "is_trap", _feat_is_trap },
+{ "is_sealable_portal", _feat_is_sealable_portal },
+{ "is_portal", _feat_is_portal },
+{ "is_stair", _feat_is_stair },
+{ "is_travelable_stair", _feat_is_travelable_stair },
+{ "is_gate", _feat_is_gate },
+{ "is_water", _feat_is_water },
+{ "is_watery", _feat_is_watery },
+{ "is_altar", _feat_is_altar },
+{ "is_player_altar", _feat_is_player_altar },
+{ "is_branch_stairs", _feat_is_branch_stairs },
+{ "is_critical", _feat_is_critical },
+
+{ NULL, NULL }
+};