Files
fs2open.github.com/code/scripting/api/libs/tables.cpp
T
asarium d54d7d41e6 Output parameter information to JSON
Also fixes the parameter strings which currently could not be parsed by
the argument parser.
2020-06-06 23:45:36 +02:00

105 lines
2.4 KiB
C++

//
//
#include "tables.h"
#include "scripting/api/objs/shipclass.h"
#include "scripting/api/objs/weaponclass.h"
#include "ship/ship.h"
#include "weapon/weapon.h"
extern int ships_inited;
extern int Weapons_inited;
namespace scripting {
namespace api {
//**********LIBRARY: Tables
ADE_LIB(l_Tables, "Tables", "tb", "Tables library");
//*****SUBLIBRARY: Tables/ShipClasses
ADE_LIB_DERIV(l_Tables_ShipClasses, "ShipClasses", NULL, NULL, l_Tables);
ADE_INDEXER(l_Tables_ShipClasses, "number/string IndexOrName", "Array of ship classes", "shipclass", "Ship handle, or invalid ship handle if index is invalid")
{
if(!ships_inited)
return ade_set_error(L, "o", l_Shipclass.Set(-1));
const char* name;
if(!ade_get_args(L, "*s", &name))
return ade_set_error(L, "o", l_Shipclass.Set(-1));
int idx = ship_info_lookup(name);
if(idx < 0) {
try {
idx = std::stoi(name);
idx--; // Lua->FS2
} catch (const std::exception&) {
// Not a number
return ade_set_error(L, "o", l_Shipclass.Set(-1));
}
if (idx < 0 || idx >= ship_info_size()) {
return ade_set_error(L, "o", l_Shipclass.Set(-1));
}
}
return ade_set_args(L, "o", l_Shipclass.Set(idx));
}
ADE_FUNC(__len, l_Tables_ShipClasses, NULL, "Number of ship classes", "number", "Number of ship classes, or 0 if ship classes haven't been loaded yet")
{
if(!ships_inited)
return ade_set_args(L, "i", 0); //No ships loaded...should be 0
return ade_set_args(L, "i", Ship_info.size());
}
//*****SUBLIBRARY: Tables/WeaponClasses
ADE_LIB_DERIV(l_Tables_WeaponClasses, "WeaponClasses", NULL, NULL, l_Tables);
ADE_INDEXER(l_Tables_WeaponClasses, "number/string IndexOrWeaponName", "Array of weapon classes", "weapon", "Weapon class handle, or invalid weaponclass handle if index is invalid")
{
if(!Weapons_inited)
return ade_set_error(L, "o", l_Weaponclass.Set(-1));
const char* name;
if(!ade_get_args(L, "*s", &name))
return 0;
int idx = weapon_info_lookup(name);
if(idx < 0) {
idx = atoi(name);
// atoi is good enough here, 0 is invalid anyway
if (idx > 0)
{
idx--; // Lua --> C/C++
}
else
{
return ade_set_args(L, "o", l_Weaponclass.Set(-1));
}
}
return ade_set_args(L, "o", l_Weaponclass.Set(idx));
}
ADE_FUNC(__len, l_Tables_WeaponClasses, NULL, "Number of weapon classes", "number", "Number of weapon classes, or 0 if weapon classes haven't been loaded yet")
{
if(!Weapons_inited)
return ade_set_args(L, "i", 0);
return ade_set_args(L, "i", weapon_info_size());
}
}
}