void StopFader(SActivationInfo * pActInfo) { CHUDFader* pFader = GetFader(pActInfo); if (pFader) pFader->Stop(); m_ticket = 0; m_bNeedFaderStop = false; }
void StartFader(SActivationInfo * pActInfo) { CHUDFader* pFader = GetFader(pActInfo); if (pFader != 0) { const float fDuration = GetPortFloat(pActInfo, m_direction < 0 ? EIP_InTime : EIP_OutTime); ColorF col; const Vec3 fadeColor = GetPortVec3(pActInfo, EIP_Color); const bool bUseCurColor = GetPortBool(pActInfo, EIP_UseCurrentColor); col.r = fadeColor[0]; col.g = fadeColor[1]; col.b = fadeColor[2]; col.a = m_direction < 0 ? 0.0f : 1.0f; if (m_direction < 0) m_ticket = pFader->FadeIn(col, fDuration, bUseCurColor); else m_ticket =pFader->FadeOut(col, fDuration, GetPortString(pActInfo, EIP_TextureName), bUseCurColor); m_bNeedFaderStop = true; } }
virtual void ProcessEvent( EFlowEvent event, SActivationInfo *pActInfo ) { switch (event) { case eFE_Initialize: if (pActInfo->pGraph->GetGraphEntity(0) == 0 && pActInfo->pGraph->GetGraphEntity(1) == 0) m_nFaderOffset = MFX_FADER_OFFSET; else m_nFaderOffset = GAME_FADER_OFFSET; if (gEnv->pCryPak->GetLvlResStatus()) { const string& texName = GetPortString(pActInfo, EIP_TextureName); if (texName.empty() == false) { ITexture* pTexture = CHUDFader::LoadTexture(texName.c_str()); if (pTexture) pTexture->Release(); } } if (m_bNeedFaderStop) { StopFader(pActInfo); m_bPlaying = false; m_bNeedFaderStop = false; m_ticket = 0; } pActInfo->pGraph->SetRegularlyUpdated(pActInfo->myID, false); break; case eFE_Activate: { if (IsPortActive(pActInfo, EIP_FadeIn)) { StopFader(pActInfo); pActInfo->pGraph->SetRegularlyUpdated(pActInfo->myID, true); m_direction = -1; StartFader(pActInfo); m_bPlaying = true; m_bNeedFaderStop = true; m_postSerializeTrigger = 0; } if (IsPortActive(pActInfo, EIP_FadeOut)) { StopFader(pActInfo); pActInfo->pGraph->SetRegularlyUpdated(pActInfo->myID, true); m_direction = 1; StartFader(pActInfo); m_bPlaying = true; m_bNeedFaderStop = true; m_postSerializeTrigger = 0; } } break; case eFE_Update: { if (m_postSerializeTrigger) { ActivateOutput(pActInfo, m_postSerializeTrigger < 0 ? EOP_FadedIn : EOP_FadedOut, true); m_postSerializeTrigger = 0; pActInfo->pGraph->SetRegularlyUpdated(pActInfo->myID, false); return; } CHUDFader* pFader = GetFader(pActInfo); if (pFader == 0 || m_bPlaying == false) { pActInfo->pGraph->SetRegularlyUpdated(pActInfo->myID, false); m_bPlaying = false; m_ticket = 0; return; } ColorF col = pFader->GetCurrentColor(); Vec3 vCol (col.r,col.g,col.b); ActivateOutput(pActInfo, EOP_FadeColor, vCol); if (pFader->IsPlaying(m_ticket) == false) { if (m_direction < 0.0f) { ActivateOutput(pActInfo, EOP_FadedIn, true); pActInfo->pGraph->SetRegularlyUpdated(pActInfo->myID, false); m_bNeedFaderStop = false; } else { ActivateOutput(pActInfo, EOP_FadedOut, true); pActInfo->pGraph->SetRegularlyUpdated(pActInfo->myID, false); m_bNeedFaderStop = true; // but needs a stop, if we're faded out (fader is still active then!) } m_bPlaying = false; m_ticket = 0; } } break; } }