131 lines
3.4 KiB
C++
131 lines
3.4 KiB
C++
#include "stdafx.h"
|
|
#include "SUIMsgControlPenaltyCustomizer.h"
|
|
#include <toolkit/XStringUtil.h>
|
|
#include "SStringDB.h"
|
|
|
|
cMsgControlPenaltyCustomizer::cMsgControlPenaltyCustomizer() : m_wndBlockTime(NULL),
|
|
m_wndPenaltyCount(NULL),
|
|
m_wndPenaltyCountTime(NULL),
|
|
m_blockTime(0.0f),
|
|
m_time(0)
|
|
{
|
|
}
|
|
|
|
void cMsgControlPenaltyCustomizer::customizing()
|
|
{
|
|
assert(!m_msgControl && "m_msgControl of the penalty msg box is null");
|
|
|
|
KUIWnd* wndMsg = m_msgControl->GetChild(m_msgControl->getMsgControlId());
|
|
assert(!wndMsg && "msg control of the penalty msg box is null");
|
|
|
|
std::string caption;
|
|
|
|
// block time
|
|
caption = convertTimeToString(m_blockTime, 2484);
|
|
m_wndBlockTime = m_msgControl->addStatic("staticBlockTime", caption.c_str());
|
|
|
|
/// 중복 퇴장 페널티일 때만 페널티 카운트를 출력해 준다
|
|
if (2 <= m_penaltyCount)
|
|
{
|
|
/// penalty count
|
|
caption = "<hcenter>";
|
|
caption += SR(2421, "#@value@#", m_penaltyCount);
|
|
m_wndPenaltyCount = m_msgControl->addStatic("staticPenaltyCount", caption.c_str());
|
|
|
|
/// penalty count time
|
|
caption = convertTimeToString(m_penaltyCountTime, 2487);
|
|
m_wndPenaltyCountTime = m_msgControl->addStatic("staticPenaltyCountTime", caption.c_str());
|
|
}
|
|
|
|
/// 메세지 텍스트 바로 아래에 와야 된다.
|
|
int y = wndMsg->GetRect().bottom;
|
|
/// 여유분
|
|
y -= 10;
|
|
|
|
/// move controls, x는 중앙 정렬 되어 있으므로 y 값이 이동 시키면 된다.
|
|
if (m_wndBlockTime)
|
|
{
|
|
m_wndBlockTime->MovePos(m_wndBlockTime->GetRect().left, y);
|
|
y += m_wndBlockTime->GetRect().GetHeight();
|
|
}
|
|
if (m_wndPenaltyCount)
|
|
{
|
|
m_wndPenaltyCount->MovePos(m_wndPenaltyCount->GetRect().left, y);
|
|
y += m_wndPenaltyCount->GetRect().GetHeight();
|
|
}
|
|
if (m_wndPenaltyCountTime)
|
|
{
|
|
m_wndPenaltyCountTime->MovePos(m_wndPenaltyCountTime->GetRect().left, y);
|
|
y += m_wndPenaltyCountTime->GetRect().GetHeight();
|
|
}
|
|
/// 여유분
|
|
y += 10;
|
|
|
|
int buttonTop = y;
|
|
m_msgControl->getButtonTopPos(buttonTop);
|
|
int addedHeight = y - buttonTop;
|
|
m_msgControl->moveButtons(0, addedHeight);
|
|
|
|
/// resize
|
|
KRect wndR = m_msgControl->GetRect();
|
|
wndR.bottom += addedHeight;
|
|
m_msgControl->SetRect(wndR);
|
|
m_msgControl->UpdateBack();
|
|
}
|
|
|
|
void cMsgControlPenaltyCustomizer::process(DWORD dwTime)
|
|
{
|
|
DWORD elapsedTime = 0;
|
|
if (m_time)
|
|
elapsedTime = dwTime - m_time;
|
|
m_time = dwTime;
|
|
float e = (float)elapsedTime/1000.0f;
|
|
|
|
procBlockTime(e);
|
|
procPenaltyCountTime(e);
|
|
}
|
|
|
|
void cMsgControlPenaltyCustomizer::procBlockTime(float elapsedTime)
|
|
{
|
|
if (!m_wndBlockTime)
|
|
return ;
|
|
m_blockTime -= elapsedTime;
|
|
if (0.0f > m_blockTime)
|
|
m_blockTime = 0.0f;
|
|
|
|
std::string caption = convertTimeToString(m_blockTime, 2484);
|
|
m_wndBlockTime->SetCaption(caption.c_str());
|
|
}
|
|
|
|
void cMsgControlPenaltyCustomizer::procPenaltyCountTime(float elapsedTime)
|
|
{
|
|
if (!m_wndPenaltyCountTime)
|
|
return ;
|
|
m_penaltyCountTime -= elapsedTime;
|
|
if (0.0f > m_penaltyCountTime)
|
|
m_penaltyCountTime = 0.0f;
|
|
|
|
std::string caption = convertTimeToString(m_penaltyCountTime, 2487);
|
|
m_wndPenaltyCountTime->SetCaption(caption.c_str());
|
|
}
|
|
|
|
|
|
std::string cMsgControlPenaltyCustomizer::convertTimeToString(float t, int stringId)
|
|
{
|
|
int hour, minute;
|
|
extractTime(t, hour, minute);
|
|
std::string str = "<hcenter>";
|
|
str += SR(stringId, "#@hours@#", hour, "#@minutes@#", minute);
|
|
return str;
|
|
}
|
|
|
|
void cMsgControlPenaltyCustomizer::extractTime(float t, int& h, int& m)
|
|
{
|
|
int s = (int)t;
|
|
|
|
h = s/3600;
|
|
s -= h * 3600;
|
|
|
|
m = s/60;
|
|
}
|