MCPcopy Create free account
hub / github.com/MergHQ/CRYENGINE / LoadLevel

Method LoadLevel

Code/CryEngine/CryAction/Serialization/GameSerialize.cpp:1480–1577  ·  view source on GitHub ↗

/////////////////////////////////////////////////////////////////////

Source from the content-addressed store, hash-verified

1478
1479//////////////////////////////////////////////////////////////////////////
1480bool 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

Callers 2

OnStepMethod · 0.45

Calls 15

GetLevelInfoFunction · 0.85
TracePendingRaysMethod · 0.80
ClearLoggedEventsMethod · 0.80
DeletePendingEntitiesMethod · 0.80
StartGameContextMethod · 0.80
SetLoadingSaveGameMethod · 0.80
FlushSystemMethod · 0.80
StartedGameContextMethod · 0.80
GetDefaultGameTypeMethod · 0.80
LoadLevelDataMethod · 0.80

Tested by

no test coverage detected