| 604 | */ |
| 605 | template <typename... T> |
| 606 | FLuaRetValues Call(lua_State* L, const char* FuncName, T&&... Args) |
| 607 | { |
| 608 | const auto Env = FLuaEnv::FindEnv(L); |
| 609 | if (!L || !FuncName) |
| 610 | { |
| 611 | return FLuaRetValues(Env, INDEX_NONE); |
| 612 | } |
| 613 | |
| 614 | lua_pushcfunction(L, ReportLuaCallError); |
| 615 | |
| 616 | lua_getglobal(L, FuncName); |
| 617 | if (lua_isfunction(L, -1) == false) |
| 618 | { |
| 619 | UE_LOG(LogUnLua, Warning, TEXT("Global function %s doesn't exist!"), UTF8_TO_TCHAR(FuncName)); |
| 620 | lua_pop(L, 2); |
| 621 | return FLuaRetValues(Env, INDEX_NONE); |
| 622 | } |
| 623 | |
| 624 | return CallFunctionInternal(Env, Forward<T>(Args)...); |
| 625 | } |
| 626 | |
| 627 | /** |
| 628 | * Call function in global Lua table. |