#include "stdafx.h" #include "SUIMsgControlPenaltyCustomizer.h" #include #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 = ""; 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 = ""; 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; }