| 440 | } |
| 441 | |
| 442 | void Delete(HEngine engine) |
| 443 | { |
| 444 | { |
| 445 | ScopedExtensionParams params(engine); |
| 446 | |
| 447 | dmExtension::Event event; |
| 448 | event.m_Event = EXTENSION_EVENT_ID_ENGINE_DELETE; |
| 449 | dmExtension::DispatchEvent( params, &event ); |
| 450 | } |
| 451 | |
| 452 | if (engine->m_MainCollection) |
| 453 | dmResource::Release(engine->m_Factory, engine->m_MainCollection); |
| 454 | dmGameObject::PostUpdate(engine->m_Register); |
| 455 | |
| 456 | dmGameObject::DeleteCollections(engine->m_Register); // Delete all collections and game objects |
| 457 | |
| 458 | dmHttpClient::ShutdownConnectionPool(); |
| 459 | |
| 460 | // Reregister the types before the rest of the contexts are deleted |
| 461 | if (engine->m_Factory && engine->m_ResourceTypeContexts.Size() > 0) { |
| 462 | dmResource::DeregisterTypes(engine->m_Factory, &engine->m_ResourceTypeContexts); |
| 463 | } |
| 464 | |
| 465 | dmGameObject::ComponentTypeCreateCtx component_create_ctx; |
| 466 | SetupComponentCreateContext(engine, component_create_ctx); |
| 467 | |
| 468 | dmGameObject::DestroyRegisteredComponentTypes(&component_create_ctx); |
| 469 | |
| 470 | dmGameSystem::ScriptLibContext script_lib_context; |
| 471 | script_lib_context.m_Factory = engine->m_Factory; |
| 472 | script_lib_context.m_Register = engine->m_Register; |
| 473 | if (engine->m_SharedScriptContext) { |
| 474 | script_lib_context.m_LuaState = dmScript::GetLuaState(engine->m_SharedScriptContext); |
| 475 | dmGameSystem::FinalizeScriptLibs(script_lib_context); |
| 476 | dmEngine::ScriptSysEngineFinalize(script_lib_context.m_LuaState, engine); |
| 477 | } else { |
| 478 | script_lib_context.m_LuaState = dmScript::GetLuaState(engine->m_GOScriptContext); |
| 479 | dmGameSystem::FinalizeScriptLibs(script_lib_context); |
| 480 | dmEngine::ScriptSysEngineFinalize(script_lib_context.m_LuaState, engine); |
| 481 | script_lib_context.m_LuaState = dmScript::GetLuaState(engine->m_GuiScriptContext); |
| 482 | dmGameSystem::FinalizeScriptLibs(script_lib_context); |
| 483 | dmEngine::ScriptSysEngineFinalize(script_lib_context.m_LuaState, engine); |
| 484 | } |
| 485 | |
| 486 | dmHttpClient::ReopenConnectionPool(); |
| 487 | |
| 488 | dmGameObject::DeleteRegister(engine->m_Register); |
| 489 | |
| 490 | UnloadBootstrapContent(engine); |
| 491 | |
| 492 | dmSound::Finalize(); |
| 493 | |
| 494 | dmInput::DeleteContext(engine->m_InputContext); |
| 495 | |
| 496 | dmRender::DeleteRenderContext(engine->m_RenderContext, engine->m_RenderScriptContext); |
| 497 | |
| 498 | if (engine->m_HidContext) |
| 499 | { |