#include "StdAfx.h" #include "EnviControl.h" #include "RenderBase.h" #include "FileServer.h" #include "SundriesFuncEx.h" #include "resource.h" #include "PaneDefine.h" #include "MainFrm.h" #include "UserMessage.h" CEnviControl g_EnviControl; CEnviElement::CEnviElement() { /* m_dwAmbient = RGB(255,255,255); m_dwFogColor = RGB(255,255,255); m_fFogNear = 1000000.f; m_fFogFar = 1000000.f; m_fSaturation = 1.f; m_fBloomScale = 1.f; m_fBloomSensitivity = 6.f; m_bEnableColorFilter = false; m_bEnableBloomFilter = false; m_fEnviBGMRatio = 0.5f; m_nLightmapBlurSize = 1; m_bEnableWeather = false; m_fWeatherSpeed = 1.f; m_fWeatherStretch = 1.f; m_bEnableSplashDrop = false; m_fSplashDropSize = 1.f; m_fSplashDropLifeTime = 0.2f; m_nSplashDropRadius = 500; m_nSplashDropCount = 1500; */ Reset(); } CEnviElement::~CEnviElement() { } bool CEnviElement::Activate() { CRenderBase::GetInstance().Lock(); CRenderBase::GetInstance().InitializeEnvi( this ); CRenderBase::GetInstance().InitializeEnviLight( this ); CRenderBase::GetInstance().InitializeEnviLensFlare( this ); CRenderBase::GetInstance().InitializeEnviBGM( this ); CRenderBase::GetInstance().Unlock(); return true; } void CEnviElement::Save() { CString szFullName; if( strcmp( m_EnvInfo.GetName(), "Edit Set" ) == NULL ) return; szFullName.Format( "%s\\Resource\\Envi\\%s.env", CFileServer::GetInstance().GetLocalWorkingFolder(), m_EnvInfo.GetName() ); m_EnvInfo.Save(szFullName.GetBuffer()); } bool CEnviElement::Load() { CString szFullName; szFullName.Format( "%s\\Resource\\Envi\\%s.env", CFileServer::GetInstance().GetLocalWorkingFolder(), m_EnvInfo.GetName() ); return m_EnvInfo.Load(szFullName.GetBuffer()); } void CEnviElement::Reset() { m_EnvInfo.Reset(); } void CEnviElement::Delete() { CString szFullName; if( strcmp( m_EnvInfo.GetName(), "Edit Set" ) == NULL ) return; szFullName.Format( "%s\\Resource\\Envi\\%s.env", CFileServer::GetInstance().GetLocalWorkingFolder(), m_EnvInfo.GetName() ); DeleteFile( szFullName ); } // DWORD CEnviElement::GetLightCount() // { // return (DWORD)m_pVecLightList.size(); // } // // CEnviElement::LightInfoStruct *CEnviElement::GetLight( DWORD dwIndex ) // { // if( dwIndex < 0 || dwIndex >= (DWORD)m_pVecLightList.size() ) return NULL; // return m_pVecLightList[dwIndex]; // } // // void CEnviElement::AddLight( SLightInfo &Info ) // { // LightInfoStruct *pStruct = new LightInfoStruct; // pStruct->pInfo = new SLightInfo; // *pStruct->pInfo = Info; // // m_pVecLightList.push_back( pStruct ); // } // // void CEnviElement::RemoveLight( int nIndex ) // { // if( nIndex < 0 || nIndex >= (int)m_pVecLightList.size() ) return; // SAFE_DELETE( m_pVecLightList[nIndex]->pInfo ); // SAFE_DELETE( m_pVecLightList[nIndex] ); // m_pVecLightList.erase( m_pVecLightList.begin() + nIndex ); // } CEnviControl::CEnviControl() { CreateElement( "Edit Set", NULL ); CEnviElement *pElement = GetElement(0); SLightInfo Info; pElement->GetInfo().AddLight( Info ); m_pActiveElement = m_pVecList[0]; } CEnviControl::~CEnviControl() { SAFE_DELETE_PVEC( m_pVecList ); // Disconnect(); } bool CEnviControl::CreateElement( const char *szName, const char *szCopyTo ) { CEnviElement *pElement = new CEnviElement; CEnvInfo& envInfo = pElement->GetInfo(); envInfo.SetName( szName ); if( szCopyTo ) { CEnviElement *pCopyTo = FindElement( szCopyTo ); CEnvInfo& copyToInfo = pCopyTo->GetInfo(); if( pCopyTo ) { envInfo.SetAmbient( copyToInfo.GetAmbient() ); envInfo.SetFogColor( copyToInfo.GetFogColor() ); envInfo.SetFogNear( copyToInfo.GetFogNear() ); envInfo.SetFogFar( copyToInfo.GetFogFar() ); envInfo.SetSkyBox( copyToInfo.GetSkyBox() ); envInfo.SetEnvironmentTexture( copyToInfo.GetEnvironmentTexture() ); envInfo.EnableColorFilter( copyToInfo.IsEnableColorFilter() ); envInfo.SetColorAdjShadow( *copyToInfo.GetColorAdjShadow() ); envInfo.SetColorAdjMidtones( *copyToInfo.GetColorAdjMidtones() ); envInfo.SetColorAdjHighlights( *copyToInfo.GetColorAdjHighlights() ); envInfo.SetColorAdjSaturation( copyToInfo.GetColorAdjSaturation() ); envInfo.EnableBloomFilter( copyToInfo.IsEnableBloomFilter() ); envInfo.SetBloomScale( copyToInfo.GetBloomScale() ); envInfo.SetBloomSensitivity( copyToInfo.GetBloomSensitivity() ); envInfo.SetEnviBGM( copyToInfo.GetEnviBGM() ); envInfo.SetEnviBGMRatio( copyToInfo.GetEnviBGMRatio() ); envInfo.SetLightmapBlurSize( copyToInfo.GetLightmapBlurSize() ); envInfo.EnableWeather( copyToInfo.IsEnableWeather() ); envInfo.SetWeatherTexture( copyToInfo.GetWeatherTexture() ); envInfo.SetWeatherSpeed( copyToInfo.GetWeatherSpeed() ); envInfo.SetWeatherStretch( copyToInfo.GetWeatherStretch() ); envInfo.SetWeatherLayerCount( copyToInfo.GetWeatherLayerCount() ); envInfo.SetWeatherLayerDecreaseRate( copyToInfo.GetWeatherLayerDecreaseRate() ); envInfo.SetWeatherLayerDir( *copyToInfo.GetWeatherLayerDir() ); envInfo.EnableSplashDrop( copyToInfo.IsEnableSplashDrop() ); envInfo.SetSplashDropTexture( copyToInfo.GetSplashDropTexture() ); envInfo.SetSplashDropSize( copyToInfo.GetSplashDropSize() ); envInfo.SetSplashDropLifeTime( copyToInfo.GetSplashDropLifeTime() ); envInfo.SetSplashDropRadius( copyToInfo.GetSplashDropRadius() ); envInfo.SetSplashDropCount( copyToInfo.GetSplashDropCount() ); envInfo.EnableHeatHaze( copyToInfo.IsEnableHeatHaze() ); envInfo.SetHeatHazeDistortionPower( copyToInfo.GetHeatHazeDistortionPower() ); envInfo.SetHeatHazeWaveSpeed( copyToInfo.GetHeatHazeWaveSpeed() ); envInfo.EnableDOF( copyToInfo.IsEnableDOF() ); envInfo.SetDOFFocusDistance( copyToInfo.GetDOFFocusDistance() ); envInfo.SetDOFNearStart( copyToInfo.GetDOFNearStart() ); envInfo.SetDOFNearEnd( copyToInfo.GetDOFNearEnd() ); envInfo.SetDOFFarStart( copyToInfo.GetDOFFarStart() ); envInfo.SetDOFFarEnd( copyToInfo.GetDOFFarEnd() ); envInfo.SetDOFNearBlur( copyToInfo.GetDOFNearBlur() ); envInfo.SetDOFFarBlur( copyToInfo.GetDOFFarBlur() ); envInfo.EnableSnow( copyToInfo.IsEnableSnow() ); envInfo.SetSnowTexture( copyToInfo.GetSnowTexture() ); envInfo.SetSnowCount( copyToInfo.GetSnowCount() ); envInfo.SetSnowTimeOut( copyToInfo.GetSnowTimeOut() ); envInfo.SetSnowHeight( copyToInfo.GetSnowHeight() ); for( DWORD i=0; ipInfo ); } } } pElement->Save(); m_pVecList.push_back( pElement ); return true; } void CEnviControl::RemoveElement( const char *szName ) { CEnviElement *pElement = FindElement( szName ); if( !pElement ) return; pElement->Delete(); for( DWORD i=0; iSave(); } void CEnviControl::LoadElement( const char *szName ) { CEnviElement *pElement = FindElement( szName ); if( !pElement ) return; pElement->Reset(); pElement->Load(); } void CEnviControl::Connect() { CGlobalValue::GetInstance().UpdateInitDesc( "Register Environments.." ); std::vector szVecList; CString szEnviFolder; szEnviFolder.Format( "%s\\Resource\\Envi", CFileServer::GetInstance().GetLocalWorkingFolder() ); FindFileListInDirectory( szEnviFolder, "*.env", szVecList, false, false ); for( DWORD i=0; iGetInfo().SetName( szTemp ); if( pElement->Load() == false ) { SAFE_DELETE( pElement ); continue; } m_pVecList.push_back( pElement ); } CWnd *pWnd = GetPaneWnd( ENVI_PANE ); if( pWnd ) pWnd->SendMessage( UM_REFRESH_PANE_VIEW ); } void CEnviControl::Disconnect() { ResetElement(); if( CRenderBase::IsActive() ) { CRenderBase::GetInstance().InitializeEnvi( m_pVecList[0] ); CRenderBase::GetInstance().InitializeEnviLight( m_pVecList[0] ); CRenderBase::GetInstance().InitializeEnviLensFlare( m_pVecList[0] ); } m_pActiveElement = m_pVecList[0]; } void CEnviControl::ResetElement() { SAFE_DELETE_PVEC( m_pVecList ); CreateElement( "Edit Set", NULL ); CEnviElement *pElement = GetElement(0); SLightInfo Info; pElement->GetInfo().AddLight( Info ); } void CEnviControl::ActivateElement( const char *szName ) { CEnviElement *pElement = FindElement( szName ); if( !pElement ) return; pElement->Activate(); m_pActiveElement = pElement; CGlobalValue::GetInstance().RefreshRender(); } void CEnviControl::RefreshElement() { if( !m_pActiveElement ) return; m_pActiveElement->Activate(); CGlobalValue::GetInstance().RefreshRender(); } CEnviElement *CEnviControl::FindElement( const char *szName ) { for( DWORD i=0; iGetInfo().GetName(), szName ) == NULL ) return m_pVecList[i]; } return NULL; } bool CEnviControl::IsExistElement( const char *szName ) { if( FindElement( szName ) ) return true; return false; }