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_H
struct 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;
}