summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/l_food.cc
diff options
context:
space:
mode:
authorRobert Vollmert <rvollmert@gmx.net>2009-10-20 22:05:19 +0200
committerRobert Vollmert <rvollmert@gmx.net>2009-10-20 22:27:33 +0200
commitc6df756b86ae4e28bc342dffa6ab41a7c865fa9a (patch)
treebf186cca4cd530cc72229f1998626187e0665afd /crawl-ref/source/l_food.cc
parent52818f7c83ffb5143f798412ee8d4800fc9de7b7 (diff)
downloadcrawl-ref-c6df756b86ae4e28bc342dffa6ab41a7c865fa9a.tar.gz
crawl-ref-c6df756b86ae4e28bc342dffa6ab41a7c865fa9a.zip
Move remaining libraries from clua.cc.
That's l_file.cc, l_food.cc, l_global.cc.
Diffstat (limited to 'crawl-ref/source/l_food.cc')
-rw-r--r--crawl-ref/source/l_food.cc174
1 files changed, 174 insertions, 0 deletions
diff --git a/crawl-ref/source/l_food.cc b/crawl-ref/source/l_food.cc
new file mode 100644
index 0000000000..0855b4bad0
--- /dev/null
+++ b/crawl-ref/source/l_food.cc
@@ -0,0 +1,174 @@
+#include "AppHdr.h"
+
+#include "clua.h"
+#include "l_libs.h"
+
+#include "food.h"
+#include "invent.h"
+#include "items.h"
+#include "player.h"
+
+/////////////////////////////////////////////////////////////////////
+// Food information.
+
+static int food_do_eat(lua_State *ls)
+{
+ bool eaten = false;
+ if (!you.turn_is_over)
+ eaten = eat_food(-1);
+ lua_pushboolean(ls, eaten);
+ return (1);
+}
+
+static int food_prompt_eat_chunks(lua_State *ls)
+{
+ int eaten = 0;
+ if (!you.turn_is_over)
+ eaten = prompt_eat_chunks();
+
+ lua_pushboolean(ls, (eaten != 0));
+ return (1);
+}
+
+static int food_prompt_floor(lua_State *ls)
+{
+ int eaten = 0;
+ if (!you.turn_is_over)
+ {
+ eaten = eat_from_floor();
+ if (eaten == 1)
+ burden_change();
+ }
+ lua_pushboolean(ls, (eaten != 0));
+ return (1);
+}
+
+static int food_prompt_inventory(lua_State *ls)
+{
+ bool eaten = false;
+ if (!you.turn_is_over)
+ eaten = eat_from_inventory();
+ lua_pushboolean(ls, eaten);
+ return (1);
+}
+
+static int food_prompt_inventory_menu(lua_State *ls)
+{
+ bool eaten = false;
+ if (!you.turn_is_over)
+ eaten = prompt_eat_inventory_item();
+ lua_pushboolean(ls, eaten);
+ return (1);
+}
+
+static int food_can_eat(lua_State *ls)
+{
+ LUA_ITEM(item, 1);
+ bool hungercheck = true;
+
+ if (lua_isboolean(ls, 2))
+ hungercheck = lua_toboolean(ls, 2);
+
+ bool edible = item && can_ingest(item->base_type,
+ item->sub_type,
+ true,
+ true,
+ hungercheck);
+ lua_pushboolean(ls, edible);
+ return (1);
+}
+
+static bool eat_item(const item_def &item)
+{
+ if (in_inventory(item))
+ {
+ eat_inventory_item(item.link);
+ return (true);
+ }
+ else
+ {
+ int ilink = item_on_floor(item, you.pos());
+
+ if (ilink != NON_ITEM)
+ {
+ eat_floor_item(ilink);
+ return (true);
+ }
+ return (false);
+ }
+}
+
+static int food_eat(lua_State *ls)
+{
+ LUA_ITEM(item, 1);
+
+ bool eaten = false;
+ if (!you.turn_is_over)
+ {
+ // When we get down to eating, we don't care if the eating is courtesy
+ // an un-ided amulet of the gourmand.
+ bool edible = item && can_ingest(item->base_type,
+ item->sub_type,
+ false,
+ false);
+ if (edible)
+ eaten = eat_item(*item);
+ }
+ lua_pushboolean(ls, eaten);
+ return (1);
+}
+
+static int food_rotting(lua_State *ls)
+{
+ LUA_ITEM(item, 1);
+
+ bool rotting = false;
+ if (item && item->base_type == OBJ_FOOD && item->sub_type == FOOD_CHUNK)
+ rotting = food_is_rotten(*item);
+
+ lua_pushboolean(ls, rotting);
+ return (1);
+}
+
+static int food_dangerous(lua_State *ls)
+{
+ LUA_ITEM(item, 1);
+
+ bool dangerous = false;
+ if (item)
+ {
+ dangerous = (is_poisonous(*item) || is_mutagenic(*item)
+ || causes_rot(*item) || is_forbidden_food(*item));
+ }
+ lua_pushboolean(ls, dangerous);
+ return (1);
+}
+
+static int food_ischunk(lua_State *ls)
+{
+ LUA_ITEM(item, 1);
+ lua_pushboolean(ls,
+ item && item->base_type == OBJ_FOOD
+ && item->sub_type == FOOD_CHUNK);
+ return (1);
+}
+
+static const struct luaL_reg food_lib[] =
+{
+ { "do_eat", food_do_eat },
+ { "prompt_eat_chunks", food_prompt_eat_chunks },
+ { "prompt_floor", food_prompt_floor },
+ { "prompt_inventory", food_prompt_inventory },
+ { "prompt_inv_menu", food_prompt_inventory_menu },
+ { "can_eat", food_can_eat },
+ { "eat", food_eat },
+ { "rotting", food_rotting },
+ { "dangerous", food_dangerous },
+ { "ischunk", food_ischunk },
+ { NULL, NULL },
+};
+
+void cluaopen_food(lua_State *ls)
+{
+ luaL_openlib(ls, "food", food_lib, 0);
+}