This repository has been archived on 2024-10-22. You can view files and clone it, but cannot push or open issues or pull requests.
YimMenu/src/script_mgr.cpp

54 lines
1.1 KiB
C++
Raw Normal View History

#include "script_mgr.hpp"
2019-03-21 20:18:31 +01:00
#include "common.hpp"
#include "gta/script_thread.hpp"
#include "gta/tls_context.hpp"
#include "gta_util.hpp"
2019-07-29 23:19:21 +02:00
#include "invoker.hpp"
2019-03-21 20:18:31 +01:00
#include "pointers.hpp"
namespace big
{
script* script_mgr::add_script(std::unique_ptr<script> script)
2019-03-21 20:18:31 +01:00
{
std::lock_guard lock(m_mutex);
auto* ret = script.get();
2019-03-21 20:18:31 +01:00
m_scripts.push_back(std::move(script));
return ret;
}
void script_mgr::remove_script(script* scr)
{
std::lock_guard lock(m_mutex);
std::erase_if(m_scripts, [scr](auto& iter) {
return iter.get() == scr;
});
2019-03-21 20:18:31 +01:00
}
void script_mgr::remove_all_scripts()
{
std::lock_guard lock(m_mutex);
m_scripts.clear();
}
script_list& script_mgr::scripts()
{
return m_scripts;
}
2019-03-21 20:18:31 +01:00
void script_mgr::tick()
{
gta_util::execute_as_script(RAGE_JOAAT("main_persistent"), std::mem_fn(&script_mgr::tick_internal), this);
}
void script_mgr::tick_internal()
{
static bool ensure_main_fiber = (ConvertThreadToFiber(nullptr), true);
std::lock_guard lock(m_mutex);
for (auto const& script : m_scripts)
if (script->is_enabled())
script->tick();
2019-03-21 20:18:31 +01:00
}
2022-09-30 20:41:26 +02:00
}