cluautil.cc should eventually contain all of the functions for passing objects from and to lua, at least the shared ones.
Also cut down on clua.cc include list.
IGUSSYANPKGMX5YDQC7AI5ZWZLEQPIXA4KG3RZHNPMERL554HQWQC OIWB7TPX3LFYDGSVPUUVUGWTY7JB4PE6EBELDFZX7B3HIOWH25GQC ZWN4VTRSPTO3PH67MRVU5DR4X5W3A5PCBQTBRRPOLRO6JPQRYUQQC 7Y5HSDFKA5TPLS2TWTRFMQVX6UXUDHXU5MUMXQSDFAIY4THQ3BIQC QEEJFAETO6B2J4IWDIDCJ5UNIFNNHHG22IWF2CUJRTJJBNE47CWQC GQL5SIGBHLU3FMCE54XVGLRY5AZHRM6DUEB722REA2DPLGJSN6EQC SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC MQ62OAMLGJVRW2QIL4PAZRAU6PC52ZVGY2FCOBIY6IWGQIHMU5CAC WNC5SY6P2PBCU62Q2DB5J2M4HPDS5EJY76ZEPHRGGCLJ4BSLBSSQC LPTP6ZL7U4OVXLZ56TJKJ6HENDHE7ITFMFBXC5BKEBVXEGXPW44AC T7CCGLOZ25B7BQKKGR6IA6LWBRKUWTXLTIRXUQ4YKQRVAA7AHZKQC CJKLBIIM2ZTWTLGISXEZOGK2JANEYUSLOKG3BBOAYAY7AFG33ELQC 3A5FX3Y4RPKWQEHKKXZKXZJ7RKV6RKWT7GTR4WFE5UBWKV2HT4RQC K73AS36BODJSSKMT2LRFDKS7BAMETNFLWHZEPQEZFM6KQB6KRA4AC XP6MR3Q24DQOWNEGMSHJX54ZAISKOIF65IR65M4EOR45KR2OSFVQC RXYHE3C7R3EGCRZEJT2ZO4ALLRDR3HF66VHZZNF7TT3DFWZ6BJCQC XPIE6FG6SYZXNQFBRWUBJ3NR5Q6MOMRXAFW3WTKMSLMKKA55ZWCQC AUXHSGS4EFOPZ6TVZYWNVOUDO7NYKUKE3HBKGQQWTALSVFOE3HAAC LE5U6CTXEIETQN5GOVYF2K2VCISRXR3ULORXDKIKWYDVBG5GS3WAC SVY2PTCLXR3KNPQAWXVXTTGCC5DR334HOAKHYO3VDDRWM2BWMALAC UL7XFKMUX3WIU4O2LZANK4ECJ654UZPDBFGNXUEYZYOLKBYBCG6AC Q2FZIIGQECGP2FKKWLGDBBQVGCFZ4JTY53PFPJP6X7YKC23AQGFQC W52PCSHX72WAMWKG6L4BPUBVMO6E72KYYBNKAA7554KNOTY6V7WQC OYTCBRC7LE44EUVRZVYTOOVKQWJ6P6YE3FXTOGUTNKEMLNWPHKSQC MT3256427VMCV4JUFWCN7ULY4KXSND5ZL5THDKYNWWYOXXR5DLIQC NKONHW4JNY6HP2M63MNPM3H64ZWSUNUT5FX2STW4KTS4AMXJXXVQC ED62QWGKBPORWVKDFOQRKJXEIWZVNGR3O4KWQBDSRNPT36AYOQYAC SM6YRPYZS6LMDQA6X3VAOK2PGMUFKPD7JMWJISOQSMX2CBR4ISPAC YFJLINBBEHE7RBETTARSYNWSO6QJ6MSPXFMSPSH2742QFC3L55SQC NVSFIV2ZKP44XHCSCXG6OZVGL67OIFINC34J2EMKTA4KULCERUEAC 53QXO6XQ6QAKCN6T5ADIKZM6UZCSAOAVKIJBHRN56BUVA653OZFAC DCZMEKDHQWSQCQYQD6ZXB3XOMWLVLPSPVSBVVMPXMSZF7GO3BVCAC IIN7AVA6JYRBXH6ZYRR7BY7TV6PW7ANAQ2A3PD55FKBKKQFEEF2AC RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC E7DV36ZR6TOGBD75BHGARCMIQQS6MSV7V3A7M7V4LOFHEC5NF6CQC JDM5R3HYGXKQKZWY35QZ2KOB24TFZ3FW2PCNXCRCMWG72AZC5ZXQC LSI55NUVW3PC33MGHLN3BGJ5KL7SJTBWT4JEOTZ7ZGRS2SK4ON7AC AXQJOPTECRU3ECV3ICDUR6SGBIOIZT5HIOSJ77MRLF5ECGOITMDQC RGHXFBNIULRVRYLBGG5JZDMYVM2E2JJ2Y5KQPMU6PUS3V26G6ZXQC HQ5FYPDFIQNNDMKDSGWAAXYIVIRK42B4OBA2LESP2OA5SPKSTLVQC EGOIFEAXIWSCOQ5RHOXNA45JN6HNUI2KOPLGWGPJSXA7EXIAJ6QQC JCUAPVDH47W6LG4LU6S4QP6FZJJ2NVXJ6LKFSBMVY3AWMC2PALIAC #ifndef CLUAUTIL_H#define CLUAUTIL_Hstruct lua_State;struct activity_interrupt_data;int push_activity_interrupt(lua_State *ls, activity_interrupt_data *t);class map_def;void clua_push_map(lua_State *ls, map_def *map);void clua_push_coord(lua_State *ls, const coord_def &c);class dgn_event;void clua_push_dgn_event(lua_State *ls, const dgn_event *devent);// XXX: currently defined outside cluautil.cc.class monsters;void push_monster(lua_State *ls, monsters* mons);void lua_push_items(lua_State *ls, int link);#endif
#include "AppHdr.h"#include "cluautil.h"#include "clua.h"#include "l_libs.h"#include "delay.h"int push_activity_interrupt(lua_State *ls, activity_interrupt_data *t){if (!t->data){lua_pushnil(ls);return 0;}switch (t->apt){case AIP_HP_LOSS:{const ait_hp_loss *ahl = (const ait_hp_loss *) t->data;lua_pushnumber(ls, ahl->hp);lua_pushnumber(ls, ahl->hurt_type);return 1;}case AIP_INT:lua_pushnumber(ls, *(const int *) t->data);break;case AIP_STRING:lua_pushstring(ls, (const char *) t->data);break;case AIP_MONSTER:// FIXME: We're casting away the const...push_monster(ls, (monsters *) t->data);break;default:lua_pushnil(ls);break;}return 0;}void clua_push_map(lua_State *ls, map_def *map){map_def **mapref = clua_new_userdata<map_def *>(ls, MAP_METATABLE);*mapref = map;}void clua_push_coord(lua_State *ls, const coord_def &c){lua_pushnumber(ls, c.x);lua_pushnumber(ls, c.y);}void clua_push_dgn_event(lua_State *ls, const dgn_event *devent){const dgn_event **de =clua_new_userdata<const dgn_event *>(ls, DEVENT_METATABLE);*de = devent;}
class map_def;class dgn_event;void clua_push_map(lua_State *ls, map_def *map);void clua_push_coord(lua_State *ls, const coord_def &c);void clua_push_dgn_event(lua_State *ls, const dgn_event *devent);
#define MAP_METATABLE "dgn.mtmap"#define DEVENT_METATABLE "dgn.devent"#define MAPMARK_METATABLE "dgn.mapmark"#define MAPGRD_METATABLE "dgn.mapgrd"#define MAPGRD_COL_METATABLE "dgn.mapgrdcol"
#include "abl-show.h"#include "artefact.h"#include "command.h"#include "chardump.h"#include "cio.h"#include "delay.h"#include "dgnevent.h"#include "dungeon.h"
#include "food.h"#include "invent.h"#include "initfile.h"#include "itemname.h"#include "itemprop.h"#include "items.h"#include "item_use.h"#include "libutil.h"#include "macro.h"#include "mapdef.h"#include "message.h"#include "monstuff.h"#include "mon-util.h"#include "newgame.h"#include "notes.h"#include "output.h"#include "player.h"#include "religion.h"#include "skills2.h"#include "spl-util.h"
}}// Pushing various objects.static int push_activity_interrupt(lua_State *ls, activity_interrupt_data *t){if (!t->data){lua_pushnil(ls);return 0;}switch (t->apt){case AIP_HP_LOSS:{const ait_hp_loss *ahl = (const ait_hp_loss *) t->data;lua_pushnumber(ls, ahl->hp);lua_pushnumber(ls, ahl->hurt_type);return 1;}case AIP_INT:lua_pushnumber(ls, *(const int *) t->data);break;case AIP_STRING:lua_pushstring(ls, (const char *) t->data);break;case AIP_MONSTER:// FIXME: We're casting away the const...push_monster(ls, (monsters *) t->data);break;default:lua_pushnil(ls);break;
void clua_push_map(lua_State *ls, map_def *map){map_def **mapref = clua_new_userdata<map_def *>(ls, MAP_METATABLE);*mapref = map;}void clua_push_coord(lua_State *ls, const coord_def &c){lua_pushnumber(ls, c.x);lua_pushnumber(ls, c.y);}void clua_push_dgn_event(lua_State *ls, const dgn_event *devent){const dgn_event **de =clua_new_userdata<const dgn_event *>(ls, DEVENT_METATABLE);*de = devent;}