149 lines
3.7 KiB
C++
149 lines
3.7 KiB
C++
#include "stdafx.h"
|
|
#include "KResourceManager.h"
|
|
#include "KUIControlChaosGauge.h"
|
|
#include "KViewport.h"
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// KUIControlChaosGauge Implement
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
namespace
|
|
{
|
|
KUIWnd* Creator()
|
|
{
|
|
return new KUIControlChaosGauge;
|
|
}
|
|
bool bRegister = KUIFactory::GetInstance()->RegisterCreator( Creator, "chaos_gauge");
|
|
|
|
const size_t TOTAL_GAUGE_COUNT = 11;
|
|
const float TOTAL_PERCENT = 100.f;
|
|
const float PERCENT_PER_ONE_GAGUE = TOTAL_PERCENT / TOTAL_GAUGE_COUNT;
|
|
|
|
size_t X_OFFSET = 3;
|
|
size_t X_MARGIN = 5;
|
|
size_t Y_MARGIN = 4;
|
|
|
|
LPCSTR BACK_NAME = "static_inventory_chaosback01";
|
|
}
|
|
|
|
KUIControlChaosGauge::KUIControlChaosGauge()
|
|
{
|
|
for(size_t i = 0; i < TOTAL_GAUGE_COUNT; ++i)
|
|
{
|
|
_registerSprite(&m_prSprite[i]);
|
|
}
|
|
_registerSprite(&m_prBackGround);
|
|
|
|
m_curPercent = 0;
|
|
|
|
}
|
|
KUIControlChaosGauge::~KUIControlChaosGauge()
|
|
{
|
|
}
|
|
|
|
void KUIControlChaosGauge::SetPercent(size_t percent)
|
|
{
|
|
|
|
m_curPercent = std::min(static_cast<size_t>(100),percent);
|
|
_UpdateSpriteRes();
|
|
#ifdef _KUI_INVALIDATION
|
|
// { [sonador]
|
|
InvalidateWnd();
|
|
// }
|
|
#endif
|
|
}
|
|
|
|
|
|
void KUIControlChaosGauge::OnPosChangeNofity(int xOffset, int yOffset)
|
|
{
|
|
|
|
KUIControl::OnPosChangeNofity(xOffset,yOffset);
|
|
|
|
m_ClipForLast.left += xOffset; m_ClipForLast.right += xOffset;
|
|
m_ClipForLast.top += yOffset; m_ClipForLast.bottom += yOffset;
|
|
|
|
}
|
|
|
|
void KUIControlChaosGauge::OnClipChangeNotify(const KRect& rcClipRect)
|
|
{
|
|
|
|
KUIControl::OnClipChangeNotify(rcClipRect);
|
|
|
|
if(m_curNumberOfRender > 0)
|
|
m_prSprite[m_curNumberOfRender - 1].SetClipRect(&m_ClipForLast);
|
|
}
|
|
|
|
void KUIControlChaosGauge::Render(KViewportObject * pViewport, bool isFront)
|
|
{
|
|
if(false == m_bShowFlag)
|
|
return;
|
|
|
|
pViewport->Register(&m_prBackGround, isFront);
|
|
|
|
for(size_t i = 0; i < m_curNumberOfRender; ++i)
|
|
{
|
|
pViewport->Register(&m_prSprite[i], isFront);
|
|
}
|
|
|
|
|
|
|
|
}
|
|
void KUIControlChaosGauge::_initControl()
|
|
{
|
|
|
|
if( m_sAniName.empty() )
|
|
return;
|
|
|
|
|
|
KResSprite* pBackFrame = _getSpriteSet()->GetSpriteRes(BACK_NAME, 0);
|
|
assert(pBackFrame&& "Cannot find Sprite Res Frame");
|
|
|
|
m_rcRegion.right = m_rcRegion.left + pBackFrame->GetSizeX();
|
|
m_rcRegion.bottom = m_rcRegion.top + pBackFrame->GetSizeY();
|
|
|
|
m_prBackGround.SetRes(pBackFrame);
|
|
m_prBackGround.SetPosition( m_rcRegion.left, m_rcRegion.top, m_fZPos);
|
|
|
|
KResSprite* pFrame = _getSpriteSet()->GetSpriteRes( m_sAniName.c_str(), 0);
|
|
assert(pFrame && "Cannot find Sprite Res Frame");
|
|
|
|
m_xSize = pFrame->GetSizeX();
|
|
m_fSizePerPercent = static_cast<float>(m_xSize) / ( TOTAL_PERCENT / TOTAL_GAUGE_COUNT );
|
|
|
|
for(size_t i = 0; i < TOTAL_GAUGE_COUNT; ++i)
|
|
{
|
|
m_prSprite[i].SetRes(pFrame);
|
|
m_prSprite[i].SetPosition(m_rcRegion.left + (m_xSize + X_MARGIN)* i + X_OFFSET, m_rcRegion.top + Y_MARGIN,m_fZPos);
|
|
m_prSprite[i].SetClipRect(&m_rcRegion);
|
|
}
|
|
_UpdateSpriteRes();
|
|
}
|
|
void KUIControlChaosGauge::_UpdateSpriteRes()
|
|
{
|
|
m_curNumberOfRender = m_curPercent / PERCENT_PER_ONE_GAGUE;
|
|
|
|
float fModulation = static_cast<float>(m_curPercent )- static_cast<float>(m_curNumberOfRender) * PERCENT_PER_ONE_GAGUE;
|
|
|
|
for(size_t i = 0; i < m_curNumberOfRender; ++i)
|
|
{
|
|
m_prSprite[i].SetClipRect(&m_rcRegion);
|
|
}
|
|
|
|
if(fModulation > 0.f)
|
|
{
|
|
K3DVector vPos = m_prSprite[m_curNumberOfRender].GetPosition();
|
|
|
|
m_ClipForLast = KRect(vPos.x, vPos.y, vPos.x + m_fSizePerPercent * fModulation, vPos.y + m_rcRegion.GetWidth() );
|
|
m_prSprite[m_curNumberOfRender].SetClipRect(&m_ClipForLast);
|
|
}
|
|
|
|
// 마지막에 짤린걸 찍어줘야 하므로
|
|
m_curNumberOfRender = std::min(m_curNumberOfRender + 1, TOTAL_GAUGE_COUNT);
|
|
#ifdef _KUI_INVALIDATION
|
|
// { [sonador]
|
|
InvalidateWnd();
|
|
// }
|
|
#endif
|
|
}
|
|
|