//--------------------------------------------------------------------------------------- void FSkookumScriptRuntime::on_world_cleanup(UWorld * world_p, bool session_ended_b, bool cleanup_resources_b) { //A_DPRINT("on_world_cleanup: %S %p\n", *world_p->GetName(), world_p); if (world_p->IsGameWorld()) { // Keep track of how many game worlds we got --m_num_game_worlds; // Set world pointer to null if it was pointing to us if (m_game_world_p == world_p) { m_game_world_p->OnTickDispatch().Remove(m_game_tick_handle); m_game_world_p = nullptr; SkUEClassBindingHelper::set_world(nullptr); } // Restart SkookumScript if initialized if (m_num_game_worlds == 0 && is_skookum_initialized()) { // Simple shutdown //SkookumScript::get_world()->clear_coroutines(); A_DPRINT( "SkookumScript resetting session...\n" " cleaning up...\n"); SkookumScript::deinitialize_gameplay(); SkookumScript::deinitialize_sim(); SkookumScript::initialize_sim(); A_DPRINT(" ...done!\n\n"); } } else if (world_p->WorldType == EWorldType::Editor) { // Set world pointer to null if it was pointing to us if (m_editor_world_p == world_p) { m_editor_world_p->OnTickDispatch().Remove(m_editor_tick_handle); m_editor_world_p = nullptr; } } }