mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-01-15 23:49:55 +00:00
1b259e2d33
Created Package system
93 lines
No EOL
2.1 KiB
C++
93 lines
No EOL
2.1 KiB
C++
//
|
|
// Created by koncord on 14.05.16.
|
|
//
|
|
|
|
#include <Script/ScriptFunction.hpp>
|
|
#include "PublicFnAPI.hpp"
|
|
|
|
using namespace std;
|
|
|
|
unordered_map<string, Public *> Public::publics;
|
|
|
|
Public::~Public()
|
|
{
|
|
|
|
}
|
|
|
|
Public::Public(ScriptFunc _public, const std::string &name, char ret_type, const std::string &def) : ScriptFunction(_public, ret_type, def)
|
|
{
|
|
publics.emplace(name, this);
|
|
}
|
|
|
|
Public::Public(ScriptFuncLua _public, lua_State *lua, const std::string &name, char ret_type, const std::string &def) : ScriptFunction(
|
|
_public, lua, ret_type, def)
|
|
{
|
|
publics.emplace(name, this);
|
|
}
|
|
|
|
#if defined(ENABLE_PAWN)
|
|
Public::Public(ScriptFuncPAWN _public, AMX* amx, const std::string& name, char ret_type, const std::string& def): ScriptFunction(_public, amx, ret_type, def)
|
|
{
|
|
publics.emplace(name, this);
|
|
}
|
|
#endif
|
|
|
|
|
|
boost::any Public::Call(const std::string &name, const std::vector<boost::any> &args)
|
|
{
|
|
auto it = publics.find(name);
|
|
if (it == publics.end())
|
|
throw runtime_error("Public with name \"" + name + "\" does not exist");
|
|
|
|
return it->second->ScriptFunction::Call(args);
|
|
}
|
|
|
|
|
|
const std::string &Public::GetDefinition(const std::string &name)
|
|
{
|
|
auto it = publics.find(name);
|
|
|
|
if (it == publics.end())
|
|
throw runtime_error("Public with name \"" + name + "\" does not exist");
|
|
|
|
return it->second->def;
|
|
}
|
|
|
|
|
|
bool Public::IsLua(const std::string &name)
|
|
{
|
|
#if !defined(ENABLE_LUA)
|
|
return false;
|
|
#else
|
|
auto it = publics.find(name);
|
|
if (it == publics.end())
|
|
throw runtime_error("Public with name \"" + name + "\" does not exist");
|
|
|
|
return it->second->script_type == SCRIPT_LUA;
|
|
#endif
|
|
}
|
|
|
|
bool Public::IsPAWN(const std::string &name)
|
|
{
|
|
#if !defined(ENABLE_PAWN)
|
|
return false;
|
|
#else
|
|
auto it = publics.find(name);
|
|
|
|
if (it == publics.end())
|
|
throw runtime_error("Public with name \"" + name + "\" does not exist");
|
|
|
|
return it->second->script_type == SCRIPT_PAWN;
|
|
#endif
|
|
}
|
|
|
|
|
|
void Public::DeleteAll()
|
|
{
|
|
for (auto it = publics.begin(); it != publics.end(); it++)
|
|
{
|
|
Public *_public = it->second;
|
|
delete _public;
|
|
publics.erase(it);
|
|
}
|
|
} |