mirror of
				https://github.com/TES3MP/openmw-tes3mp.git
				synced 2025-10-31 01:26:45 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			93 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			93 lines
		
	
	
	
		
			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);
 | |
|     }
 | |
| }
 |