void CVehicleClient::EnableActionMaps(IVehicleSeat* pSeat, bool enable) { assert(pSeat); // illegal to change action maps in demo playback - Lin if (!IsDemoPlayback() && pSeat) { IActionMapManager* pActionMapMan = g_pGame->GetIGameFramework()->GetIActionMapManager(); CRY_ASSERT(pActionMapMan); pActionMapMan->EnableActionMap("player", !enable); EntityId passengerID = pSeat->GetPassenger(); // now the general vehicle controls if (IActionMap* pActionMap = pActionMapMan->GetActionMap("vehicle_general")) { pActionMap->SetActionListener(enable ? passengerID : 0); pActionMapMan->EnableActionMap("vehicle_general", enable); } // todo: if necessary enable the vehicle-specific action map here // specific controls for this vehicle seat const char* actionMap = pSeat->GetActionMap(); if (actionMap && actionMap[0]) { if (IActionMap* pActionMap = pActionMapMan->GetActionMap(actionMap)) { pActionMap->SetActionListener(enable ? passengerID : 0); pActionMapMan->EnableActionMap(actionMap, enable); } } } }
//---------------------------------------------------------------------- void CVehicleMountedWeapon::PerformRipOff(CActor* pOwner) { IActionMapManager* pMapManager = gEnv->pGame->GetIGameFramework()->GetIActionMapManager(); assert(pMapManager); pMapManager->EnableActionMap("vehicle_general", false); IVehicle *pVehicle = gEnv->pGame->GetIGameFramework()->GetIVehicleSystem()->GetVehicle(m_vehicleId); if(pVehicle) { SVehicleEventParams params; params.entityId = GetEntityId(); pVehicle->BroadcastVehicleEvent(eVE_WeaponRemoved, params); if(pOwner) { if(gEnv->bMultiplayer) { const IEntity* pVehicleEnt = pVehicle->GetEntity(); IEntity* pEntity = pOwner->GetEntity(); const Matrix34& vehWMat = pVehicleEnt->GetWorldTM(); m_previousWSpaceOffsetPosition = pEntity->GetWorldPos(); m_localRipUserOffset = vehWMat.GetInverted().TransformPoint(m_previousWSpaceOffsetPosition); } pOwner->LinkToVehicle(0); } m_previousVehicleRotation = pVehicle->GetEntity()->GetWorldRotation(); } CHeavyMountedWeapon::PerformRipOff(pOwner); }
EContextEstablishTaskResult OnStep( SContextEstablishState& state ) { IActionMapManager *pActionMapMan = CCryAction::GetCryAction()->GetIActionMapManager(); pActionMapMan->Enable(false); pActionMapMan->EnableActionMap("player", true); pActionMapMan->EnableFilter(0, false); // disable all actionfilters return eCETR_Ok; }
//------------------------------------------------------------------------ void CVehicleClient::OnEnterVehicleSeat(IVehicleSeat* pSeat) { m_bMovementFlagRight=m_bMovementFlagLeft=m_bMovementFlagForward=m_bMovementFlagBack=false; m_fLeftRight = m_fForwardBackward = 0.f; IVehicle* pVehicle = pSeat->GetVehicle(); assert(pVehicle); IActorSystem* pActorSystem = gEnv->pGame->GetIGameFramework()->GetIActorSystem(); assert(pActorSystem); IActor* pActor = pActorSystem->GetActor(pSeat->GetPassenger()); bool isThirdPerson = pActor->IsThirdPerson() || m_tp; TVehicleViewId viewId = InvalidVehicleViewId; TVehicleViewId firstViewId = InvalidVehicleViewId; while (viewId = pSeat->GetNextView(viewId)) { if (viewId == firstViewId) break; if (firstViewId == InvalidVehicleViewId) firstViewId = viewId; if (IVehicleView* pView = pSeat->GetView(viewId)) { if (pView->IsThirdPerson() == isThirdPerson) break; } } if (viewId != InvalidVehicleViewId) pSeat->SetView(viewId); IActionMapManager* pMapManager = gEnv->pGame->GetIGameFramework()->GetIActionMapManager(); assert(pMapManager); pMapManager->EnableActionMap("landvehicle", false); pMapManager->EnableActionMap("seavehicle", false); pMapManager->EnableActionMap("helicopter", false); pMapManager->EnableActionMap("vtol", false); pMapManager->EnableFilter ( "vehicle_no_seat_change_and_exit", true ); }
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; if(pDefaultActionMap) { pDefaultActionMap->SetActionListener( actorId ); } if(pDebugActionMap) { pDebugActionMap->SetActionListener( actorId ); } if(pPlayerActionMap) { pPlayerActionMap->SetActionListener( actorId ); } pActionMapMan->EnableActionMap(disableGamemodeActionMapName, false); pActionMapMan->EnableActionMap(gamemodeActionMapName, true); pPlayerGamemodeActionMap = pActionMapMan->GetActionMap(gamemodeActionMapName); if(pPlayerGamemodeActionMap) { pPlayerGamemodeActionMap->SetActionListener(actorId); } // TODO: callback to game code for game specific action maps { IActionMap* crysis2_common = pActionMapMan->GetActionMap("crysis2_common"); if (crysis2_common != NULL) crysis2_common->SetActionListener( actorId ); IActionMap* crysis2_suitmenu_opened = pActionMapMan->GetActionMap("crysis2_suitmenu_opened"); if (crysis2_suitmenu_opened != NULL) crysis2_suitmenu_opened->SetActionListener( actorId ); IActionMap* crysis2_suitmenu_closed = pActionMapMan->GetActionMap("crysis2_suitmenu_closed"); if (crysis2_suitmenu_closed != NULL) crysis2_suitmenu_closed->SetActionListener( actorId ); IActionMap* player_cine = pActionMapMan->GetActionMap("player_cine"); if (player_cine != NULL) player_cine->SetActionListener( actorId ); IActionMap* booss_duell = pActionMapMan->GetActionMap("boss_duell"); if (booss_duell != NULL) booss_duell->SetActionListener( actorId ); } CCryAction::GetCryAction()->GetIActionMapManager()->Enable(true); return eCETR_Ok; }