📄 quickdialog.cpp
字号:
// QuickDialog.cpp: implementation of the CQuickDialog class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "QuickDialog.h"
#include "ObjectManager.h"
#include "MugongManager.h"
#include "QuickItem.h"
#include "QuickManager.h"
#include "GameIn.h"
#include "ItemManager.h"
#include "SkillManager_client.h"
#include "WindowIDEnum.h"
#include "./Interface/cScriptManager.h"
#include "./Interface/cIconGridDialog.h"
#include "./Interface/cButton.h"
#include "./Interface/cFont.h"
#include "InventoryExDialog.h"
#include "./Input/Mouse.h"
#include "ChatManager.h"
#include "MacroManager.h"
#define CELLWIDTH 40
#define CELLBORDER 5
#define KEYSTROKE_DELAYTIME 40
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CQuickDialog::CQuickDialog()
{
m_type = WT_QUICKDIALOG;
m_selectedPage = 0;
m_keyStrokeBit = 0;
SCRIPTMGR->GetImage( 47, &m_PressedImage );
// for( int i = 0 ; i < MAX_QUICKITEMPERSHEET_NUM ; ++i )
for( int i = 0 ; i < TABCELL_QUICK_NUM ; ++i )
{
m_keyStrokeDTick[i] = KEYSTROKE_DELAYTIME;
}
}
CQuickDialog::~CQuickDialog()
{
}
void CQuickDialog::Add(cWindow * window)
{
if(window->GetID() == QI_PAGESHEET1)
{
window->SetActive((m_selectedPage == 0?TRUE:FALSE));
m_pIconGridSheet[0] = (cIconGridDialog *)window;
}
else if(window->GetID() == QI_PAGESHEET2)
{
window->SetActive((m_selectedPage == 1?TRUE:FALSE));
m_pIconGridSheet[1] = (cIconGridDialog *)window;
}
else if(window->GetID() == QI_PAGESHEET3)
{
window->SetActive((m_selectedPage == 2?TRUE:FALSE));
m_pIconGridSheet[2] = (cIconGridDialog *)window;
}
else if(window->GetID() == QI_PAGESHEET4)
{
window->SetActive((m_selectedPage == 3?TRUE:FALSE));
m_pIconGridSheet[3] = (cIconGridDialog *)window;
}
cDialog::Add(window);
}
void CQuickDialog::ViewSheet()
{
// for(int i = 0 ; i < MAX_QUICKSHEET_NUM ; i++)
for(int i = 0 ; i < TAB_QUICK_NUM ; i++)
{
if(i == m_selectedPage)
{
m_pIconGridSheet[i]->SetActive(TRUE);
}
else
{
m_pIconGridSheet[i]->SetActive(FALSE);
}
}
}
void CQuickDialog::Render()
{
if(!m_bActive) return;
cDialog::RenderWindow();
// 其捞瘤 锅龋 免仿 and sheet见扁扁
cButton * win = (cButton * )this->GetWindowForID(QI_SHAPEBTN);
win->SetTextValue(m_selectedPage+1);
// Cell Number Render, Pressed Image
static VECTOR2 Pos;
Pos.x = m_absPos.x + 3;
Pos.y = m_absPos.y + 36;
// for( int i = 0 ; i < MAX_QUICKITEMPERSHEET_NUM ; ++i )
for( int i = 0 ; i < TABCELL_QUICK_NUM ; ++i )
{
// image
//int bits = (int)POW( 2, i - 1 );
int bits = 1 << i;
if( ( m_keyStrokeBit & bits ) )
{
m_PressedImage.RenderSprite( NULL, NULL, 0, &Pos, RGBA_MERGE(m_dwImageRGB, m_alpha * m_dwOptionAlpha / 100) );
//if( --m_keyStrokeDTick[ i - 1 ] == 0 )
if( gCurTime - m_keyStrokeDTick[i] > KEYSTROKE_DELAYTIME)
{
m_keyStrokeDTick[i] = KEYSTROKE_DELAYTIME;
m_keyStrokeBit &= ~bits;
}
}
Pos.y += CELLWIDTH+CELLBORDER;
}
cDialog::RenderComponent();
RECT rect = {(LONG)m_absPos.x+3, (LONG)m_absPos.y+38, 1, 1 };
RECT rectShadow = {(LONG)m_absPos.x+4, (LONG)m_absPos.y+39, 1, 1 };
// for( i = 0 ; i < MAX_QUICKITEMPERSHEET_NUM ; ++i )
for( i = 0 ; i < TABCELL_QUICK_NUM ; ++i )
{
// text
static char nums[4];
if( !MACROMGR->IsChatMode() )
sprintf( nums, "%d", (i+1)%10 );
else
sprintf( nums, "F%d", (i+1) );
// CFONT_OBJ->RenderFont( 0, nums, strlen(nums), &rect, RGBA_MERGE(m_dwImageRGB, m_alpha * m_dwOptionAlpha / 100) );
CFONT_OBJ->RenderFont( 0, nums, strlen(nums), &rectShadow, RGB_HALF(10, 10, 10) );
CFONT_OBJ->RenderFont( 0, nums, strlen(nums), &rect, RGB_HALF(220, 220, 220) );
rect.top += CELLWIDTH+CELLBORDER;
rectShadow.top += CELLWIDTH+CELLBORDER;
}
}
DWORD CQuickDialog::ActionEvent(CMouse * mouseInfo)
{
DWORD we = WE_NULL;
if( !m_bActive ) return we;
we = cDialog::ActionEvent(mouseInfo);
if( we & WE_LBTNDBLCLICK )
{
LONG x = mouseInfo->GetMouseEventX();
LONG y = mouseInfo->GetMouseEventY();
POSTYPE pos;
if( m_pIconGridSheet[m_selectedPage]->GetPositionForXYRef( x, y, pos ) )
QUICKMGR->UseQuickItem( pos );
}
return we;
}
void CQuickDialog::OnSelectAction( POSTYPE pos )
{
m_keyStrokeBit |= 1 << pos;
m_keyStrokeDTick[pos] = gCurTime;
}
void CQuickDialog::OnActionEvent(LONG lId, void * p, DWORD we)
{
if(we == WE_BTNCLICK && lId == QI_PREVPAGEBTN)
{
int page = (int)(GetSelectedPageNumber()-1);
if( page < 0 )
page = TAB_QUICK_NUM-1;
SetSelectedPageNumber((WORD)page);
ViewSheet();
}
else if( we == WE_BTNCLICK && lId == QI_NEXTPAGEBTN)
{
WORD page = GetSelectedPageNumber()+1;
// if(page >= MAX_QUICKSHEET_NUM)
// page = MAX_QUICKSHEET_NUM-1;
if(page >= TAB_QUICK_NUM)
page = 0;
SetSelectedPageNumber(page);
ViewSheet();
}
}
void CQuickDialog::SelectPageDirect( WORD wPage )
{
if( wPage >= TAB_QUICK_NUM ) return;
SetSelectedPageNumber(wPage);
ViewSheet();
}
//-----------------------------------------------------------------------------------
// data operation -------------------------------------------------------------------
CQuickItem * CQuickDialog::GetQuickItem(POSTYPE abs_pos)
{
int page = GetSheetNumber(abs_pos);
if(page == -1) return NULL;
if(m_pIconGridSheet[page]->IsAddable(abs_pos - TP_QUICK_START - TABCELL_QUICK_NUM*page)) return NULL;
return (CQuickItem *)m_pIconGridSheet[page]->GetIconForIdx(abs_pos - TP_QUICK_START-TABCELL_QUICK_NUM*page);
// if(m_pIconGridSheet[page]->IsAddable(abs_pos - QUICK_STARTPOSITION - MAX_QUICKITEMPERSHEET_NUM*page)) return NULL;
// return (CQuickItem *)m_pIconGridSheet[page]->GetIconForIdx(abs_pos - QUICK_STARTPOSITION-MAX_QUICKITEMPERSHEET_NUM*page);
}
// get absolute position from current activated grid sheet
BOOL CQuickDialog::GetAbsPositionForXYRef(LONG x, LONG y, POSTYPE & abs_pos)
{
WORD position=0;
if(m_pIconGridSheet[m_selectedPage]->GetPositionForXYRef(x,y,position))
{
abs_pos = position+TP_QUICK_START+TABCELL_QUICK_NUM*m_selectedPage; // 例措 困摹肺 官厕
// abs_pos = position+QUICK_STARTPOSITION+MAX_QUICKITEMPERSHEET_NUM*m_selectedPage; // 例措 困摹肺 官厕
return TRUE;
}
return FALSE;
}
// if absolute position is valid, return true
BOOL CQuickDialog::ValidPos(POSTYPE abs_pos)
{
// if(QUICK_STARTPOSITION <= abs_pos && abs_pos < QUICK_ENDPOSITION)
if(TP_QUICK_START <= abs_pos && abs_pos < TP_QUICK_END)
return TRUE;
return FALSE;
}
// get sheet number for absolute position
int CQuickDialog::GetSheetNumber(POSTYPE abs_pos)
{
// for(int i = 0 ; i < MAX_QUICKSHEET_NUM ; i++)
for(int i = 0 ; i < TABCELL_QUICK_NUM ; i++)
{
// if(QUICK_STARTPOSITION+MAX_QUICKITEMPERSHEET_NUM*i <= abs_pos && abs_pos < (QUICK_STARTPOSITION+MAX_QUICKITEMPERSHEET_NUM*(i+1)))
if(TP_QUICK_START+TABCELL_QUICK_NUM*i <= abs_pos && abs_pos < (TP_QUICK_START+TABCELL_QUICK_NUM*(i+1)))
return i;
}
return -1;
}
// actually, add in grid
BOOL CQuickDialog::AddQuickItem(POSTYPE abs_pos, CQuickItem * pIcon)
{
if(!ValidPos(abs_pos)) return FALSE;
int sheetNum = GetSheetNumber(abs_pos);
if(sheetNum == -1) return FALSE;
// POSTYPE rel_pos = abs_pos - (QUICK_STARTPOSITION+MAX_QUICKITEMPERSHEET_NUM*sheetNum);
POSTYPE rel_pos = abs_pos - (TP_QUICK_START+TABCELL_QUICK_NUM*sheetNum);
if(!m_pIconGridSheet[sheetNum]->IsAddable(rel_pos)) return FALSE;
SetToolTipIcon( pIcon );
return m_pIconGridSheet[sheetNum]->AddIcon(rel_pos, (cIcon *)pIcon);
}/*
// actually, add in grid
BOOL CQuickDialog::AddQuickItem(POSTYPE abs_pos, ICONBASE * pIconInfo)
{
if(!ValidPos(abs_pos)) return FALSE;
int sheetNum = GetSheetNumber(abs_pos);
if(sheetNum == -1) return FALSE;
POSTYPE rel_pos = abs_pos - (QUICK_STARTPOSITION+MAX_QUICKITEMPERSHEET_NUM*sheetNum);
if(!m_pIconGridSheet[sheetNum]->IsAddable(rel_pos)) return FALSE;
CQuickItem * item = QUICKMGR->NewQuickItem(pIconInfo);
item->SetPosition(abs_pos);
SetToolTipIcon( item );
return m_pIconGridSheet[sheetNum]->AddIcon(rel_pos, (cIcon *)item);
}
*/
BOOL CQuickDialog::RemQuickItem(POSTYPE abs_pos, cIcon ** delItem)
{
if(!ValidPos(abs_pos)) return FALSE;
int sheetNum = GetSheetNumber(abs_pos);
if(sheetNum == -1) return FALSE;
// POSTYPE rel_pos = abs_pos - (QUICK_STARTPOSITION+MAX_QUICKITEMPERSHEET_NUM*sheetNum);
POSTYPE rel_pos = abs_pos - (TP_QUICK_START+TABCELL_QUICK_NUM*sheetNum);
if(m_pIconGridSheet[sheetNum]->IsAddable(rel_pos)) return FALSE;
if(!m_pIconGridSheet[sheetNum]->DeleteIcon(rel_pos, delItem))
return FALSE;
return TRUE;
}
BOOL CQuickDialog::MoveQuickItem(POSTYPE fromAbsPos, POSTYPE toAbsPos)
{
CQuickItem * fromItem = NULL;
CQuickItem * toItem = NULL;
if(!RemQuickItem(fromAbsPos, (cIcon **)&fromItem))
{
ASSERT(0);
return FALSE;
}
RemQuickItem(toAbsPos, (cIcon **)&toItem);
fromItem->SetPosition(toAbsPos);
if(!AddQuickItem(toAbsPos, fromItem))
{
return FALSE;
}
if(toItem)
{
toItem->SetPosition(fromAbsPos);
if(!AddQuickItem(fromAbsPos, toItem))
return FALSE;
}
return TRUE;
}
//----------------------------------------------------------------------------------------------
//--------------------- function associated FakeXXXXXX -----------------------------------------
// network msg only send, data manipulation is not operated
BOOL CQuickDialog::FakeMoveIcon(LONG mouseX, LONG mouseY, cIcon * icon)
{
//whether move operation or add overation, Do check!
if(GAMEIN->GetGameInInitKind() == eGameInInitKind_SuryunEnter ||
GAMEIN->GetGameInInitKind() == eGameInInitKind_EventMapEnter)
return FALSE;
if( icon->GetType() == WT_STALLITEM || icon->GetType() == WT_EXCHANGEITEM )
return FALSE; //皋矫瘤 救嘛阑妨备...
if(!QUICKMGR->CanEquip(icon))
{
return FALSE;
}
if(icon->GetType() == WT_QUICKITEM)
{
FakeMoveQuickItem(mouseX, mouseY, (CQuickItem *)icon);
}
else if(icon->GetType() == WT_ITEM)
FakeAddItem(mouseX, mouseY, (CItem *)icon);
else if(icon->GetType() == WT_MUGONG ||
icon->GetType() == WT_JINBUB )
FakeAddMugong(mouseX, mouseY, (CMugongBase *)icon);
else if(icon->GetType() == WT_ABILITYICON)
FakeAddAbility(mouseX, mouseY, (CAbilityIcon *)icon);
return FALSE;
}
void CQuickDialog::FakeDeleteQuickItem( CQuickItem * pQuickItem )
{
MSG_QUICK_REM_SYN msg;
msg.Category = MP_QUICK;
msg.Protocol = MP_QUICK_REM_SYN;
msg.dwObjectID = HEROID;
msg.SrcPos = pQuickItem->GetSrcPosition();
msg.SrcItemIdx = pQuickItem->GetSrcIdx();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -