81 lines
3.2 KiB
C++
81 lines
3.2 KiB
C++
#include "Stdafx.h"
|
|
#include "ECRVolumeFog.h"
|
|
#include "UnionValueProperty.h"
|
|
#include "TEtWorldEventArea.h"
|
|
#include "TEtWorldSector.h"
|
|
#include "TEtWorldEventControl.h"
|
|
|
|
CECRVolumeFog::CECRVolumeFog( const char *szEventControlName )
|
|
: CEventCustomRender( szEventControlName )
|
|
{
|
|
}
|
|
|
|
CECRVolumeFog::~CECRVolumeFog()
|
|
{
|
|
SAFE_RELEASE_SPTR( m_hVolumeFog );
|
|
}
|
|
|
|
|
|
void CECRVolumeFog::Initialize()
|
|
{
|
|
CTEtWorldSector *pSector = (CTEtWorldSector *)m_pEventArea->GetControl()->GetSector();
|
|
EtVector3 vOffset = *pSector->GetOffset();
|
|
vOffset.x -= ( pSector->GetTileWidthCount() * pSector->GetTileSize() ) / 2.f;
|
|
vOffset.z -= ( pSector->GetTileHeightCount() * pSector->GetTileSize() ) / 2.f;
|
|
vOffset.y = 0.f;
|
|
|
|
int nEventAreaCommonParamCount = 0;
|
|
for( int i=0; ; i++ ) {
|
|
if( g_EventAreaPropertyDefine[i].szCategory == NULL ) break;
|
|
nEventAreaCommonParamCount = i + 1;
|
|
}
|
|
|
|
SAFE_RELEASE_SPTR( m_hVolumeFog );
|
|
m_pEventArea->CalcOBB();
|
|
float fRadius = max( m_pEventArea->GetOBB()->Extent[0], m_pEventArea->GetOBB()->Extent[2] );
|
|
float fHeight = m_pEventArea->GetMax()->y - m_pEventArea->GetMin()->y;
|
|
D3DXCOLOR Color = m_pEventArea->GetProperty(2+nEventAreaCommonParamCount)->GetVariableVector4();
|
|
EtVector3 vCenter = m_pEventArea->GetOBB()->Center;
|
|
vCenter.y = pSector->GetHeight( m_pEventArea->GetOBB()->Center.x, m_pEventArea->GetOBB()->Center.z );
|
|
vCenter.y += m_pEventArea->GetMin()->y;
|
|
float fDensity = m_pEventArea->GetProperty(1+nEventAreaCommonParamCount)->GetVariableFloat();
|
|
if( fDensity <= 0.f ) fDensity = 0.001f;
|
|
char *szTexName = m_pEventArea->GetProperty(0+nEventAreaCommonParamCount)->GetVariableString();
|
|
m_hVolumeFog = CEtVolumeFog::CreateVolumeFog( ( szTexName ) ? szTexName : "", vCenter + vOffset, fRadius, fDensity, fHeight, Color );
|
|
}
|
|
|
|
void CECRVolumeFog::OnSelect()
|
|
{
|
|
}
|
|
|
|
void CECRVolumeFog::OnUnselect()
|
|
{
|
|
}
|
|
|
|
void CECRVolumeFog::OnModify()
|
|
{
|
|
CTEtWorldSector *pSector = (CTEtWorldSector *)m_pEventArea->GetControl()->GetSector();
|
|
EtVector3 vOffset = *pSector->GetOffset();
|
|
vOffset.x -= ( pSector->GetTileWidthCount() * pSector->GetTileSize() ) / 2.f;
|
|
vOffset.z -= ( pSector->GetTileHeightCount() * pSector->GetTileSize() ) / 2.f;
|
|
vOffset.y = 0.f;
|
|
|
|
int nEventAreaCommonParamCount = 0;
|
|
for( int i=0; ; i++ ) {
|
|
if( g_EventAreaPropertyDefine[i].szCategory == NULL ) break;
|
|
nEventAreaCommonParamCount = i + 1;
|
|
}
|
|
|
|
SAFE_RELEASE_SPTR( m_hVolumeFog );
|
|
m_pEventArea->CalcOBB();
|
|
float fRadius = max( m_pEventArea->GetOBB()->Extent[0], m_pEventArea->GetOBB()->Extent[2] );
|
|
float fHeight = m_pEventArea->GetMax()->y - m_pEventArea->GetMin()->y;
|
|
D3DXCOLOR Color = m_pEventArea->GetProperty(2+nEventAreaCommonParamCount)->GetVariableVector4();
|
|
EtVector3 vCenter = m_pEventArea->GetOBB()->Center;
|
|
vCenter.y = pSector->GetHeight( m_pEventArea->GetOBB()->Center.x, m_pEventArea->GetOBB()->Center.z );
|
|
vCenter.y += m_pEventArea->GetMin()->y;
|
|
float fDensity = m_pEventArea->GetProperty(1+nEventAreaCommonParamCount)->GetVariableFloat();
|
|
if( fDensity <= 0.f ) fDensity = 0.001f;
|
|
char *szTexName = m_pEventArea->GetProperty(0+nEventAreaCommonParamCount)->GetVariableString();
|
|
m_hVolumeFog = CEtVolumeFog::CreateVolumeFog( ( szTexName ) ? szTexName : "", vCenter + vOffset, fRadius, fDensity, fHeight, Color );
|
|
}
|