DragonNest/Common/EtInterface/EtUITemplate.cpp
Cussrro 47f7895977 Revert "修复编码问题"
This reverts commit 9e69c01767.
2024-12-21 10:04:04 +08:00

441 lines
No EOL
9.4 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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;
}