/////////////////////////////////////////////////////////////////////
| 1478 | |
| 1479 | ////////////////////////////////////////////////////////////////////////// |
| 1480 | bool CGameSerialize::LoadLevel(SLoadEnvironment& loadEnv, SGameStartParams& startParams, STempAutoResourcesLock& autoResourcesLock, bool bIsQuickLoading, bool requireQuickLoad) |
| 1481 | { |
| 1482 | const char* sCurrentLevel = loadEnv.m_pCryAction->GetLevelName(); |
| 1483 | |
| 1484 | IEntitySystem* pEntitySystem = gEnv->pEntitySystem; |
| 1485 | SGameContextParams ctx; |
| 1486 | |
| 1487 | if (!loadEnv.m_pLoadGame->HaveMetadata(SAVEGAME_LEVEL_TAG) || !loadEnv.m_pLoadGame->HaveMetadata(SAVEGAME_GAMERULES_TAG)) |
| 1488 | { |
| 1489 | return false; |
| 1490 | } |
| 1491 | |
| 1492 | ctx.levelName = loadEnv.m_pLoadGame->GetMetadata(SAVEGAME_LEVEL_TAG); |
| 1493 | ctx.gameRules = loadEnv.m_pLoadGame->GetMetadata(SAVEGAME_GAMERULES_TAG); |
| 1494 | |
| 1495 | if (bIsQuickLoading) |
| 1496 | { |
| 1497 | // can quick-load |
| 1498 | if (!gEnv->p3DEngine->RestoreTerrainFromDisk()) |
| 1499 | return false; |
| 1500 | |
| 1501 | if (gEnv->p3DEngine) |
| 1502 | { |
| 1503 | gEnv->p3DEngine->ResetPostEffects(); |
| 1504 | } |
| 1505 | |
| 1506 | // [AlexMcC|18.03.10] Taken from CEntitySytem::Reset: |
| 1507 | // This fixes physics crashes caused by old update events |
| 1508 | // Flush the physics linetest and events queue, but don't pump events (on Anton's recommendation) |
| 1509 | gEnv->pPhysicalWorld->TracePendingRays(0); |
| 1510 | gEnv->pPhysicalWorld->ClearLoggedEvents(); |
| 1511 | |
| 1512 | pEntitySystem->DeletePendingEntities(); |
| 1513 | loadEnv.m_failure = eLGR_FailedAndDestroyedState; |
| 1514 | |
| 1515 | gEnv->pNetwork->SyncWithGame(eNGS_Shutdown); |
| 1516 | gEnv->pNetwork->SyncWithGame(eNGS_Shutdown_Clear); |
| 1517 | |
| 1518 | // no level loading, so imm start the precaching phase |
| 1519 | gEnv->pSystem->GetISystemEventDispatcher()->OnSystemEvent(ESYSTEM_EVENT_LEVEL_PRECACHE_START, 0, 0); |
| 1520 | |
| 1521 | return true; |
| 1522 | } |
| 1523 | else if (requireQuickLoad) |
| 1524 | { |
| 1525 | GameWarning("Unable to quick load: different level names (%s != %s)", sCurrentLevel, ctx.levelName); |
| 1526 | return false; |
| 1527 | } |
| 1528 | else if (gEnv->IsEditor()) |
| 1529 | { |
| 1530 | GameWarning("Can only quick-load in editor"); |
| 1531 | return false; |
| 1532 | } |
| 1533 | |
| 1534 | //NON-QUICKLOAD PATH |
| 1535 | startParams.pContextParams = &ctx; |
| 1536 | startParams.flags |= eGSF_BlockingClientConnect | eGSF_LocalOnly; |
| 1537 |
no test coverage detected