DragonNest/Client/EtWorldPainter/RenderBase.cpp

623 lines
19 KiB
C++
Raw Normal View History

2024-12-19 09:48:26 +08:00
#include "StdAfx.h"
#include "RenderBase.h"
#include "FileServer.h"
#include "TEtWorld.h"
#include "InputDevice.h"
#include "GlobalValue.h"
#include "MainFrm.h"
#include "EtWorldPainter.h"
#include "EtWorldPainterDoc.h"
#include "EtWorldPainterView.h"
#include "DummyView.h"
#include "UserMessage.h"
#include "TdDummyActor.h"
#include "EnviControl.h"
#include "EtSoundEngine.h"
#include "TEtWorldGrid.h"
#include "TEtWorldSector.h"
#include "TEtWorldSound.h"
#include "EtResourceMng.h"
#include "EtWater.h"
#include "EventCustomRender.h"
#include "GlobalValue.h"
#include "EtActionCoreMng.h"
#include <Process.h>
CRenderBase g_RenderBase;
bool CRenderBase::s_bRenderMainScene = false;
bool CRenderBase::s_bThreadRenderTarget = false;
CRenderBase::CRenderBase()
{
m_bActivate = false;
m_pEtSound = NULL;
m_pColorAdjFilter = NULL;
m_pBloomFilter = NULL;
m_pHeatHazeFilter = NULL;
m_pDOFFilter = NULL;
m_PrevLocalTime = 0;
m_fDelta = 0.f;
char szStr[2048] = { 0, };
GetRegistryString( HKEY_CURRENT_USER, REG_SUBKEY, "ShaderFolder", szStr, 2048 );
m_szShaderFolder = szStr;
/*
memset( szStr, 0, sizeof(szStr) );
GetRegistryString( HKEY_CURRENT_USER, REG_SUBKEY, "ResourceFolder", szStr, 2048 );
m_szResourceFolder = szStr;
*/
m_bEnableColorFilter = true;
m_bEnableBloomFilter = true;
m_bEnableWeather = true;
m_bEnableSplashDrop = true;
m_bEnableHeatHazeFilter = true;
m_bEnableDOFFilter = true;
m_bEnableSnow = true;
m_nEnviBGMIndex = -1;
m_bToggleCameraTopView = false;
}
CRenderBase::~CRenderBase()
{
Finalize();
}
void CRenderBase::Finalize()
{
if( m_bActivate == false ) return;
CEventCustomRender::UnregisterClass();
SAFE_RELEASE_SPTRVEC( m_hVecLight );
SAFE_RELEASE_SPTRVEC( m_hVecLensFlare );
SAFE_RELEASE_SPTR( m_CameraHandle );
m_FrameSync.End();
CTdDummyActor::GetInstance().Destroy();
SAFE_DELETE( m_pColorAdjFilter );
SAFE_DELETE( m_pBloomFilter );
SAFE_DELETE( m_pHeatHazeFilter );
SAFE_DELETE( m_pDOFFilter );
if( m_nEnviBGMIndex != -1 ) {
CEtSoundEngine::GetInstance().RemoveSound( m_nEnviBGMIndex );
m_nEnviBGMIndex = -1;
}
SAFE_RELEASE_SPTR( m_hEnviBGMChannel );
SAFE_RELEASE_SPTR( m_hEnvironmentTexture );
SAFE_RELEASE_SPTR( m_hWeather );
SAFE_RELEASE_SPTR( m_hSplashDrop );
SAFE_RELEASE_SPTR( m_hSnow );
CEtActionCoreMng::GetInstance().FlushWaitDelete();
SAFE_DELETE( m_pEtSound );
EternityEngine::FinalizeEngine();
m_bActivate = false;
}
void CRenderBase::Initialize( HWND hWnd )
{
CGlobalValue::GetInstance().UpdateInitDesc( "Initialize Engine.." );
CRect rcRect;
m_hWnd = hWnd;
CalcRenderRect( rcRect );
SGraphicOption Option;
Option.DynamicShadowType = ST_DEPTHSHADOWMAP;
Option.bEnableDOF = true;
EternityEngine::InitializeEngine( m_hWnd, rcRect.Width(), rcRect.Height(), true, true, &Option );
GetEtStateManager()->SetEnable( false );
CEtRenderStack::EnableDepthRender( true );
// CEtRenderStack::EnableSkyFog( false );
CEtRenderStack::EnableOcclusion( false );
char szStr[1024] = { 0, };
GetCurrentDirectory( 1024, szStr );
strcat_s( szStr, "\\" );
CGlobalValue::GetInstance().UpdateInitDesc( "Initialize Shader.." );
CEtResourceMng::GetInstance().AddResourcePath( m_szShaderFolder, true );
std::vector<std::string> szVecFileList;
FindFileListInDirectory( m_szShaderFolder.GetBuffer(), "*.fx", szVecFileList, false, true, false );
for( DWORD i=0; i<szVecFileList.size(); i++ ) {
sprintf_s( szStr, "%s\\%s", m_szShaderFolder.GetBuffer(), szVecFileList[i].c_str() );
CEtResourceMng::GetInstance().AddCacheMemoryStream( szStr );
}
CGlobalValue::GetInstance().UpdateInitDesc( "Initialize Environment.." );
InitializeEnvi( CEnviControl::GetInstance().GetActiveElement() );
InitializeEnviLight( CEnviControl::GetInstance().GetActiveElement() );
InitializeEnviLensFlare( CEnviControl::GetInstance().GetActiveElement() );
m_FrameSync.Begin( -1 );
m_bActivate = true;
CGlobalValue::GetInstance().UpdateInitDesc( "Initialize Sound.." );
m_pEtSound = new CEtSoundEngine;
if( m_pEtSound->Initialize( CEtSoundEngine::AutoDetected ) == false ) {
// MessageBox( m_hWnd, "m_pEtSound->Initialize() Failed", "Error", MB_OK );
}
m_pEtSound->CreateChannelGroup( "SoundManager" );
m_pEtSound->CreateChannelGroup( "3D" );
m_pEtSound->CreateChannelGroup( "BGM" );
CGlobalValue::GetInstance().UpdateInitDesc( "Initialize Dummy.." );
CEventCustomRender::RegisterClass();
CTdDummyActor::GetInstance().Initialize();
CGlobalValue::GetInstance().UpdateInitDesc( "Finish.." );
}
void CRenderBase::InitializeEnvi( CEnviElement *pElement )
{
SAFE_RELEASE_SPTR( m_CameraHandle );
CEnvInfo& envInfo = pElement->GetInfo();
SCameraInfo CamInfo;
EtColor Color;
CamInfo.fFogFar = envInfo.GetFogFar();
CamInfo.fFogNear = envInfo.GetFogNear();
Color = envInfo.GetFogColor();
CamInfo.FogColor = EtColor( Color.b, Color.g, Color.r, 1.f );
CamInfo.fNear = CGlobalValue::GetInstance().m_fCamNear;
CamInfo.fFar = CGlobalValue::GetInstance().m_fCamFar;
CamInfo.fFOV = CGlobalValue::GetInstance().m_fCamFOV;
m_CameraHandle = EternityEngine::CreateCamera( &CamInfo );
Color = envInfo.GetAmbient();
SetGlobalAmbient( &EtColor( Color.b, Color.g, Color.r, 1.f ) );
CString szBoxName = envInfo.GetSkyBox();
if( !szBoxName.IsEmpty() ) {
EtObjectHandle hTemp = m_hSkyBox;
m_hSkyBox = CreateStaticObject( szBoxName );
if( m_hSkyBox ) {
m_hSkyBox->EnableCull( false );
m_hSkyBox->EnableWaterCast( true );
}
SAFE_RELEASE_SPTR( hTemp );
}
else SAFE_RELEASE_SPTR( m_hSkyBox );
UpdateCamera( m_matExWorld );
m_bEnableColorFilter = envInfo.IsEnableColorFilter();
m_bEnableBloomFilter = envInfo.IsEnableBloomFilter();
m_bEnableHeatHazeFilter = envInfo.IsEnableHeatHaze();
m_bEnableWeather = envInfo.IsEnableWeather();
m_bEnableSplashDrop = envInfo.IsEnableSplashDrop();
m_bEnableDOFFilter = envInfo.IsEnableDOF();
m_bEnableSnow = envInfo.IsEnableSnow();
if( m_bEnableColorFilter == true ) {
if( !m_pColorAdjFilter ) m_pColorAdjFilter = (CEtColorAdjustTexFilter*)CreateFilter( SF_COLORADJUSTTEX );
m_pColorAdjFilter->SetParam( *envInfo.GetColorAdjShadow(), *envInfo.GetColorAdjMidtones(), *envInfo.GetColorAdjHighlights(), envInfo.GetColorAdjSaturation() );
}
else {
SAFE_DELETE( m_pColorAdjFilter );
}
if( m_bEnableBloomFilter == true ) {
if( !m_pBloomFilter ) m_pBloomFilter = (CEtBloomFilter*)CreateFilter( SF_BLOOM );
m_pBloomFilter->SetBloomScale( envInfo.GetBloomScale() );
m_pBloomFilter->SetBloomSensitivity( envInfo.GetBloomSensitivity() );
}
else {
SAFE_DELETE( m_pBloomFilter );
}
if( envInfo.GetEnvironmentTexture() && strlen(envInfo.GetEnvironmentTexture()) > 0 ) {
EtTextureHandle hTemp = m_hEnvironmentTexture;
m_hEnvironmentTexture = EternityEngine::LoadEnvTexture( envInfo.GetEnvironmentTexture() );
SAFE_RELEASE_SPTR( hTemp );
}
else {
SAFE_RELEASE_SPTR( m_hEnvironmentTexture );
}
if( m_bEnableWeather ) {
EtRainHandle hTemp;
if( m_hWeather ) hTemp = m_hWeather;
m_hWeather = CEtRainEffect::CreateRainEffect( envInfo.GetWeatherTexture() );
SAFE_RELEASE_SPTR( hTemp );
if( m_hWeather ) {
m_hWeather->SetRainSpeed( envInfo.GetWeatherSpeed() );
m_hWeather->SetStretchValue( envInfo.GetWeatherStretch() );
m_hWeather->SetLayerCount( envInfo.GetWeatherLayerCount() );
m_hWeather->SetRainSpeedDecreaseRate( envInfo.GetWeatherLayerDecreaseRate() );
m_hWeather->SetRainDir( *envInfo.GetWeatherLayerDir() );
}
}
else {
SAFE_RELEASE_SPTR( m_hWeather );
}
if( m_bEnableSplashDrop ) {
EtRainDropSplashHandle hTemp;
if( m_hSplashDrop ) hTemp = m_hSplashDrop;
m_hSplashDrop = CEtRainDropSplash::CreateRainDropSplash( envInfo.GetSplashDropTexture(), envInfo.GetSplashDropSize() );
SAFE_RELEASE_SPTR( hTemp );
if( m_hSplashDrop ) {
m_hSplashDrop->SetLifeTime( envInfo.GetSplashDropLifeTime() );
m_hSplashDrop->SetCreationRadius( (float)envInfo.GetSplashDropRadius() );
m_hSplashDrop->SetSplashPerSecond( envInfo.GetSplashDropCount() );
}
}
else {
SAFE_RELEASE_SPTR( m_hSplashDrop );
}
if( m_bEnableHeatHazeFilter ) {
if( !m_pHeatHazeFilter ) m_pHeatHazeFilter = (CEtHeatHazeFilter*)CreateFilter( SF_HEATHAZE );
if( m_pHeatHazeFilter ) {
m_pHeatHazeFilter->SetDistortionPower( envInfo.GetHeatHazeDistortionPower() );
m_pHeatHazeFilter->SetWaveSpeed( envInfo.GetHeatHazeWaveSpeed() );
}
}
else {
SAFE_DELETE( m_pHeatHazeFilter );
}
if( m_bEnableDOFFilter ) {
if( !m_pDOFFilter ) m_pDOFFilter = (CEtDOFFilter*)CreateFilter( SF_DOF );
if( m_pDOFFilter ) {
m_pDOFFilter->SetFocusDistance( envInfo.GetDOFFocusDistance() );
m_pDOFFilter->SetNearDOFStart( envInfo.GetDOFNearStart() );
m_pDOFFilter->SetNearDOFEnd( envInfo.GetDOFNearEnd() );
m_pDOFFilter->SetFarDOFStart( envInfo.GetDOFFarStart() );
m_pDOFFilter->SetFarDOFEnd( envInfo.GetDOFFarEnd() );
m_pDOFFilter->SetNearBlurSize( envInfo.GetDOFNearBlur() );
m_pDOFFilter->SetFarBlurSize( envInfo.GetDOFFarBlur() );
}
}
else {
SAFE_DELETE( m_pDOFFilter );
}
if( m_bEnableSnow ) {
EtSnowHandle hTemp;
if( m_hSnow ) hTemp = m_hSnow;
m_hSnow = CEtSnowEffect::CreateSnowEffect( envInfo.GetSnowTexture(), envInfo.GetSnowCount(), envInfo.GetSnowSize() );
SAFE_RELEASE_SPTR( hTemp );
if( m_hSnow ) {
m_hSnow->SetSnowTimeOut( envInfo.GetSnowTimeOut() );
m_hSnow->SetSnowHeight( envInfo.GetSnowHeight() );
m_hSnow->SetIsUp(envInfo.GetIsUp());
m_hSnow->SetSnowAniSpeed(envInfo.GetSnowAniSpeed());
}
}
else {
SAFE_RELEASE_SPTR( m_hSnow );
}
}
void CRenderBase::InitializeEnviLight( CEnviElement *pElement, bool bRefreshAll )
{
EtLightHandle hLight;
CEnvInfo& envInfo = pElement->GetInfo();
if( bRefreshAll == false && envInfo.GetLightCount() != m_hVecLight.size() ) bRefreshAll = true;
if( bRefreshAll ) {
SAFE_RELEASE_SPTRVEC( m_hVecLight );
for( DWORD i=0; i<envInfo.GetLightCount(); i++ ) {
SLightInfo Info = *envInfo.GetLight(i)->pInfo;
Info.Diffuse.r *= Info.Diffuse.a;
Info.Diffuse.g *= Info.Diffuse.a;
Info.Diffuse.b *= Info.Diffuse.a;
Info.Specular.r *= Info.Specular.a;
Info.Specular.g *= Info.Specular.a;
Info.Specular.b *= Info.Specular.a;
hLight = EternityEngine::CreateLight( &Info );
m_hVecLight.push_back( hLight );
}
}
else {
for( DWORD i=0; i<envInfo.GetLightCount(); i++ ) {
SLightInfo Info = *envInfo.GetLight(i)->pInfo;
Info.Diffuse.r *= Info.Diffuse.a;
Info.Diffuse.g *= Info.Diffuse.a;
Info.Diffuse.b *= Info.Diffuse.a;
Info.Specular.r *= Info.Specular.a;
Info.Specular.g *= Info.Specular.a;
Info.Specular.b *= Info.Specular.a;
*m_hVecLight[i]->GetLightInfo() = Info;
}
}
}
void CRenderBase::InitializeEnviLensFlare( CEnviElement *pElement, bool bRefreshAll )
{
CEnvInfo& envInfo = pElement->GetInfo();
if( bRefreshAll == false && envInfo.GetLightCount() != m_hVecLight.size() ) bRefreshAll = true;
if( bRefreshAll ) {
SAFE_RELEASE_SPTRVEC( m_hVecLensFlare );
MatrixEx CrossTemp;
for( DWORD i=0; i<envInfo.GetLightCount(); i++ ) {
EtLensFlareHandle hLensFlare;
CEnvInfo::LightInfoStruct *pStruct = envInfo.GetLight(i);
if( pStruct->bEnable == true ) {
hLensFlare = CEtLensFlare::CreateLensFlare( pStruct->pInfo->Direction, pStruct->szSunTexture.c_str(), pStruct->szLensFlareTexture.c_str() );
hLensFlare->SetFlareRadius( pStruct->fSunScale, pStruct->fLensScale );
CrossTemp.Identity();
CrossTemp.m_vZAxis = pStruct->pInfo->Direction;
CrossTemp.MakeUpCartesianByZAxis();
CrossTemp.RotateYAxis( pStruct->fRevisionYAxisAngle );
CrossTemp.RotatePitch( pStruct->fRevisionXAxisAngle );
hLensFlare->SetDirection( CrossTemp.m_vZAxis );
}
m_hVecLensFlare.push_back( hLensFlare );
}
}
else {
MatrixEx CrossTemp;
for( DWORD i=0; i<envInfo.GetLightCount(); i++ ) {
CEnvInfo::LightInfoStruct *pStruct = envInfo.GetLight(i);
if( pStruct->bEnable ) {
CrossTemp.Identity();
CrossTemp.m_vZAxis = pStruct->pInfo->Direction;
CrossTemp.MakeUpCartesianByZAxis();
CrossTemp.RotateYAxis( pStruct->fRevisionYAxisAngle );
CrossTemp.RotatePitch( pStruct->fRevisionXAxisAngle );
if( pStruct->fSunScale != m_hVecLensFlare[i]->GetSunRadius() ||
pStruct->fLensScale != m_hVecLensFlare[i]->GetFlareRadius() ||
pStruct->pInfo->Direction != CrossTemp.m_vZAxis )
m_hVecLensFlare[i]->SetFlareRadius( pStruct->fSunScale, pStruct->fLensScale );
m_hVecLensFlare[i]->SetSunTexture( pStruct->szSunTexture.c_str() );
m_hVecLensFlare[i]->SetFlareTexture( pStruct->szLensFlareTexture.c_str() );
m_hVecLensFlare[i]->SetDirection( CrossTemp.m_vZAxis );
}
}
}
}
void CRenderBase::InitializeEnviBGM( CEnviElement *pElement, bool bRefreshAll )
{
CEnvInfo& envInfo = pElement->GetInfo();
if( bRefreshAll ) {
if( m_nEnviBGMIndex != -1 ) {
CEtSoundEngine::GetInstance().RemoveSound( m_nEnviBGMIndex );
m_nEnviBGMIndex = -1;
}
SAFE_RELEASE_SPTR( m_hEnviBGMChannel );
}
// Envi BGM Setting
SectorIndex Sector = CGlobalValue::GetInstance().m_SelectGrid;
CTEtWorldSector *pSector = CTEtWorld::GetInstance().GetSector( Sector );
if( pSector ) {
if( pSector->GetSoundInfo() ) {
pSector->GetSoundInfo()->SetVolume( pSector->GetSoundInfo()->GetVolume() );
if( envInfo.GetEnviBGM() && strlen(envInfo.GetEnviBGM()) > 0 ) {
if( bRefreshAll ) m_nEnviBGMIndex = CEtSoundEngine::GetInstance().LoadSound( envInfo.GetEnviBGM(), false, true );
if( m_nEnviBGMIndex != -1 ) {
if( bRefreshAll ) m_hEnviBGMChannel = CEtSoundEngine::GetInstance().PlaySound( "BGM", m_nEnviBGMIndex, true, false );
if( m_hEnviBGMChannel ) {
float fBGMVolume = pSector->GetSoundInfo()->GetVolume();
m_hEnviBGMChannel->SetVolume( fBGMVolume * envInfo.GetEnviBGMRatio() );
pSector->GetSoundInfo()->SetVolume( fBGMVolume * ( 1.f - envInfo.GetEnviBGMRatio() ) );
}
}
}
}
}
}
void CRenderBase::Render( CGlobalValue::VIEW_TYPE Type )
{
if( m_bActivate == false ) return;
if( CFileServer::GetInstance().IsConnect() == false ) return;
if( m_FrameSync.CheckSync() == true ) {
LOCAL_TIME LocalTime = m_FrameSync.GetMSTime();
if( CGlobalValue::GetInstance().m_bSimulation == true ) {
CTdDummyActor::GetInstance().Render( LocalTime );
}
if( CGlobalValue::GetInstance().m_pParentView ) {
((CEtWorldPainterView*)CGlobalValue::GetInstance().m_pParentView)->GetDummyView()->SendMessage( UM_CUSTOM_RENDER );
}
switch( Type ) {
case CGlobalValue::GRID:
CTEtWorld::GetInstance().RenderGrid();
break;
case CGlobalValue::BRUSH:
case CGlobalValue::PROP:
case CGlobalValue::WATER:
case CGlobalValue::NAVIGATION:
case CGlobalValue::EVENT:
case CGlobalValue::SOUND:
case CGlobalValue::TRIGGER:
CTEtWorld::GetInstance().RenderHeightmap( CGlobalValue::GetInstance().m_SelectGrid );
break;
}
CPoint p;
GetCursorPos( &p );
ScreenToClient( CGlobalValue::GetInstance().m_pParentView->m_hWnd, &p );
EtVector3 Direction, Origin, vPickPos;
int nCameraIndex = 0;
if( m_CameraHandle )
{
nCameraIndex = m_CameraHandle->GetMyItemIndex();
}
CEtCamera::GetItem( nCameraIndex )->CalcPositionAndDir( p.x, p.y, Origin, Direction );
bool bPick = CTEtWorld::GetInstance().Pick( Origin, Direction, vPickPos );
CString szFrame;
if( bPick == true )
szFrame.Format( "FPS : %.2f ( %.2f, %.2f, %.2f )", m_FrameSync.GetFps(), vPickPos.x, vPickPos.y, vPickPos.z );
else szFrame.Format( "FPS : %.2f ( N/A )", m_FrameSync.GetFps() );
EternityEngine::DrawText2D( EtVector2( 0.f, 0.f ), szFrame );
if( !CGlobalValue::GetInstance().IsCheckOutMe() ) {
CString szFrame;
szFrame.Format( "Can't CheckOut! View Only", m_FrameSync.GetFps() );
EternityEngine::DrawText2D( EtVector2( 0.f, 0.03f ), szFrame, 0xffff0000 );
}
if( m_hSkyBox ) {
EtMatrix mat;
EtMatrixIdentity( &mat );
memcpy( &mat._41, &m_matExWorld.m_vPosition.x, sizeof(EtVector3) );
m_hSkyBox->Update( &mat );
}
CRect rcRect;
CalcRenderRect( rcRect );
if( s_bThreadRenderTarget == false ) {
// Lock();
s_bRenderMainScene = true;
EternityEngine::ClearScreen( D3DCOLOR_ARGB( 0, 40, 40, 40 ) );
m_fDelta = ( LocalTime - m_PrevLocalTime ) * 0.001f;
EternityEngine::RenderFrame( m_fDelta );
EternityEngine::ShowFrame( &rcRect );
s_bRenderMainScene = false;
// Unlock();
}
m_PrevLocalTime = LocalTime;
}
}
void CRenderBase::Process( CGlobalValue::VIEW_TYPE Type )
{
if( m_bActivate == false ) return;
if( CFileServer::GetInstance().IsConnect() == false ) return;
if( m_pEtSound ) {
if( !CGlobalValue::GetInstance().m_bSimulation )
m_pEtSound->SetListener( m_matExWorld.m_vPosition, m_matExWorld.m_vZAxis, m_matExWorld.m_vYAxis );
m_pEtSound->Process( 0.f );
}
m_FrameSync.UpdateTime();
CGlobalValue::GetInstance().ProcessAsyncKey();
LOCAL_TIME LocalTime = m_FrameSync.GetMSTime();
CInputDevice::GetInstance().Process( LocalTime, m_fDelta );
}
void CRenderBase::Reconstruction()
{
if( m_bActivate == false ) return;
CRect rcRect;
CalcRenderRect( rcRect );
EternityEngine::ReinitializeEngine( rcRect.Width(), rcRect.Height() );
CGlobalValue::GetInstance().RefreshRender();
}
void CRenderBase::CalcRenderRect( CRect &rcRect )
{
GetClientRect( m_hWnd, &rcRect );
if( CGlobalValue::GetInstance().m_pParentView ) {
CRect rcTabRect;
CDummyView *pDummyView = ((CEtWorldPainterView*)CGlobalValue::GetInstance().m_pParentView)->GetDummyView();
CDummyView::TabViewStruct *pStruct = pDummyView->GetTabViewStruct( CGlobalValue::GetInstance().m_nActiveView );
if( pStruct->pView == NULL ) return;
pStruct->pView->GetClientRect( &rcTabRect );
pDummyView->ClientToScreen( &rcRect );
pStruct->pView->ClientToScreen( &rcTabRect );
int nLeft = rcRect.left - rcTabRect.left;
int nTop = rcRect.top - rcTabRect.top;
int nRight = rcRect.right - rcTabRect.right;
int nBottom = rcRect.bottom - rcTabRect.bottom;
GetClientRect( m_hWnd, &rcRect );
rcRect += CRect( nLeft, nTop, -nRight, -nBottom );
}
}
void CRenderBase::UpdateCamera( MatrixEx &Cross )
{
m_matExWorld = Cross;
if( !m_CameraHandle ) return;
m_CameraHandle->Update( Cross );
}
void CRenderBase::ChangeShaderFolder( const char *szFullPath )
{
CEtResourceMng::GetInstance().RemoveResourcePath( m_szShaderFolder, true );
m_szShaderFolder = szFullPath;
CEtResourceMng::GetInstance().AddResourcePath( m_szShaderFolder, true );
}
/*
void CRenderBase::ChangeResourceFolder( const char *szFullPath )
{
CEtResourceMng::GetInstance().RemoveResourcePath( m_szResourceFolder, true );
m_szResourceFolder = szFullPath;
CEtResourceMng::GetInstance().AddResourcePath( m_szResourceFolder, true );
}
*/
void CRenderBase::SetDummyMovement( EtVector3 &vMovement )
{
if( m_bEnableWeather && m_hWeather ) {
m_hWeather->SetMovement( vMovement );
}
}
void CRenderBase::ToggleCameraTopView()
{
m_bToggleCameraTopView = !m_bToggleCameraTopView;
if( m_bToggleCameraTopView ) {
SectorIndex Sector = CGlobalValue::GetInstance().m_SelectGrid;
if( Sector == -1 ) return;
CTEtWorldSector *pSector = CTEtWorld::GetInstance().GetSector( Sector );
if( !pSector ) return;
m_matExWorldBackup = m_matExWorld;
float fSizeX = pSector->GetParentGrid()->GetGridWidth() * 100.f;
float fSizeY = pSector->GetParentGrid()->GetGridHeight() * 100.f;
m_matExWorld.Identity();
m_matExWorld.RotatePitch( 90.f );
m_matExWorld.m_vPosition = *pSector->GetOffset();
m_matExWorld.m_vPosition.y = min( fSizeX, fSizeY ) * 1.2f;
}
else {
m_matExWorld = m_matExWorldBackup;
}
CGlobalValue::GetInstance().RefreshRender();
}