📄 mouseeventthrower.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 + -