EContextEstablishTaskResult OnStep(SContextEstablishState& state) { IActionMapManager *pActionMapMan = CCryAction::GetCryAction()->GetIActionMapManager(); CRY_ASSERT(pActionMapMan); IActionMap* pDefaultActionMap = NULL; IActionMap* pDebugActionMap = NULL; IActionMap* pPlayerActionMap = NULL; IActionMap* pPlayerGamemodeActionMap = NULL; const char* disableGamemodeActionMapName = "player_mp"; const char* gamemodeActionMapName = "player_sp"; if(gEnv->bMultiplayer) { disableGamemodeActionMapName = "player_sp"; gamemodeActionMapName = "player_mp"; } if (true) { IPlayerProfileManager* pPPMgr = CCryAction::GetCryAction()->GetIPlayerProfileManager(); if (pPPMgr) { int userCount = pPPMgr->GetUserCount(); IPlayerProfile* pProfile = NULL; const char* userId = "UNKNOWN"; if (userCount == 0) { if (gEnv->pSystem->IsDevMode()) { #ifndef _RELEASE //In devmode and not release get the default user if no users are signed in e.g. autotesting, map on the command line pProfile = pPPMgr->GetDefaultProfile(); if (pProfile) { userId = pProfile->GetUserId(); } #endif // #ifndef _RELEASE } else { CryFatalError("[PlayerProfiles] CGameContext::StartGame: No users logged in"); return eCETR_Failed; } } if (userCount > 0) { IPlayerProfileManager::SUserInfo info; pPPMgr->GetUserInfo(0, info); pProfile = pPPMgr->GetCurrentProfile(info.userId); userId = info.userId; } if (pProfile) { pDefaultActionMap = pProfile->GetActionMap("default"); pDebugActionMap = pProfile->GetActionMap("debug"); pPlayerActionMap = pProfile->GetActionMap("player"); if (pDefaultActionMap == 0 && pPlayerActionMap == 0) { CryFatalError("[PlayerProfiles] CGameContext::StartGame: User '%s' has no actionmap 'default'!", userId); return eCETR_Failed; } } else { CryFatalError("[PlayerProfiles] CGameContext::StartGame: User '%s' has no active profile!", userId); return eCETR_Failed; } } else { CryFatalError("[PlayerProfiles] CGameContext::StartGame: No player profile manager!"); return eCETR_Failed; } } if (pDefaultActionMap == 0 ) { // use action map without any profile stuff pActionMapMan->EnableActionMap( "default", true ); pDefaultActionMap = pActionMapMan->GetActionMap("default"); CRY_ASSERT_MESSAGE(pDefaultActionMap, "'default' action map not found!"); } if (pDebugActionMap == 0 ) { // use action map without any profile stuff pActionMapMan->EnableActionMap( "debug", true ); pDebugActionMap = pActionMapMan->GetActionMap("debug"); } if (pPlayerActionMap == 0) { pActionMapMan->EnableActionMap( "player", true ); pPlayerActionMap = pActionMapMan->GetActionMap("player"); } if (!pDefaultActionMap) return eCETR_Failed; EntityId actorId = GetListener(); if (!actorId) return eCETR_Wait; pActionMapMan->SetDefaultActionEntity(actorId); pActionMapMan->EnableActionMap(disableGamemodeActionMapName, false); pActionMapMan->EnableActionMap(gamemodeActionMapName, true); pPlayerGamemodeActionMap = pActionMapMan->GetActionMap(gamemodeActionMapName); if(pPlayerGamemodeActionMap) { pPlayerGamemodeActionMap->SetActionListener(actorId); } CCryAction::GetCryAction()->GetIActionMapManager()->Enable(true); return eCETR_Ok; }