📄 selectchr.cpp
字号:
#include "stdafx.h"
#define CHR_ANI_COUNT 21
#define ANIMATION_TICK 200
#define BLEND_TICK 50
CSelectChr::CSelectChr()
{
m_nRenderState = 0;
m_nAnimationCount = 0;
m_nRoll = 0;
m_nBlend = -999;
m_fIsButtonDown = FALSE;
}
CSelectChr::~CSelectChr()
{
if(m_pBtn!=NULL)
{
delete[] m_pBtn;
}
}
VOID CSelectChr::Create(CWHWilImageData* pxImage,CPDLList<CHRINFO>* pxList, CPDLList<CHRRECT>* pxrcList,INT nChrCount)
{
INT nLoop;
// Buttons
BUTTONINFO CharProcBtnInfo[] ={
{ IMG_IDX_SELECT_CREATE, SELECT_CHAR_NEW_BTN_POS_X, SELECT_CHAR_NEW_BTN_POS_Y, 0, 0}, // Create New Charector Button
{ IMG_IDX_SELECT_DELETE, SELECT_CHAR_ERASE_BTN_POS_X, SELECT_CHAR_ERASE_BTN_POS_Y, 0, 0}, // Erase Charector Button
{ IMG_IDX_SELECT_EXIT, SELECT_CHAR_EXIT_BTN_POS_X, SELECT_CHAR_EXIT_BTN_POS_Y, 0, 0}, // Exit Button
{ IMG_IDX_SELECT_START, SELECT_CHAR_START_BTN_POS_X, SELECT_CHAR_START_BTN_POS_Y, 0, 0}, // Start Button
};
m_pBtn = new CMirButton*[sizeof(CharProcBtnInfo)/sizeof(BUTTONINFO)];
m_pxImage = pxImage;
m_pxSList = pxList;
m_pxrcList = pxrcList;
m_nChrCount = nChrCount;
m_xLightFog.Init(RGB(125,125,125));
for( nLoop = 0 ; nLoop < (sizeof(CharProcBtnInfo)/sizeof(BUTTONINFO)) ; nLoop++)
{
m_pBtn[nLoop] = new CMirButton;
m_pxImage->NewSetIndex(CharProcBtnInfo[nLoop].nID);
CharProcBtnInfo[nLoop].right = m_pxImage->m_lpstNewCurrWilImageInfo->shWidth;
CharProcBtnInfo[nLoop].bottom = m_pxImage->m_lpstNewCurrWilImageInfo->shHeight;
m_pBtn[nLoop]->SetBtn(&CharProcBtnInfo[nLoop]);
}
}
VOID CSelectChr::OpenWnd(VOID)
{
m_fIsActive = TRUE;
m_nRenderState = 9;
m_nBlend = 100;
}
HRESULT CSelectChr::OnKeyDown(WPARAM wParam, LPARAM lParam)
{
return 0;
}
HRESULT CSelectChr::OnButtonDown(WPARAM wParam, LPARAM lParam)
{
if(m_fIsActive)
for (int i = ID_SEL_CHR_NEW_BTN; i <= ID_SEL_CHR_START_BTN; i++)
{
if (IsInRect(m_pBtn[i]->m_Rect,LOWORD(lParam), HIWORD(lParam)))
{
m_pBtn[i]->m_nState = BUTTON_STATE_DOWN;
m_fIsButtonDown = TRUE;
}
else
m_pBtn[i]->m_nState = BUTTON_STATE_UP;
}
return 0;
}
HRESULT CSelectChr::OnButtonDown(POINT ptMouse)
{
m_fIsButtonDown = TRUE;
return 0;
}
HRESULT CSelectChr::OnButtonUp(WPARAM wParam, LPARAM lParam)
{
INT i;
int Px,Py;
if(m_fIsActive)
{
for(i = ID_SEL_CHR_NEW_BTN; i <= ID_SEL_CHR_START_BTN; i++)
{ m_pBtn[i]->m_nState = BUTTON_STATE_UP;
if (IsInRect(m_pBtn[i]->m_Rect,LOWORD(lParam), HIWORD(lParam)))
{ switch(i)
{
case ID_SEL_CHR_NEW_BTN:
{
if(m_nChrCount<3)
{ m_nBlend = 0;
m_nRenderState = 1;
return RETURN_SELECT_NEW_BTN;
}
else
return RETURN_SELECT_NEW_ERR;
break;
}
case ID_SEL_CHR_DEL_BTN:
{
if(m_nChrCount!=0)
{
return RETURN_SELECT_DEL_BTN;
}
else
return RETURN_SELECT_DEL_ERR;
break;
}
case ID_SEL_CHR_EXIT_BTN:
{
SendMessage(g_xMainWnd.GetSafehWnd(), WM_DESTROY, NULL, NULL);
return 0L;
}
case ID_SEL_CHR_START_BTN:
{
if(m_nSelectChr != SELECT_NONE)
{ m_nBlend = 0;
m_pxSList->MoveCurrentToTop();
m_pxSList->MoveNode(m_nSelectChr);
g_xClientSocket.OnSelChar(m_pxSList->GetCurrentData()->ChrName);
return RETURN_SELECT_START_BTN;
}
else
{
return RETURN_SELECT_START_ERR;
}
break;
}
}
}
}
m_pxrcList->MoveCurrentToTop();
m_pxSList->MoveCurrentToTop();
for(i=0; i < m_pxrcList->ListLength(); i++)
{
Px = m_pxrcList->GetCurrentData()->nLeft - LOWORD(lParam);
Py = m_pxrcList->GetCurrentData()->nTop - HIWORD(lParam);
if(Px < 0 && ((Px +m_pxrcList->GetCurrentData()->nWidth)>0))
{
if(Py<0 && ((Py+m_pxrcList->GetCurrentData()->nHeight)>0))
{
m_nSelectChr = i;
}
}
m_pxrcList->MoveNextNode();
}
}
m_fIsButtonDown = FALSE;
return 0;
}
HRESULT CSelectChr::OnButtonUp(POINT ptMouse)
{
return 0;
}
LRESULT CSelectChr::OnMouseMove(WPARAM wParam, LPARAM lParam)
{
INT i;
BOOL fOnButton = FALSE;
if(m_fIsActive&&(!m_fIsButtonDown))
{
for (i = ID_SEL_CHR_NEW_BTN; i <= ID_SEL_CHR_START_BTN; i++)
{
if (IsInRect(m_pBtn[i]->m_Rect,LOWORD(lParam), HIWORD(lParam)))
{
m_pBtn[i]->m_nState = BUTTON_STATE_DOWN;
fOnButton = TRUE;
}
else
m_pBtn[i]->m_nState = BUTTON_STATE_UP;
}
/* if(fOnButton)
{
HCURSOR hCursor;
hCursor = LoadCursor(g_xMainWnd.GetSafehInstance(),MAKEINTRESOURCE(IDC_HAND1));
SetCursor(hCursor);
DestroyCursor(hCursor);
}
else
g_xMainWnd.OnSetCursor(IDC_ARROW);
*/
}
return 0;
}
VOID CSelectChr::Render(INT nLoopTime)
{
static DWORD dwTicks = 0;
int i;
INT nPx,nPy;
POINT ptPos[] = {
{310,310}, // One
{300,270}, // Two-One
{360,310}, // Two-Two
{250,270}, // Three-One
{320,310}, // Three-Two
{390,340}
};// Three-Three
if(m_fIsActive)
{
m_xLightFog.ClearSavedLightColor();
for (i = ID_SEL_CHR_NEW_BTN; i <= ID_SEL_CHR_START_BTN ; i++) // 窜眠 烙矫
{
if(m_pBtn[i]->m_nState==BUTTON_STATE_DOWN) // Draw Button when Button state is Downed..
{
m_pxImage->NewSetIndex(m_pBtn[i]->m_nButtonID);
g_xMainWnd.DrawWithImageForComp(m_pBtn[i]->m_Rect.left, m_pBtn[i]->m_Rect.top,
m_pxImage->m_lpstNewCurrWilImageInfo->shWidth,
m_pxImage->m_lpstNewCurrWilImageInfo->shHeight
, (WORD*)(m_pxImage->m_pbCurrImage));
}
}
dwTicks +=nLoopTime;
if(dwTicks > BLEND_TICK)
{
m_nBlend = m_nBlend +((m_nRenderState != 0)? dwTicks / BLEND_TICK *(m_nRenderState != 9 ? 1 : -1): 0);
m_nRoll = (m_nRoll+ 2)%100;
if(dwTicks > ANIMATION_TICK)
{
m_nAnimationCount++;
m_nAnimationCount%=CHR_ANI_COUNT;
dwTicks = 0;
}
}
m_pxSList->MoveCurrentToTop();
for( i = 0 ; i < m_nChrCount ; i ++)
{
// Draw Person
m_pxImage->NewSetIndex(IDX_IMG_MALE_WAR
+ (m_pxSList->GetCurrentData()->Gender) * 60
+ (m_pxSList->GetCurrentData()->Class) * 120
+ ((i == m_nSelectChr) ? m_nAnimationCount : 0)) ;
nPx = ptPos[i + m_nChrCount - 1].x + m_pxImage->m_lpstNewCurrWilImageInfo->shPX;
nPy = ptPos[i + m_nChrCount - 1].y + m_pxImage->m_lpstNewCurrWilImageInfo->shPY;
g_xMainWnd.DrawWithABlendCompDataWithBackBuffer(nPx,nPy
,m_pxImage->m_lpstNewCurrWilImageInfo->shWidth,m_pxImage->m_lpstNewCurrWilImageInfo->shHeight
,(WORD*)(m_pxImage->m_pbCurrImage),640,480,0xffff,0xffff,((m_nBlend>=0)? m_nBlend : 0));
// Draw Fire
if(i == m_nSelectChr)
{
m_pxImage->NewSetIndex(IDX_IMG_MALE_WAR_FIRE
+ (m_pxSList->GetCurrentData()->Gender) * 60
+ (m_pxSList->GetCurrentData()->Class) * 120
+ (m_nAnimationCount)) ;
nPx = ptPos[i + m_nChrCount - 1].x + m_pxImage->m_lpstNewCurrWilImageInfo->shPX;
nPy = ptPos[i + m_nChrCount - 1].y + m_pxImage->m_lpstNewCurrWilImageInfo->shPY;
g_xMainWnd.DrawWithABlendCompDataWithBackBuffer(nPx,nPy
,m_pxImage->m_lpstNewCurrWilImageInfo->shWidth,m_pxImage->m_lpstNewCurrWilImageInfo->shHeight
,(WORD*)(m_pxImage->m_pbCurrImage),640,480,0xffff,0x1f1f,((m_nBlend>=0)? m_nBlend : 50));
INT nTemp = (INT)(125.0f * sin((m_nRoll/10)));
m_xLightFog.SetLightRadiusWithCircle(nPx+100,nPy+100,((m_nBlend>=0) ? 5 - ((m_nBlend)/20) : 5),125 + nTemp,255 + nTemp,255 + nTemp);
}
m_pxSList->MoveNextNode();
}
m_xLightFog.ShowLightFog();
ShowChrInfo();
if((m_nBlend>=100 && m_nRenderState!=9)||(m_nBlend<=0 && m_nRenderState==9))
{
m_nBlend = -1;
m_nRenderState = m_nRenderState + 10;
}
}
}
VOID CSelectChr::ShowChrInfo(VOID)
{
char ChrName[20];
char ChrLev[3];
if(m_nChrCount!=0)
{
m_pxSList->MoveCurrentToTop();
m_pxSList->MoveNode(m_nSelectChr);
strcpy(ChrName,m_pxSList->GetCurrentData()->ChrName);
strcpy(g_szCharName,m_pxSList->GetCurrentData()->ChrName);
itoa(m_pxSList->GetCurrentData()->Level,ChrLev,10);
g_xMainWnd.PutsHan(NULL,m_PosName.x,m_PosName.y,RGB(255,255,255),RGB(0,0,0),ChrName);
}
}
VOID CSelectChr::CloseWnd(VOID)
{
m_fIsActive = FALSE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -