⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 quickdialog.cpp

📁 墨香最新私服
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// 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 + -