DragonNest/Common/EtInterface/EtUITemplate.cpp

441 lines
9.4 KiB
C++
Raw Normal View History

2024-12-19 09:48:26 +08:00
#include "StdAfx.h"
#include "EtUITemplate.h"
#include "EtUITemplateOld.h"
#include "EtFontMng.h"
#include "DebugSet.h"
#include "EtLoader.h"
#ifdef _DEBUG
#define new new(_NORMAL_BLOCK,__FILE__,__LINE__)
#endif
SUIColor::SUIColor()
{
Clear();
}
void SUIColor::Blend( int nState, float fElapsedTime, float fRate )
{
if( HIBYTE(HIWORD(dwCurrentColor)) < (BYTE)(255*0.05f) )
{
dwCurrentColor = dwColor[nState];
}
else if( dwCurrentColor != dwColor[ nState ] ) {
EtColor CurrentColor;
EtColorLerp( &CurrentColor, &EtColor( dwCurrentColor ), &EtColor( dwColor[ nState ] ), 1.0f - powf( fRate, 30 * fElapsedTime ) );
dwCurrentColor = CurrentColor;
}
}
void SUIColor::Clear()
{
dwCurrentColor = 0xffffffff;
dwColor[UI_STATE_NORMAL] = 0xffffffff;
dwColor[UI_STATE_DISABLED] = 0xc87f7f7f;
dwColor[UI_STATE_HIDDEN] = 0x00000000;
dwColor[UI_STATE_FOCUS] = 0xffffffff;
dwColor[UI_STATE_MOUSEENTER]= 0xffffffff;
dwColor[UI_STATE_PRESSED] = 0xffffffff;
}
SUIColorEx::SUIColorEx()
: m_fConst(1.0f)
, m_fBlendTime(0.0f)
, m_SrcColor((DWORD)0xffffffff)
, m_nCurState(UI_STATE_NORMAL)
{
}
void SUIColorEx::SetState( UI_CONTROL_STATE uiControlState )
{
m_nCurState = uiControlState;
dwCurrentColor = dwColor[m_nCurState];
}
void SUIColorEx::BlendEx( int nState, float fElapsedTime, float fBlendTime )
{
if( m_nCurState != nState )
{
m_nCurState = nState;
m_fConst = m_fBlendTime = fBlendTime;
m_SrcColor = dwCurrentColor;
}
if( m_fBlendTime > 0.0f )
{
EtColor CurColor;
EtColorLerp( &CurColor, &m_SrcColor, &EtColor( dwColor[m_nCurState] ), 1.0f-(1/powf(m_fConst,2)*powf(m_fBlendTime,2) ) );
dwCurrentColor = CurColor;
m_fBlendTime -= fElapsedTime;
}
else
{
dwCurrentColor = dwColor[m_nCurState];
}
}
bool SUIElement::Load_01( CStream &stream )
{
SUIColor tempColor;
stream >> tempColor;
TextureColor.Assign( tempColor );
stream >> tempColor;
FontColor.Assign( tempColor );
stream >> UVCoord;
stream >> dwFontFormat;
stream >> nFontIndex;
stream.SeekCur<int>();
stream.SeekCur<int>();
stream >> bShadowFont;
stream.SeekCur<bool>();
return true;
}
bool SUIElement::Load_02( CStream &stream )
{
SUIColor tempColor;
stream >> tempColor;
TextureColor.Assign( tempColor );
stream >> tempColor;
FontColor.Assign( tempColor );
stream >> UVCoord;
stream >> dwFontFormat;
stream >> nFontIndex;
stream >> bShadowFont;
return true;
}
bool SUIElement::Load_03( CStream &stream )
{
SUIColor tempColor;
stream >> tempColor;
TextureColor.Assign( tempColor );
stream >> tempColor;
FontColor.Assign( tempColor );
stream >> UVCoord;
stream >> dwFontFormat;
stream >> nFontIndex;
stream >> nFontHeight;
stream >> bShadowFont;
return true;
}
bool SUIElement::Load_04( CStream &stream )
{
SUIColor tempColor;
stream >> tempColor;
TextureColor.Assign( tempColor );
stream >> tempColor;
FontColor.Assign( tempColor );
stream >> UVCoord;
stream >> fTextureWidth;
stream >> fTextureHeight;
stream >> dwFontFormat;
stream >> nFontIndex;
stream >> nFontHeight;
stream >> bShadowFont;
return true;
}
bool SUIElement::Load_05( CStream &stream )
{
SUIColor tempColor;
stream >> tempColor;
TextureColor.Assign( tempColor );
stream >> tempColor;
FontColor.Assign( tempColor );
stream >> UVCoord;
stream >> fTextureWidth;
stream >> fTextureHeight;
stream >> fDelayTime;
stream >> dwFontFormat;
stream >> nFontIndex;
stream >> nFontHeight;
stream >> bShadowFont;
return true;
}
bool SUIElement::Load_06( CStream &stream )
{
TextureColor.Load(stream);
FontColor.Load(stream);
stream >> UVCoord;
stream >> fTextureWidth;
stream >> fTextureHeight;
stream >> fDelayTime;
stream >> dwFontFormat;
stream >> nFontIndex;
stream >> nFontHeight;
stream >> bShadowFont;
return true;
}
bool SUIElement::Load_07( CStream &stream )
{
TextureColor.Load(stream);
FontColor.Load(stream);
ShadowFontColor.Load(stream);
stream >> UVCoord;
stream >> fTextureWidth;
stream >> fTextureHeight;
stream >> fDelayTime;
stream >> dwFontFormat;
stream >> nFontIndex;
stream >> nFontHeight;
stream >> bShadowFont;
return true;
}
bool SUIElement::Load_08( CStream& stream )
{
TextureColor.Load(stream);
FontColor.Load(stream);
ShadowFontColor.Load(stream);
stream >> UVCoord;
stream >> fTextureWidth;
stream >> fTextureHeight;
stream >> fDelayTime;
stream >> dwFontFormat;
stream >> nFontIndex;
stream >> nFontHeight;
stream >> bShadowFont;
stream >> fFontHoriOffset;
stream >> fFontVertOffset;
if( bShadowFont )
nDrawType = SFontDrawEffectInfo::SHADOW;
return true;
}
bool SUIElement::Load_09( CStream &stream )
{
TextureColor.Load(stream);
FontColor.Load(stream);
ShadowFontColor.Load(stream);
stream >> UVCoord;
stream >> fTextureWidth;
stream >> fTextureHeight;
stream >> fDelayTime;
stream >> dwFontFormat;
stream >> nFontIndex;
stream >> nFontHeight;
stream >> bShadowFont;
stream >> fFontHoriOffset;
stream >> fFontVertOffset;
stream >> nDrawType;
stream >> nWeight;
stream >> fAlphaWeight;
return true;
}
bool SUIElement::Load_10( CStream &stream )
{
TextureColor.Load(stream);
FontColor.Load(stream);
ShadowFontColor.Load(stream);
stream >> UVCoord;
stream >> fTextureWidth;
stream >> fTextureHeight;
stream >> fDelayTime;
stream >> dwFontFormat;
stream >> nFontIndex;
stream >> nFontHeight;
stream >> bShadowFont;
stream >> fFontHoriOffset;
stream >> fFontVertOffset;
stream >> nDrawType;
stream >> nWeight;
stream >> fAlphaWeight;
stream >> fGlobalBlurAlphaWeight;
return true;
}
bool SUIElement::Load( CStream &stream )
{
DWORD dwVersion;
stream >> dwVersion;
switch( dwVersion )
{
case SUIElement_01::VERSION: Load_01(stream); break;
case SUIElement_02::VERSION: Load_02(stream); break;
case SUIElement_03::VERSION: Load_03(stream); break;
case SUIElement_04::VERSION: Load_04(stream); break;
case SUIElement_05::VERSION: Load_05(stream); break;
case SUIElement_06::VERSION: Load_06(stream); break;
case SUIElement_07::VERSION: Load_07(stream); break;
case SUIElement_08::VERSION: Load_08(stream); break;
case SUIElement_09::VERSION: Load_09(stream); break;
case SUIElement_10::VERSION: Load_10(stream); break;
case VERSION:
{
TextureColor.Load(stream);
FontColor.Load(stream);
ShadowFontColor.Load(stream);
stream >> UVCoord;
stream >> fTextureWidth;
stream >> fTextureHeight;
stream >> fDelayTime;
stream >> dwFontFormat;
stream >> nFontIndex;
stream >> nFontHeight;
stream >> bShadowFont;
stream >> fFontHoriOffset;
stream >> fFontVertOffset;
stream >> nDrawType;
stream >> nWeight;
stream >> fAlphaWeight;
stream >> fGlobalBlurAlphaWeight;
stream >> TemplateUVCoord;
}
break;
default:
CDebugSet::ToLogFile( "SUIElement::Load, default case(%d)!", dwVersion );
return false;
}
return true;
}
bool SUIElement::Save( CStream &stream )
{
stream << VERSION;
TextureColor.Save(stream);
FontColor.Save(stream);
ShadowFontColor.Save(stream);
stream << UVCoord;
stream << fTextureWidth;
stream << fTextureHeight;
stream << fDelayTime;
stream << dwFontFormat;
stream << nFontIndex;
stream << nFontHeight;
stream << bShadowFont;
stream << fFontHoriOffset;
stream << fFontVertOffset;
stream << nDrawType;
stream << nWeight;
stream << fAlphaWeight;
stream << fGlobalBlurAlphaWeight;
stream << TemplateUVCoord;
return true;
}
CEtUITemplate::CEtUITemplate(void)
: m_dwVersion( 0 )
, m_bExistTemplateTexture( false )
{
}
CEtUITemplate::~CEtUITemplate(void)
{
SAFE_RELEASE_SPTR( m_hTemplateTexture );
}
bool CEtUITemplate::Save( CStream &Stream )
{
Stream << VERSION;
Stream << m_szTemplateName;
Stream << (int)m_vecElement.size();
for( int i = 0; i < (int)m_vecElement.size(); i++ )
{
m_vecElement[i].Save(Stream);
}
m_bExistTemplateTexture = ( m_hTemplateTexture ) ? true : false;
Stream << m_bExistTemplateTexture;
return true;
}
bool CEtUITemplate::Load( CStream &Stream )
{
DWORD dwVersion;
Stream >> dwVersion;
m_dwVersion = dwVersion;
switch( dwVersion )
{
case VERSION_OLD:
case VERSION:
{
int nSize;
Stream >> m_szTemplateName;
Stream >> nSize;
m_vecElement.resize( nSize );
for( int i = 0; i < nSize; i++ )
{
m_vecElement[i].Load(Stream);
}
}
break;
default:
CDebugSet::ToLogFile( "CEtUITemplate::Load, default case(%d)!", dwVersion );
break;
}
if( m_dwVersion > VERSION_OLD )
Stream >> m_bExistTemplateTexture;
return true;
}
void CEtUITemplate::OnLoaded()
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҷ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ø<EFBFBD> <20>ε<EFBFBD><CEB5>ϴµ<CFB4>
// <20>̶<EFBFBD> <20><><EFBFBD>ø<EFBFBD> <20>ؽ<EFBFBD>ó<EFBFBD><C3B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5>ϸ<EFBFBD> <20>ʹ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ɸ<EFBFBD><C9B8><20>ϰ<EFBFBD>
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʿ<EFBFBD> <20><><EFBFBD><20>ؼ<EFBFBD> <20>̷<EFBFBD><CCB7><EFBFBD> OnLoaded<65>Լ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΰ<EFBFBD> <20><><EFBFBD><EFBFBD> ȣ<><C8A3><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD> <20>Ѵ<EFBFBD>.
if( m_dwVersion > VERSION_OLD && m_bExistTemplateTexture )
LoadTemplateTexture();
}
void CEtUITemplate::LoadTemplateTexture()
{
SAFE_RELEASE_SPTR( m_hTemplateTexture );
char szFileName[_MAX_PATH] = {0,};
sprintf_s( szFileName, _countof(szFileName), "UIT_%s.dds", m_szTemplateName.c_str() );
m_hTemplateTexture = LoadResource( szFileName, RT_TEXTURE );
}
CEtUITemplate& CEtUITemplate::operator = ( const CEtUITemplate &rhs )
{
if(this==&rhs)
return *this;
m_dwVersion = rhs.m_dwVersion;
m_szTemplateName = rhs.m_szTemplateName;
m_vecElement.clear();
m_vecElement = rhs.m_vecElement;
m_bExistTemplateTexture = rhs.m_bExistTemplateTexture;
SAFE_RELEASE_SPTR( m_hTemplateTexture );
m_hTemplateTexture = rhs.m_hTemplateTexture;
if( m_hTemplateTexture ) m_hTemplateTexture->AddRef();
else if( !m_szTemplateName.empty() ) OnLoaded();
return *this;
}