//-------------------------------------------------------------------------------------------------- // Name: AutoReleaseAndDeleteFlaggedEffects // Desc: Calls release and delete on any effects with the these flags set //-------------------------------------------------------------------------------------------------- void GameSDKCGameEffectsSystem::AutoReleaseAndDeleteFlaggedEffects(GameSDKIGameEffect* effectList) { if(effectList) { GameSDKIGameEffect* effect = effectList; while(effect) { m_nextEffectToUpdate = effect->Next(); bool autoRelease = effect->IsFlagSet(GAME_EFFECT_AUTO_RELEASE); bool autoDelete = effect->IsFlagSet(GAME_EFFECT_AUTO_DELETE); if(autoRelease || autoDelete) { SOFTCODE_RETRY(effect,effect->Release()); if(autoDelete) { SAFE_DELETE(effect); } } effect = m_nextEffectToUpdate; } m_nextEffectToUpdate = NULL; } }//-------------------------------------------------------------------------------------------------
/*static*/ void CHUDEventDispatcher::CallEvent( const SHUDEvent& event ) { #if !defined(DEDICATED_SERVER) FUNCTION_PROFILER(GetISystem(), PROFILE_GAME); CRY_ASSERT_MESSAGE(s_safe, "HUD: Can't send HUDEvent whilst initialising the HUD! i.e. from CHUDObject() or CHUDObject::Init()!" ); if( s_safe ) { s_stlSafe = false; THUDEventListeners& listeners = s_eventVec[event.eventType]; THUDEventListeners::const_iterator it = listeners.begin(); THUDEventListeners::const_iterator end = listeners.end(); for(; it!=end; ++it) { IHUDEventListener* listener = *it; SOFTCODE_RETRY(listener, listener->OnHUDEvent(event)); } s_stlSafe = true; } else { // HUD Event Sending is now unsafe and should not be done! // If you want to send HUD Events on initialization then use OnHUDLoadDone. return; } #endif }
//-------------------------------------------------------------------------------------------------- // 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 }//-------------------------------------------------------------------------------------------------