void CGameRealtimeRemoteUpdateListener::CameraSync() { IGame *pGame = gEnv->pGame; if(!pGame) return; IGameFramework *pGameFramework=pGame->GetIGameFramework(); if(!pGameFramework) return; IViewSystem *pViewSystem=pGameFramework->GetIViewSystem(); if(!pViewSystem) return; IView *pView=pViewSystem->GetActiveView(); if(!pView) return; IEntity *pEntity = gEnv->pEntitySystem->GetEntity(pView->GetLinkedId()); if(!pEntity) return; IActor *pPlayer=pGameFramework->GetClientActor(); if ( !pPlayer ) return; IEntity * pPlayerEntity = pPlayer->GetEntity(); if (!pPlayerEntity) return; IPhysicalEntity * piPlayerPhysics = pPlayerEntity->GetPhysics(); if ( !piPlayerPhysics ) return; pe_player_dimensions dim; piPlayerPhysics->GetParams( &dim ); //TODO: only GDCE2011, in the future make this game magic constant be gone in LiveCreate 2.0 // game player view code has a complex position code path, the sync position should be // honoured by game code when live creaate camera sync is enabled m_Position.z -= 1.62f; pEntity->SetPos(m_Position); pPlayerEntity->Hide(false); pViewSystem->SetOverrideCameraRotation(true,Quat::CreateRotationVDir(m_ViewDirection)); pPlayerEntity->Hide(true); SEntityUpdateContext ctx; pPlayer->Update( ctx, 0 ); m_bCameraSync = true; }
//-------------------------------------------------------------------------------------------------- // Name: IsEntity3rdPerson // Desc: Returns 3rd person state //-------------------------------------------------------------------------------------------------- bool CGameEffect::IsEntity3rdPerson(EntityId entityId) { bool bIs3rdPerson = true; IGame* pGame = gEnv->pGame; if(pGame) { IGameFramework* pGameFramework = pGame->GetIGameFramework(); if(pGameFramework) { EntityId clientEntityId = pGameFramework->GetClientActorId(); if(clientEntityId == entityId) { bIs3rdPerson = pGameFramework->GetClientActor()->IsThirdPerson(); } } } return bIs3rdPerson; }//-------------------------------------------------------------------------------------------------
void CGameRealtimeRemoteUpdateListener::EndCameraSync() { IGame *pGame = gEnv->pGame; if(!pGame) return; IGameFramework *pGameFramework=pGame->GetIGameFramework(); if(!pGameFramework) return; IViewSystem *pViewSystem=pGameFramework->GetIViewSystem(); if(!pViewSystem) return; IView *pView=pViewSystem->GetActiveView(); if(!pView) return; IEntity *pEntity = gEnv->pEntitySystem->GetEntity(pView->GetLinkedId()); if(!pEntity) return; CPlayer *pPlayer=static_cast<CPlayer *>(pGameFramework->GetClientActor()); if (!pPlayer) return; IEntity * pPlayerEntity = pPlayer->GetEntity(); if ( !pPlayerEntity ) return; #ifndef _RELEASE pPlayer->SetFlyMode(m_nPreviousFlyMode); #endif pPlayerEntity->Hide(false); pViewSystem->SetOverrideCameraRotation(false,Quat::CreateRotationVDir(m_ViewDirection)); pEntity->SetRotation(Quat::CreateRotationVDir(m_ViewDirection)); m_bCameraSync = false; // reset our head-position delta on end camera sync m_headPositionDelta.zero(); }
void CGameRealtimeRemoteUpdateListener::EndCameraSync() { IGame *pGame = gEnv->pGame; if(!pGame) return; IGameFramework *pGameFramework=pGame->GetIGameFramework(); if(!pGameFramework) return; IViewSystem *pViewSystem=pGameFramework->GetIViewSystem(); if(!pViewSystem) return; IView *pView=pViewSystem->GetActiveView(); if(!pView) return; IEntity *pEntity = gEnv->pEntitySystem->GetEntity(pView->GetLinkedId()); if(!pEntity) return; IActor *pPlayer=pGameFramework->GetClientActor(); if (!pPlayer) return; IEntity * pPlayerEntity = pPlayer->GetEntity(); if ( !pPlayerEntity ) return; SEntityUpdateContext ctx; pPlayer->Update( ctx, 0 ); pPlayerEntity->Hide(false); pViewSystem->SetOverrideCameraRotation(false,Quat::CreateRotationVDir(m_ViewDirection)); pEntity->SetRotation(Quat::CreateRotationVDir(m_ViewDirection)); m_bCameraSync = false; // reset our head-position delta on end camera sync m_headPositionDelta.zero(); }
//-------------------------------------------------------------------------------------------------- // Name: Update // Desc: Updates effects system and any effects registered in it's update list //-------------------------------------------------------------------------------------------------- void GameSDKCGameEffectsSystem::Update(float frameTime) { FX_ASSERT_MESSAGE(m_isInitialised,"Game Effects System trying to update without being initialised"); // Get pause state bool isPaused = false; IGame* pGame = gEnv->pGame; if(pGame) { IGameFramework* pGameFramework = pGame->GetIGameFramework(); if(pGameFramework) { isPaused = pGameFramework->IsGamePaused(); } } // Update effects if(m_effectsToUpdate) { GameSDKIGameEffect* effect = m_effectsToUpdate; while(effect) { m_nextEffectToUpdate = effect->Next(); if((!isPaused) || (effect->IsFlagSet(GAME_EFFECT_UPDATE_WHEN_PAUSED))) { SOFTCODE_RETRY(effect,effect->Update(frameTime)); } effect = m_nextEffectToUpdate; } } m_nextEffectToUpdate = NULL; #if DEBUG_GAME_FX_SYSTEM DrawDebugDisplay(); #endif }//-------------------------------------------------------------------------------------------------
void CGameRealtimeRemoteUpdateListener::CameraSync() { IGame *pGame = gEnv->pGame; if(!pGame) return; IGameFramework *pGameFramework=pGame->GetIGameFramework(); if(!pGameFramework) return; IViewSystem *pViewSystem=pGameFramework->GetIViewSystem(); if(!pViewSystem) return; IView *pView=pViewSystem->GetActiveView(); if(!pView) return; IEntity *pEntity = gEnv->pEntitySystem->GetEntity(pView->GetLinkedId()); if(!pEntity) return; CPlayer *pPlayer=static_cast<CPlayer *>(pGameFramework->GetClientActor()); if ( !pPlayer ) return; IEntity * pPlayerEntity = pPlayer->GetEntity(); if (!pPlayerEntity) return; IPhysicalEntity * piPlayerPhysics = pPlayerEntity->GetPhysics(); if ( !piPlayerPhysics ) return; pe_player_dimensions dim; piPlayerPhysics->GetParams( &dim ); // if delta from head to center of character is zero, then we need to recompute it if( m_headPositionDelta.GetLength() == 0 ) { Vec3 camPos = pViewSystem->GetActiveView()->GetCurrentParams()->position; const Vec3& entPos = pEntity->GetPos(); m_headPositionDelta = camPos - entPos; } // offset the camera position by the current delta to put the head eye position to center of character m_Position -= m_headPositionDelta; pPlayerEntity->Hide(false); pEntity->SetPos(m_Position); pViewSystem->SetOverrideCameraRotation(true,Quat::CreateRotationVDir(m_ViewDirection)); #ifndef _RELEASE if ( m_bCameraSync == false && m_nPreviousFlyMode != eCameraModes_fly_mode_noclip ) { m_nPreviousFlyMode=pPlayer->GetFlyMode(); pPlayer->SetFlyMode(eCameraModes_fly_mode_noclip); } #endif pPlayerEntity->Hide(true); m_bCameraSync = true; }