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

📄 mouseeventthrower.cpp

📁 墨香最新私服
💻 CPP
字号:
// MouseEventThrower.cpp: implementation of the CMouseEventThrower class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "MouseEventThrower.h"
#include "MouseEventReceiver.h"
#include "Object.h"
#include "interface\cWindowManager.h"

#include "MousePointer.h"
#include "ObjectManager.h"
#include "gamein.h"
#include "MouseCursor.h"
#include "MHMap.h"

#include "MonsterGuageDlg.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CMouseEventThrower::CMouseEventThrower()
{
	m_pCurrentReceiver	= NULL;
	m_pDefaultReceiver	= NULL;

	m_bCancelSelect		= FALSE;
}

CMouseEventThrower::~CMouseEventThrower()
{

}

void CMouseEventThrower::SetDefaultReceiver(CMouseEventReceiver* pDefaultReceiver)
{
	m_pDefaultReceiver = pDefaultReceiver;
}

void CMouseEventThrower::SetCurrentReceiver(CMouseEventReceiver* pCurrentReceiver)
{
	m_pCurrentReceiver = pCurrentReceiver;
}

void CMouseEventThrower::SetReceiverToDefault()
{
	ASSERT(m_pDefaultReceiver);
	m_pCurrentReceiver = m_pDefaultReceiver;
}


#define MOUSE_MOVE_TICK		400
#define MOUSE_PRESS_TICK	400
#define MOUSE_ON_TICK		200

void CMouseEventThrower::Process(CMouse* Mouse)
{
	static CObject* pOldMouseOverObject		= NULL;
	static DWORD dwMouseMoveTick			= 0;
	static DWORD dwMouseOnTick				= 0;
	static DWORD dwMousePressTick			= 0;

	if( WINDOWMGR->IsMouseInputProcessed() || WINDOWMGR->IsDragWindow() )
	{
		if( pOldMouseOverObject )
		{
			m_pCurrentReceiver->OnMouseLeave( pOldMouseOverObject );
			pOldMouseOverObject = NULL;
		}
		
		dwMousePressTick = gCurTime;
		return;	//扩档快 靛贰弊吝老锭绰 付快胶 捞亥飘 眉农啊 阂鞘夸.
	}

	DWORD MouseEvent = MOUSEEVENT_NONE;

	if( Mouse->LButtonDoubleClick() || Mouse->RButtonDoubleClick() )
		MouseEvent = MOUSEEVENT_DBLCLICK;
	else
	{
		if( Mouse->LButtonDown() )
			MouseEvent = MOUSEEVENT_LCLICK;
		else if( Mouse->RButtonDown() )
			MouseEvent = MOUSEEVENT_RCLICK;

		if( Mouse->LButtonPressed() )
			MouseEvent |= MOUSEEVENT_LPRESS;
	}

//---某腐磐 急琶 秦力包访
	if( Mouse->RButtonDown() )	m_bCancelSelect = TRUE;
	if( Mouse->RButtonDrag() )	m_bCancelSelect = FALSE;

	if( OBJECTMGR->GetSelectedObjectID() && Mouse->RButtonUp() && m_bCancelSelect )
	{
		OBJECTMGR->SetSelectedObject( NULL );
//		if( GAMEIN->GetMonsterGuageDlg())
//			GAMEIN->GetMonsterGuageDlg()->SetActive(FALSE);
//		if(GAMEIN->GetPlayerGuageDlg())
//			GAMEIN->GetPlayerGuageDlg()->SetActive(FALSE);

		m_bCancelSelect = FALSE;
	}
	
	if( MouseEvent == MOUSEEVENT_NONE )
	{
		if( gCurTime - dwMouseOnTick > MOUSE_ON_TICK )
		{
			dwMouseOnTick = gCurTime;
			//if( OPTIONMGR->GetGameOption()->bGraphicCursor ) //弊贰侨目辑老锭父
			//---付快胶啊 坷宏璃飘 困肺, 酒贰窃荐 哗绊 FPS眉农 confirm
			CObject* pOverObject = (CObject*)GetSelectedObject( Mouse->GetMouseX(), Mouse->GetMouseY() );
			//		CObject* pOverObject = NULL;
			
			if( pOldMouseOverObject != pOverObject )
			{
				m_pCurrentReceiver->OnMouseLeave( pOldMouseOverObject );
				m_pCurrentReceiver->OnMouseOver( pOverObject );
				
				pOldMouseOverObject = pOverObject;
			}
			//---付快胶啊 鸥老 困肺
			if( pOverObject == NULL )
			{
				CURSOR->SetCursor( eCURSOR_DEFAULT );
				/* //给啊绰 瘤开 付快胶目辑 官操扁
				VECTOR3* TargetPos = GetPickedPosition( Mouse->GetMouseX(), Mouse->GetMouseX() );
				
				  if( TargetPos )
				  {
				  if( MAP->CollisionTilePos( TargetPos->x, TargetPos->z, MAP->GetMapNum() ) )
				  CURSOR->SetCursor( eCURSOR_CANTMOVE );//on ground but can't go there
				  else
				  CURSOR->SetCursor( eCURSOR_DEFAULT );//on ground, can go there
				  }
				  else
				  {
				  CURSOR->SetCursor( eCURSOR_CANTMOVE );//not on ground
				  }
				*/
			}
		}
		
/*		
		/////傍拜吝浚.. 磊悼 蝶扼啊扁
		if( HERO )
		if( HERO->IsAutoAttacking() )
		{
			HERO->GetAutoAttackTarget()->g
			if( )
			dwMouseMoveTick = gCurTime
		pHero->SetCurComboNum(0);
		CAction MoveAction;
		if(pSkillInfo->IsMugong() == FALSE)
		{
			pSkillInfo = GetSkillInfo(GetComboSkillIdx(pHero));
		}
		MoveAction.InitSkillAction(pSkillInfo,&target);
		MOVEMGR->SetHeroActionMove(&target,&MoveAction);
		return FALSE;
*/		
	}
//---付快胶 努腐
	else
	{
		CObject* pObject = (CObject*)GetSelectedObject( Mouse->GetMouseEventX(), Mouse->GetMouseEventY() );

		if( pObject )
		{
			if( pObject->GetEngineObjectType() == eEngineObjectType_Character)
			{
				m_pCurrentReceiver->OnClickPlayer(MouseEvent,(CPlayer*)pObject);					
			}
			else if( pObject->GetEngineObjectType() == eEngineObjectType_Monster)
			{
				m_pCurrentReceiver->OnClickMonster(MouseEvent,(CMonster*)pObject);
			}
			else if( pObject->GetEngineObjectType() == eEngineObjectType_Npc)
			{
				m_pCurrentReceiver->OnClickNpc(MouseEvent,(CNpc*)pObject);
			}
			else if( pObject->GetEngineObjectType() == eEngineObjectType_SkillObject)
			{
				m_pCurrentReceiver->OnClickSkillObject(MouseEvent,(CSkillObject*)pObject);
			}
			else if( pObject->GetEngineObjectType() == eEngineObjectType_Effect)
			{
				ASSERT(0);
			}
			else
			{
				ASSERT(0);
			}
			
			if( MouseEvent & MOUSEEVENT_DBLCLICK )
			{
				if( pObject->GetEngineObjectType() == eEngineObjectType_Character )
				{
					m_pCurrentReceiver->OnDbClickPlayer( MouseEvent,(CPlayer*)pObject );
				}
				else if( pObject->GetEngineObjectType() == eEngineObjectType_Monster )
				{
					m_pCurrentReceiver->OnDbClickMonster( MOUSEEVENT_LCLICK, (CMonster*)pObject );
				}
//				else if( pObjectBase->GetEngineObjectType() == eEngineObjectType_Npc )
//				{
//					m_pCurrentReceiver->OnDbClickNpc( MouseEvent, (CNpc*)pObject );
//				}
			}

			if( MouseEvent & MOUSEEVENT_LCLICK && pObject != HERO )	//磊脚篮 努腐捞 救等促.
			{
				OBJECTMGR->SetSelectedObject( pObject );
			}
		}
		else
		{
			if( MouseEvent & MOUSEEVENT_LCLICK )
			{
				if( gCurTime - dwMouseMoveTick >= MOUSE_MOVE_TICK )
				{
					dwMouseMoveTick = gCurTime;
					dwMousePressTick = gCurTime;
					VECTOR3* TargetPos = GetPickedPosition(Mouse->GetMouseEventX(),Mouse->GetMouseEventY());
					if(!TargetPos)
						return;
					m_pCurrentReceiver->OnClickGround(MouseEvent,TargetPos);				
				}
			}
			else if( MouseEvent & MOUSEEVENT_LPRESS )
			{
				if( gCurTime - dwMousePressTick >= MOUSE_PRESS_TICK )
				{
					dwMousePressTick = gCurTime;
					VECTOR3* TargetPos = GetPickedPosition(Mouse->GetMouseX(), Mouse->GetMouseY());
					if(!TargetPos)
						return;
					m_pCurrentReceiver->OnClickGround(MouseEvent,TargetPos);
				}				
			}
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -