1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-15 19:13:07 +01:00

Fix and improve plugin startup / shutdown

This commit is contained in:
Ted John
2022-02-27 15:48:43 +00:00
parent b579d15119
commit e4a10b8eb4
3 changed files with 37 additions and 23 deletions

View File

@@ -386,6 +386,9 @@ ScriptEngine::ScriptEngine(InteractiveConsole& console, IPlatformEnvironment& en
void ScriptEngine::Initialise()
{
if (_initialised)
throw std::runtime_error("Script engine already initialised.");
auto ctx = static_cast<duk_context*>(_context);
ScCheats::Register(ctx);
ScClimate::Register(ctx);
@@ -445,11 +448,6 @@ void ScriptEngine::Initialise()
void ScriptEngine::RefreshPlugins()
{
if (!_initialised)
{
Initialise();
}
// Get a list of removed and added plugin files
auto pluginFiles = GetPluginFiles();
std::vector<std::string> plugins;
@@ -481,9 +479,6 @@ void ScriptEngine::RefreshPlugins()
{
SetupHotReloading();
}
// Start any new intransient plugins
StartIntransientPlugins();
}
std::vector<std::string> ScriptEngine::GetPluginFiles() const
@@ -568,6 +563,8 @@ void ScriptEngine::StartIntransientPlugins()
StartPlugin(plugin);
}
}
_intransientPluginsStarted = true;
}
void ScriptEngine::StopUnloadRegisterAllPlugins()
@@ -811,23 +808,32 @@ void ScriptEngine::Tick()
{
PROFILED_FUNCTION();
if (!_initialised)
{
Initialise();
RefreshPlugins();
}
if (_transientPluginsEnabled && !_transientPluginsStarted)
{
StartTransientPlugins();
}
CheckAndStartPlugins();
UpdateIntervals();
UpdateSockets();
ProcessREPL();
DoAutoReloadPluginCheck();
}
void ScriptEngine::CheckAndStartPlugins()
{
auto startIntransient = !_intransientPluginsStarted;
auto startTransient = !_transientPluginsStarted && _transientPluginsEnabled;
if (startIntransient || startTransient)
{
RefreshPlugins();
}
if (startIntransient)
{
StartIntransientPlugins();
}
if (startTransient)
{
StartTransientPlugins();
}
}
void ScriptEngine::ProcessREPL()
{
while (_evalQueue.size() > 0)