Files
Sun1602/Client/GameClient/Interface/uiHelpAnnounceWindow/uiHelpAnnounceWindow_main.cpp
T
2022-10-26 12:25:11 +08:00

600 lines
14 KiB
C++

#include "SunClientPrecompiledHeader.h"
#include "uiHelpAnnounceWindow.h"
#include "uiHelpMan/uiHelpMan.h"
#include "GraphicResourceList.h"
#include "Hero.h"
#include "Application.h"
#include "interfacemanager.h"
#include "globalfunc.h"
#include "BattleScene.h"
#include "uiSystemMan/uiSystemMan.h"
#include "uiRadarMan/uiRadarMan.h"
#include "uiChatMan/uiChatMan_def.h"
#include "SystemChatDialog.h"
#include "ChatDialog.h"
const int c_iDefaultShowTime = 15000;
const int c_iBottomGap = 70;
const int c_iRightGap = 10;
//------------------------------------------------------------------------------
WzID uiHelpAnnounceWindow::m_wzId[DIALOG_MAX] =
{
StrToWzID("T001"), //DLGPOS_TXT_TITLE
StrToWzID("T002"), //DLGPOS_TXT_DESC1
StrToWzID("T003"), //DLGPOS_TXT_DESC2
StrToWzID("PI00"), //DLGPOS_IMAGE
};
//------------------------------------------------------------------------------
/**
*/
uiHelpAnnounceWindow::uiHelpAnnounceWindow(InterfaceManager *pUIMan) :
uiBase(pUIMan),
m_bControlsInitialized(false)
{
this->m_pHelpMan =
static_cast<uiHelpMan *>(this->GetUIMan()->GetUserInterfaceManager(UIMAN_HELP));
assert (m_pHelpMan);
if (!this->m_pHelpMan)
{
#ifdef _DEBUG
uiSystemMan * pSystemMan = (uiSystemMan *)g_InterfaceManager.GetUserInterfaceManager(UIMAN_SYSTEM);
if(pSystemMan)
pSystemMan->Sys_VerifyLock(_T("m_pHelpMan이 없습니다."));
#endif
this->ShowInterface(FALSE);
return;
}
memset ((CCtrlStaticWZ *)this->m_pTxtControls, NULL, sizeof (this->m_pTxtControls));
m_pPicture = NULL;
m_hHelpImage = NULL;
m_iSec = 0;
m_iOldSec = 0;
m_iShowTime = c_iDefaultShowTime;
}
//------------------------------------------------------------------------------
/**
*/
uiHelpAnnounceWindow::~uiHelpAnnounceWindow()
{
this->Release();
}
//------------------------------------------------------------------------------
/**
*/
void uiHelpAnnounceWindow::Init(CDrawBase* pDrawBase)
{
uiBase::Init(pDrawBase);
this->InitControls();
}
//------------------------------------------------------------------------------
/**
*/
void uiHelpAnnounceWindow::Release()
{
if(m_hHelpImage)
{
g_pSunRenderer->x_pManagerTexture->DestroyTexture( m_hHelpImage );
m_hHelpImage = NULL;
}
m_vPicControls.clear();
}
//------------------------------------------------------------------------------
/**
*/
void uiHelpAnnounceWindow::InitControls()
{
m_pPicture =
static_cast<CCtrlPictureWZ *>(this->getControl(DLGPOS_IMAGE));
assert (this->m_pPicture);
int i;
for (i=0; i<POS_TXT_SIZE; ++i)
{
this->m_pTxtControls[i] =
static_cast<CCtrlStaticWZ *>(this->getControl(DLGPOS_TXT_TITLE + i));
assert (this->m_pTxtControls[i]);
}
int numControls = GetDialogWZ()->GetControlCount();
for (i=0; i<numControls; ++i)
{
CControlWZ* pControl = GetDialogWZ()->FindControlWZ(i);
if (!pControl)
continue;
if (!(pControl->GetKind() & CTRL_KIND_PICTURE))
continue;
m_vPicControls.push_back(pControl);
}
this->m_bControlsInitialized = true;
}
//------------------------------------------------------------------------------
void uiHelpAnnounceWindow::OnShowWindow( BOOL val )
{
uiBase * pDlg = GET_DIALOG(IM_CHAT_MANAGER::SYSTEM_CHAT_DIALOG);//(SystemChatDialog * ) g_InterfaceManager.GetDialog(InterfaceManager::DIALOG_SYSTEM_CHAT);
if (val)
{
if (!this->m_bControlsInitialized)
{
this->ShowInterface(FALSE);
return;
}
for (int i=1; i<POS_TXT_SIZE; ++i)
{
if(m_pTxtControls[i])
GlobalFunc::SetCaption (m_pTxtControls[i], _T(""));
}
UpdatePosition();
m_iSec = 0;
m_iOldSec = 0;
if( pDlg && pDlg->IsVisibleWindow() == TRUE)
{
pDlg->ShowWindow(FALSE);
}
}
else
{
}
}
//------------------------------------------------------------------------------
/**
*/
void
uiHelpAnnounceWindow::Process(DWORD dwTick)
{
if (!this->IsVisible())
return;
m_dwTransAcc += dwTick;
if (m_bTrans)
{
if (m_dwTransAcc >= m_dwTransEnd)
{
float fPercent =
((float)(m_dwTransAcc - m_dwTransEnd) / (float)m_dwTransEnd);
float fTrans = 1.0f - fPercent;
if( fTrans < 0.0f )
fTrans = 0.0f;
m_fTrans = 1.0f - (fTrans * 1.0f);
}
}
else
{
if (m_dwTransAcc >= m_dwTransEnd)
{
float fPercent =
((float)(m_dwTransAcc - m_dwTransEnd) / (float)m_dwTransEnd);
float fTrans = 1.0f - fPercent;
if( fTrans < 0.0f )
fTrans = 0.0f;
m_fTrans = fTrans;
}
if (m_fTrans <= 0.0f)
{
m_bTrans = true;
ShowInterface(FALSE);
ChatDialog * pDlg = GET_CAST_DIALOG(ChatDialog, IM_CHAT_MANAGER::CHAT_DIALOG);
SystemChatDialog * pSystemChatDlg = GET_CAST_DIALOG(SystemChatDialog, IM_CHAT_MANAGER::SYSTEM_CHAT_DIALOG);
if( pDlg && pDlg->GetShowSystemChat() && g_InterfaceManager.IsShowGameInterface() )
{
if(pSystemChatDlg)
{
pSystemChatDlg->ShowWindow(TRUE);
}
}
}
}
GetDialogWZ()->SetTransparency(m_fTrans);
}
//------------------------------------------------------------------------------
/**
*/
void uiHelpAnnounceWindow::UpdatePosition()
{
////SolarDialog::UpdatePosition();
int iWidth, iHeight;
RECT rc;
GetDialogWZ()->GetClientRect(&rc);
iWidth = rc.right - rc.left;
iHeight = rc.bottom - rc.top;
POINT pt = g_pApplication->Get2DModeMapping();
RECT drc;
if (GET_DIALOG(IM_RADAR_MANAGER::RADAR_DIALOG_PLUS)->IsVisible())
{
uiBase* pDlg = GET_DIALOG(IM_RADAR_MANAGER::RADAR_DIALOG_PLUS);
pDlg->GetDialogWZ()->GetClientRect(&drc);
int iTop = pt.y - (iHeight + c_iBottomGap);
GetDialogWZ()->MoveWindowWZ((float)(drc.right - iWidth), (float)(iTop));
}
else if (GET_DIALOG(IM_RADAR_MANAGER::RADAR_DIALOG)->IsVisible())
{
uiBase* pDlg = GET_DIALOG(IM_RADAR_MANAGER::RADAR_DIALOG);
pDlg->GetDialogWZ()->GetClientRect(&drc);
int iTop = pt.y - (iHeight + c_iBottomGap);
GetDialogWZ()->MoveWindowWZ((float)(drc.right - iWidth), (float)(iTop));
}
else
{
int iTop = pt.y - (iHeight + c_iBottomGap);
int iLeft = pt.x - (iWidth + c_iRightGap);
GetDialogWZ()->MoveWindowWZ((float)(iLeft), (float)(iTop));
}
}
//------------------------------------------------------------------------------
/**
*/
BOOL uiHelpAnnounceWindow::_isEnable()
{
if(GENERALPARAM->IsNet())
{
if (this->IsLock())
return FALSE;
if(!g_pHero)
return FALSE;
if(!GetManager())
return FALSE;
if(m_HelpInfo.m_dw_CharStatus != eHK_GM_MSG)
{
if(!GAMEOPTION->GetShowHelp())
{
ShowInterface(FALSE);
return FALSE;
}
}
return TRUE;
}
else
{
return TRUE;
}
}
//------------------------------------------------------------------------------
/**
*/
void uiHelpAnnounceWindow::MessageProc( SI_MESSAGE * pMessage )
{
if (!_isEnable())
return;
}
//------------------------------------------------------------------------------
/**
*/
void uiHelpAnnounceWindow::OnUpdateSolarDialog()
{
if (!_isEnable())
return;
if( m_ShowTimer.IsExpired() )
{
if(this->IsVisible())
{
m_bTrans = false;
m_fTrans = 1.0f;
m_dwTransAcc = 0;
m_dwTransEnd = (SEC_PER_TICK);
}
}
if((m_HelpInfo.m_dw_CharStatus == eHK_GM_MSG) && m_iSec)// GM 메시지
{
float fRemainRate, fRemainTime;
int iRemainTime;
if(!m_Counter.IsExpired())
{
fRemainRate = 1.0f - m_Counter.GetProgressRatio();
fRemainTime = m_iSec * fRemainRate * 1000;
iRemainTime = int( (fRemainTime / 1000) );
}
else
{
iRemainTime = 0;
m_iOldSec = 0;
}
if(m_iOldSec && (m_iOldSec != iRemainTime))
{
m_iOldSec = iRemainTime;
FTextParser parser;
FTextSentence Sentence;
RECT rc = m_pTxtControls[2]->GetSizeRect();
m_TextRender[1].Init(g_pSunRenderer, rc);
m_TextRender[1].SetRect(rc);
m_TextRender[1].ClearSentence();
parser.SetDefaultFont(StrToWzID("mn12"), 0xFFFFFFFF);
TCHAR szString[INTERFACE_STRING_LENGTH] = {0,};
TCHAR szString2[INTERFACE_STRING_LENGTH] = {0,};
g_InterfaceManager.GetInterfaceString( m_HelpInfo.m_dw_DescStringCode[1], szString, INTERFACE_STRING_LENGTH );
BOOL bRet;
Snprintf(szString2, INTERFACE_STRING_LENGTH-1, szString, iRemainTime);
bRet = parser.Parser(szString2, Sentence);
if(bRet)
{
m_TextRender[1].Append(Sentence);
}
m_TextRender[1].SetBeginLineIndex(0);
}
}
}
//------------------------------------------------------------------------------
/**
*/
void uiHelpAnnounceWindow::OnRenderSolarDialog()
{
renderHelpInfo();
}
//------------------------------------------------------------------------------
/**
*/
void uiHelpAnnounceWindow::_dlgSettingforTrans()
{
m_ShowTimer.SetTimer(m_iShowTime);
m_bTrans = true;
m_fTrans = 0;
m_dwTransAcc = 0;
m_dwTransEnd = (SEC_PER_TICK);
}
#ifdef _SCJ_REMOVE_ANNOUNCE_WINDOW
#else
//------------------------------------------------------------------------------
void uiHelpAnnounceWindow::RestoreHelpInfo()
{
if (IsVisible())
{
SetHelpInfo(m_HelpInfo);
}
}
#endif //_SCJ_REMOVE_ANNOUNCE_WINDOW
//------------------------------------------------------------------------------
/**
*/
void uiHelpAnnounceWindow::SetHelpInfo(BASE_HelpInfo& helpInfo)
{
m_iShowTime = c_iDefaultShowTime;
_dlgSettingforTrans();
m_HelpInfo = helpInfo;
//제목은 일반 텍스트로 출력하고,
TCHAR szTitle[INTERFACE_STRING_LENGTH] = {0,};
g_InterfaceManager.GetInterfaceString( m_HelpInfo.m_dw_TitleStringCode, szTitle, INTERFACE_STRING_LENGTH );
GlobalFunc::SetCaption (m_pTxtControls[DLGPOS_TXT_TITLE], szTitle);
//나머지 내용은 정규화 텍스트로 출력
for(int i=0; i<POS_DESC_SIZE; ++i)
{
RECT rc = m_pTxtControls[i+1]->GetSizeRect();
m_TextRender[i].Init(g_pSunRenderer, rc);
m_TextRender[i].SetRect(rc);
m_TextRender[i].ClearSentence();
if (0 == m_HelpInfo.m_dw_DescStringCode[i])
{
continue;
}
FTextParser parser;
FTextSentence Sentence;
parser.SetDefaultFont(StrToWzID("mn12"), 0xFFFFFFFF);
TCHAR szString[INTERFACE_STRING_LENGTH] = {0,};
g_InterfaceManager.GetInterfaceString( m_HelpInfo.m_dw_DescStringCode[i], szString, INTERFACE_STRING_LENGTH );
BOOL bRet = parser.Parser(szString, Sentence);
if(bRet)
{
m_TextRender[i].Append(Sentence);
}
m_TextRender[i].SetBeginLineIndex(0);
}
for (size_t j=0; j<m_vPicControls.size(); ++j)
{
m_vPicControls[j]->ShowWindowWZ(WZ_HIDE);
}
CODETYPE dwImageCode = (CODETYPE)m_HelpInfo.m_dw_ImageCode;
if (dwImageCode && !m_vPicControls.empty())
{
CODETYPE dwImageCodeReal = dwImageCode- 1;
if (m_vPicControls.size() <= dwImageCodeReal)
{
/* empty */
}
else
{
for (size_t j=0; j<m_vPicControls.size(); ++j)
{
m_vPicControls[j]->ShowWindowWZ(WZ_HIDE);
}
m_vPicControls[dwImageCodeReal]->ShowWindowWZ(WZ_SHOW);
}
}
}
//------------------------------------------------------------------------------
/**
*/
void uiHelpAnnounceWindow::SetGMHelpInfo(BASE_HelpInfo& helpInfo, int iParam)
{
m_iShowTime = (iParam) * 1000;
_dlgSettingforTrans();
m_iOldSec = iParam;
m_iSec = iParam;
m_HelpInfo = helpInfo;
//제목은 일반 텍스트로 출력하고,
TCHAR szTitle[INTERFACE_STRING_LENGTH] = {0,};
g_InterfaceManager.GetInterfaceString( m_HelpInfo.m_dw_TitleStringCode, szTitle, INTERFACE_STRING_LENGTH );
GlobalFunc::SetCaption (m_pTxtControls[DLGPOS_TXT_TITLE], szTitle);
//나머지 내용은 정규화 텍스트로 출력
for(int i=0; i<POS_DESC_SIZE; ++i)
{
FTextParser parser;
FTextSentence Sentence;
RECT rc = m_pTxtControls[i+1]->GetSizeRect();
m_TextRender[i].Init(g_pSunRenderer, rc);
m_TextRender[i].SetRect(rc);
m_TextRender[i].ClearSentence();
parser.SetDefaultFont(StrToWzID("mn12"), 0xFFFFFFFF);
TCHAR szString[INTERFACE_STRING_LENGTH] = {0,};
TCHAR szString2[INTERFACE_STRING_LENGTH] = {0,};
g_InterfaceManager.GetInterfaceString( m_HelpInfo.m_dw_DescStringCode[i], szString, INTERFACE_STRING_LENGTH );
BOOL bRet;
if(i==0)
{
bRet = parser.Parser(szString, Sentence);
}
else
{
m_Counter.SetTimer(m_iSec * 1000);
Snprintf(szString2, INTERFACE_STRING_LENGTH-1, szString, m_iSec);
bRet = parser.Parser(szString2, Sentence);
}
if(bRet)
{
m_TextRender[i].Append(Sentence);
}
m_TextRender[i].SetBeginLineIndex(0);
}
for (size_t j=0; j<m_vPicControls.size(); ++j)
{
m_vPicControls[j]->ShowWindowWZ(WZ_HIDE);
}
CODETYPE dwImageCode = (CODETYPE)m_HelpInfo.m_dw_ImageCode;
if (dwImageCode && !m_vPicControls.empty())
{
CODETYPE dwImageCodeReal = dwImageCode- 1;
if (m_vPicControls.size() <= dwImageCodeReal)
{
/* empty */
}
else
{
m_vPicControls[dwImageCodeReal]->ShowWindowWZ(WZ_SHOW);
}
}
}
//------------------------------------------------------------------------------
/**
*/
void uiHelpAnnounceWindow::renderHelpInfo()
{
if (!_isEnable())
return;
RECT rc = {0,};
if(m_HelpInfo.m_dw_HelpIndex)
{
for(int i=0; i<POS_DESC_SIZE; ++i)
{
rc = m_pTxtControls[i+1]->GetSizeRect();
m_TextRender[i].SetRect(rc);
m_TextRender[i].Render();
m_TextRender[i].SetAlphaModulate(TRUE);
BYTE fadeValue = (BYTE)(m_fTrans*255.0f);
m_TextRender[i].SetAlphaValue(fadeValue);
}
}
}
//------------------------------------------------------------------------------
/**
*/
void uiHelpAnnounceWindow::_renderHelpImage()
{
}
//------------------------------------------------------------------------------
/**
*/
void uiHelpAnnounceWindow::NetworkProc( MSG_BASE * pMsg )
{
}