mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2025-01-17 23:21:22 +00:00
Reduced code for userdataType significantly
UTYPE_* enum wasn't needed, meta2utype is now the meta string and return string for each userdata type
This commit is contained in:
parent
1b542c6501
commit
930527a3d6
1 changed files with 39 additions and 124 deletions
|
@ -87,101 +87,56 @@ static int lib_print(lua_State *L)
|
|||
return 0;
|
||||
}
|
||||
|
||||
enum
|
||||
{
|
||||
UTYPE_NULL=0,
|
||||
UTYPE_STATE,
|
||||
UTYPE_MOBJINFO,
|
||||
UTYPE_SFXINFO,
|
||||
|
||||
UTYPE_MOBJ,
|
||||
UTYPE_MAPTHING,
|
||||
|
||||
UTYPE_PLAYER,
|
||||
UTYPE_TICCMD,
|
||||
UTYPE_SKIN,
|
||||
UTYPE_POWERS,
|
||||
UTYPE_SOUNDSID,
|
||||
|
||||
UTYPE_VERTEX,
|
||||
UTYPE_LINE,
|
||||
UTYPE_SIDE,
|
||||
UTYPE_SUBSECTOR,
|
||||
UTYPE_SECTOR,
|
||||
UTYPE_FFLOOR,
|
||||
#ifdef HAVE_LUA_SEGS
|
||||
UTYPE_SEG,
|
||||
UTYPE_NODE,
|
||||
#endif
|
||||
UTYPE_MAPHEADER,
|
||||
|
||||
UTYPE_CVAR,
|
||||
|
||||
UTYPE_SECTORLINES,
|
||||
UTYPE_SIDENUM,
|
||||
#ifdef HAVE_LUA_SEGS
|
||||
UTYPE_NODEBBOX,
|
||||
UTYPE_NODECHILDREN,
|
||||
#endif
|
||||
|
||||
UTYPE_BBOX,
|
||||
|
||||
UTYPE_HUDINFO,
|
||||
UTYPE_PATCH,
|
||||
UTYPE_COLORMAP,
|
||||
UTYPE_CAMERA,
|
||||
};
|
||||
|
||||
#define META_UTYPE(name) {META_##name, UTYPE_##name}
|
||||
static const struct {
|
||||
const char *meta;
|
||||
UINT8 utype;
|
||||
const char *utype;
|
||||
} meta2utype[] = {
|
||||
META_UTYPE(STATE),
|
||||
META_UTYPE(MOBJINFO),
|
||||
META_UTYPE(SFXINFO),
|
||||
{META_STATE, "state_t"},
|
||||
{META_MOBJINFO, "mobjinfo_t"},
|
||||
{META_SFXINFO, "sfxinfo_t"},
|
||||
|
||||
META_UTYPE(MOBJ),
|
||||
META_UTYPE(MAPTHING),
|
||||
{META_MOBJ, "mobj_t"},
|
||||
{META_MAPTHING, "mapthing_t"},
|
||||
|
||||
META_UTYPE(PLAYER),
|
||||
META_UTYPE(TICCMD),
|
||||
META_UTYPE(SKIN),
|
||||
META_UTYPE(POWERS),
|
||||
META_UTYPE(SOUNDSID),
|
||||
{META_PLAYER, "player_t"},
|
||||
{META_TICCMD, "ticcmd_t"},
|
||||
{META_SKIN, "skin_t"},
|
||||
{META_POWERS, "player_t.powers"},
|
||||
{META_SOUNDSID, "skin_t.soundsid"},
|
||||
|
||||
META_UTYPE(VERTEX),
|
||||
META_UTYPE(LINE),
|
||||
META_UTYPE(SIDE),
|
||||
META_UTYPE(SUBSECTOR),
|
||||
META_UTYPE(SECTOR),
|
||||
META_UTYPE(FFLOOR),
|
||||
{META_VERTEX, "vertex_t"},
|
||||
{META_LINE, "line_t"},
|
||||
{META_SIDE, "side_t"},
|
||||
{META_SUBSECTOR, "subsector_t"},
|
||||
{META_SECTOR, "sector_t"},
|
||||
{META_FFLOOR, "ffloor_t"},
|
||||
#ifdef HAVE_LUA_SEGS
|
||||
META_UTYPE(SEG),
|
||||
META_UTYPE(NODE),
|
||||
{META_SEG, "seg_t"},
|
||||
{META_NODE, "node_t"},
|
||||
#endif
|
||||
META_UTYPE(MAPHEADER),
|
||||
{META_MAPHEADER, "mapheader_t"},
|
||||
|
||||
META_UTYPE(CVAR),
|
||||
{META_CVAR, "consvar_t"},
|
||||
|
||||
META_UTYPE(SECTORLINES),
|
||||
META_UTYPE(SIDENUM),
|
||||
{META_SECTORLINES, "sector_t.lines"},
|
||||
{META_SIDENUM, "line_t.sidenum"},
|
||||
#ifdef HAVE_LUA_SEGS
|
||||
META_UTYPE(NODEBBOX),
|
||||
META_UTYPE(NODECHILDREN),
|
||||
{META_NODEBBOX, "node_t.bbox"},
|
||||
{META_NODECHILDREN, "node_t.children"},
|
||||
#endif
|
||||
|
||||
META_UTYPE(BBOX),
|
||||
{META_BBOX, "bbox"},
|
||||
|
||||
META_UTYPE(HUDINFO),
|
||||
META_UTYPE(PATCH),
|
||||
META_UTYPE(COLORMAP),
|
||||
META_UTYPE(CAMERA),
|
||||
{NULL, UTYPE_NULL}
|
||||
{META_HUDINFO, "hudinfo_t"},
|
||||
{META_PATCH, "patch_t"},
|
||||
{META_COLORMAP, "colormap"},
|
||||
{META_CAMERA, "camera_t"},
|
||||
{NULL, NULL}
|
||||
};
|
||||
#undef META_UTYPE
|
||||
|
||||
static UINT8 GetUserdataUType(lua_State *L)
|
||||
// goes through the above list and returns the utype string for the userdata type
|
||||
// returns "unknown" instead if we couldn't find the right userdata type
|
||||
static const char *GetUserdataUType(lua_State *L)
|
||||
{
|
||||
UINT8 i;
|
||||
lua_getmetatable(L, -1);
|
||||
|
@ -198,57 +153,17 @@ static UINT8 GetUserdataUType(lua_State *L)
|
|||
}
|
||||
|
||||
lua_pop(L, 1);
|
||||
return UTYPE_NULL;
|
||||
return "unknown";
|
||||
}
|
||||
|
||||
// Return a string representing the type of userdata the given var is
|
||||
// e.g. players[0] -> "player_t"
|
||||
// or players[0].powers -> "player_t.powers"
|
||||
static int lib_userdataType(lua_State *L)
|
||||
{
|
||||
lua_settop(L, 1); // pop everything except arg 1 (in case somebody decided to add more)
|
||||
luaL_checktype(L, 1, LUA_TUSERDATA);
|
||||
switch (GetUserdataUType(L))
|
||||
{
|
||||
case UTYPE_STATE: lua_pushliteral(L, "state_t"); break;
|
||||
case UTYPE_MOBJINFO: lua_pushliteral(L, "mobjinfo_t"); break;
|
||||
case UTYPE_SFXINFO: lua_pushliteral(L, "sfxinfo_t"); break;
|
||||
|
||||
case UTYPE_MOBJ: lua_pushliteral(L, "mobj_t"); break;
|
||||
case UTYPE_MAPTHING: lua_pushliteral(L, "mapthing_t"); break;
|
||||
|
||||
case UTYPE_PLAYER: lua_pushliteral(L, "player_t"); break;
|
||||
case UTYPE_TICCMD: lua_pushliteral(L, "ticcmd_t"); break;
|
||||
case UTYPE_SKIN: lua_pushliteral(L, "skin_t"); break;
|
||||
case UTYPE_POWERS: lua_pushliteral(L, "player_t.powers"); break;
|
||||
case UTYPE_SOUNDSID: lua_pushliteral(L, "skin_t.soundsid"); break;
|
||||
|
||||
case UTYPE_VERTEX: lua_pushliteral(L, "vertex_t"); break;
|
||||
case UTYPE_LINE: lua_pushliteral(L, "line_t"); break;
|
||||
case UTYPE_SIDE: lua_pushliteral(L, "side_t"); break;
|
||||
case UTYPE_SUBSECTOR: lua_pushliteral(L, "subsector_t"); break;
|
||||
case UTYPE_SECTOR: lua_pushliteral(L, "sector_t"); break;
|
||||
case UTYPE_FFLOOR: lua_pushliteral(L, "ffloor_t"); break;
|
||||
#ifdef HAVE_LUA_SEGS
|
||||
case UTYPE_SEG: lua_pushliteral(L, "seg_t"); break;
|
||||
case UTYPE_NODE: lua_pushliteral(L, "node_t"); break;
|
||||
#endif
|
||||
case UTYPE_MAPHEADER: lua_pushliteral(L, "mapheader_t"); break;
|
||||
|
||||
case UTYPE_CVAR: lua_pushliteral(L, "cvar_t"); break;
|
||||
|
||||
case UTYPE_SECTORLINES: lua_pushliteral(L, "sector_t.lines"); break;
|
||||
case UTYPE_SIDENUM: lua_pushliteral(L, "line_t.sidenum"); break;
|
||||
#ifdef HAVE_LUA_SEGS
|
||||
case UTYPE_NODEBBOX: lua_pushliteral(L, "node_t.bbox"); break;
|
||||
case UTYPE_NODECHILDREN: lua_pushliteral(L, "node_t.children"); break;
|
||||
#endif
|
||||
|
||||
case UTYPE_BBOX: lua_pushliteral(L, "bbox"); break;
|
||||
|
||||
case UTYPE_HUDINFO: lua_pushliteral(L, "hudinfo_t"); break;
|
||||
case UTYPE_PATCH: lua_pushliteral(L, "patch_t"); break;
|
||||
case UTYPE_COLORMAP: lua_pushliteral(L, "colormap"); break;
|
||||
case UTYPE_CAMERA: lua_pushliteral(L, "camera_t"); break;
|
||||
default: return luaL_error(L, "Unknown userdata type");
|
||||
}
|
||||
lua_pushstring(L, GetUserdataUType(L));
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue