179 lines
5.1 KiB
C++
179 lines
5.1 KiB
C++
#include "stdafx.h"
|
|
/// 2010.12.02 - prodongi
|
|
|
|
#include "SUIAniJobLevelUpWnd.h"
|
|
#include "SUISkillWnd.h"
|
|
#include "SExpDB.h"
|
|
|
|
void sAniJobLevelUpData::init(float aniTime, sAniJobLevelUpWnd const& wndFrom,
|
|
sAniJobLevelUpWnd const& wndTo)
|
|
{
|
|
m_lenJLv = calcLength(wndFrom.m_posJLv, wndTo.m_posJLv);
|
|
m_lenJP = calcLength(wndFrom.m_posJP, wndTo.m_posJP);
|
|
|
|
/// 초기 속도는 등속 운동을 했을 때의 속도 절반으로 해준다
|
|
m_v0JLv = m_lenJLv/aniTime * 0.5f;
|
|
m_v0JP = m_lenJP/aniTime * 0.5f;
|
|
|
|
m_accel = 500.0f;
|
|
}
|
|
|
|
void sAniJobLevelUpData::begin()
|
|
{
|
|
m_lenLastJLv = 0.0f;
|
|
m_lenLastJP = 0.0f;
|
|
m_processT = 0.0f;
|
|
}
|
|
|
|
float sAniJobLevelUpData::calcLength(KPoint const& pos1, KPoint const& pos2)
|
|
{
|
|
double x = (double)(pos2.x - pos1.x);
|
|
double y = (double)(pos2.y - pos1.y);
|
|
return (float)sqrt(x*x + y*y);
|
|
}
|
|
|
|
void sAniJobLevelUpData::slerp(KPoint& pos, float t, KPoint const& posFrom, KPoint const& posTo)
|
|
{
|
|
if (t > 1.0f)
|
|
t = 1.0f;
|
|
pos.x = (int)((float)posFrom.x + (float)(posTo.x - posFrom.x) * t);
|
|
pos.y = (int)((float)posFrom.y + (float)(posTo.y - posFrom.y) * t);
|
|
}
|
|
|
|
bool sAniJobLevelUpData::procedure(float elapsedtime, SUISkillWnd const* skillWnd,
|
|
sAniJobLevelUpWnd& wndFrom, sAniJobLevelUpWnd const& wndTo)
|
|
{
|
|
m_processT += elapsedtime;
|
|
float s;
|
|
float s2 = 0.5f * m_accel * m_processT * m_processT;
|
|
|
|
s = m_v0JLv * m_processT + s2;
|
|
m_lenLastJLv = s;
|
|
|
|
s = m_v0JP * m_processT + s2;
|
|
m_lenLastJP = s;
|
|
|
|
KRect r;
|
|
KPoint offsetJLv, offsetJP;
|
|
slerp(offsetJLv, m_lenLastJLv/m_lenJLv, wndFrom.m_posJLv, wndTo.m_posJLv);
|
|
slerp(offsetJP, m_lenLastJP/m_lenJP, wndFrom.m_posJP, wndTo.m_posJP);
|
|
|
|
wndFrom.setWndPos(skillWnd->GetRect(), offsetJLv, offsetJP);
|
|
|
|
return (m_lenLastJLv < m_lenJLv);
|
|
}
|
|
|
|
void sAniJobLevelUpWnd::init(SUISkillWnd const* skillWnd, char const* jlvName, char const* jpName)
|
|
{
|
|
m_wndJLv = getChildWnd(skillWnd, jlvName, m_posJLv);
|
|
m_wndJP = getChildWnd(skillWnd, jpName, m_posJP);
|
|
}
|
|
|
|
KUIWnd* sAniJobLevelUpWnd::getChildWnd(SUISkillWnd const* skillWnd, char const* wndName, KPoint& pos)
|
|
{
|
|
KUIWnd* wnd = NULL;
|
|
wnd = skillWnd->GetChild(wndName);
|
|
(wnd) ? pos = KPoint(wnd->GetRect().left, wnd->GetRect().top) : assert(wnd && "failed find Job Level Up control");
|
|
return wnd;
|
|
}
|
|
|
|
void sAniJobLevelUpWnd::setInitPos(KRect const& parentRect)
|
|
{
|
|
if (m_wndJLv) m_wndJLv->MovePos(parentRect.left + m_posJLv.x, parentRect.top + m_posJLv.y);
|
|
if (m_wndJP) m_wndJP->MovePos(parentRect.left + m_posJP.x, parentRect.top + m_posJP.y);
|
|
}
|
|
|
|
void sAniJobLevelUpWnd::setWndPos(KRect const& parentRect, KPoint const& offsetJLv, KPoint const& offsetJP)
|
|
{
|
|
if (m_wndJLv) m_wndJLv->MovePos(parentRect.left + offsetJLv.x, parentRect.top + offsetJLv.y);
|
|
if (m_wndJP) m_wndJP->MovePos(parentRect.left + offsetJP.x, parentRect.top + offsetJP.y);
|
|
}
|
|
|
|
void sAniJobLevelUpWnd::setCaption(int level, int changeJob)
|
|
{
|
|
__int64 needJp = GetExpDB().GetNeedJp(level, changeJob);
|
|
if( needJp > 0 )
|
|
{
|
|
std::string strNeedJp;
|
|
jpToString( needJp, strNeedJp );
|
|
|
|
if (m_wndJLv) m_wndJLv->SetCaption(CStringUtil::StringFormat("<font:font_02><#707070><size:9><vcenter><left>%d", level).c_str());
|
|
if (m_wndJP) m_wndJP->SetCaption(CStringUtil::StringFormat("<font:font_02><#707070><size:9><vcenter><right>%s", strNeedJp.c_str()).c_str());
|
|
}
|
|
else
|
|
{
|
|
if (m_wndJLv) m_wndJLv->SetCaption("");
|
|
if (m_wndJP) m_wndJP->SetCaption("");
|
|
}
|
|
}
|
|
|
|
void sAniJobLevelUp::init(SUISkillWnd const* skillWnd)
|
|
{
|
|
m_state = END;
|
|
m_aniTime = 0.6f;
|
|
|
|
m_wndTop.init(skillWnd, "joblv_next_02", "jp_next_02");
|
|
m_wndNext.init(skillWnd, "joblv_next_01", "jp_next_01");
|
|
m_wndCur.init(skillWnd, "joblv_curjlv_01", "jp_curjlv_01");
|
|
m_wndPrev.init(skillWnd, "joblv_prev_01", "jp_prev_01");
|
|
m_wndBottom.init(skillWnd, "joblv_prev_02", "jp_prev_02");
|
|
|
|
m_topToNext.init(m_aniTime, m_wndTop, m_wndNext);
|
|
m_nextToCur.init(m_aniTime, m_wndNext, m_wndCur);
|
|
m_curToPrev.init(m_aniTime, m_wndCur, m_wndPrev);
|
|
m_prevToBottom.init(m_aniTime, m_wndPrev, m_wndBottom);
|
|
}
|
|
|
|
void sAniJobLevelUp::setState(int state, KRect const& parentRect)
|
|
{
|
|
m_state = state;
|
|
if (isState(BEGIN))
|
|
{
|
|
m_topToNext.begin();
|
|
m_nextToCur.begin();
|
|
m_curToPrev.begin();
|
|
m_prevToBottom.begin();
|
|
}
|
|
else if (isState(END))
|
|
{
|
|
setInitPos(parentRect);
|
|
}
|
|
}
|
|
|
|
void sAniJobLevelUp::setInitPos(KRect const& parentRect)
|
|
{
|
|
m_wndTop.setInitPos(parentRect);
|
|
m_wndNext.setInitPos(parentRect);
|
|
m_wndCur.setInitPos(parentRect);
|
|
m_wndPrev.setInitPos(parentRect);
|
|
m_wndBottom.setInitPos(parentRect);
|
|
}
|
|
|
|
bool sAniJobLevelUp::procedure(SUISkillWnd const* skillWnd, DWORD elapsedtime)
|
|
{
|
|
if (!isState(BEGIN))
|
|
return false;
|
|
|
|
float e_t = (float)elapsedtime/1000.0f;
|
|
|
|
bool ret = m_topToNext.procedure(e_t, skillWnd, m_wndTop, m_wndNext);
|
|
m_nextToCur.procedure(e_t, skillWnd, m_wndNext, m_wndCur);
|
|
m_curToPrev.procedure(e_t, skillWnd, m_wndCur, m_wndPrev);
|
|
m_prevToBottom.procedure(e_t, skillWnd, m_wndPrev, m_wndBottom);
|
|
|
|
_oprint("ani lv : %f, %f\n", m_topToNext.m_lenLastJLv, m_topToNext.m_processT);
|
|
|
|
if (!ret)
|
|
{
|
|
setState(END, skillWnd->GetRect());
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
void sAniJobLevelUp::setTopWndCaption(int level, int changeJob)
|
|
{
|
|
m_wndTop.setCaption(level+2, changeJob);
|
|
}
|