#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(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(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(m_curPercent )- static_cast(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 }