//处理鼠标输入 public void ProcessInput_Mouse() { CInputSystem input = CInputSystem.Instance; bool bLBtnClick = input.IsLeftMouseClick(); bool bRBtnClick = input.IsRightMouseClick(); //----------------------------------------------------------- //鼠标碰撞上的物体 Vector3 fvMouseHitPlan = Vector3.zero; CObject pSelectObj = CObjectManager.Instance.GetMouseOverObject(input.GetMousePos(), out fvMouseHitPlan); //鼠标是否在ui上空 bool bInUIHover = s_pUISystem != null && s_pUISystem.IsMouseHover() && input.InputCapture != InputCapture.ICS_GAME; //----------------------------------------------------------- //如果左右键都没有按下,计算鼠标命令 ENUM_CURSOR_TYPE LastCursor = ENUM_CURSOR_TYPE.CURSOR_WINBASE; MOUSE_CMD_TYPE mouseType = MOUSE_CMD_TYPE.MCT_NULL; if (!bLBtnClick && !bRBtnClick) { CursorMng.Instance.MouseCommand_Set(bInUIHover, pSelectObj, fvMouseHitPlan, CActionSystem.Instance.GetDefaultAction()); //设置光标类型 SCommand_Mouse cmd = CursorMng.Instance.MouseCommand_GetLeft(); if (bInUIHover) { // 如果在UI上,且没有处于拖拽状态时,默认显示普通鼠标 [2/15/2012 Ivan] if (CursorMng.Instance.m_hUICursor == null) { if (s_pUISystem.CurrHyperlink != null) { CursorMng.Instance.SetCursor(ENUM_CURSOR_TYPE.CURSOR_HYPERLINK_HOVER); } else { CursorMng.Instance.SetCursor(ENUM_CURSOR_TYPE.CURSOR_NORMAL); } } } else { LastCursor = CursorMng.Instance.GetCursor(); mouseType = cmd.m_typeMouse; switch (cmd.m_typeMouse) { case MOUSE_CMD_TYPE.MCT_PLAYER_MOVETO: //移动 CursorMng.Instance.SetCursor(ENUM_CURSOR_TYPE.CURSOR_NORMAL); break; case MOUSE_CMD_TYPE.MCT_PLAYER_SELECT: //选择目标 CursorMng.Instance.SetCursor(ENUM_CURSOR_TYPE.CURSOR_NORMAL); break; case MOUSE_CMD_TYPE.MCT_SKILL_OBJ: //目标攻击 CursorMng.Instance.SetCursor(ENUM_CURSOR_TYPE.CURSOR_ATTACK); break; case MOUSE_CMD_TYPE.MCT_SKILL_AREA: //区域攻击 CursorMng.Instance.SetCursor(ENUM_CURSOR_TYPE.CURSOR_ATTACK); break; case MOUSE_CMD_TYPE.MCT_SKILL_DIR: //方向型技能 CursorMng.Instance.SetCursor(ENUM_CURSOR_TYPE.CURSOR_ATTACK); break; case MOUSE_CMD_TYPE.MCT_HIT_TRIPPEROBJ: //TripperObj CTripperObject pTripperObj = (CTripperObject)CObjectManager.Instance.FindServerObject(cmd.GetValue <int>(0)); if (pTripperObj != null) { CursorMng.Instance.SetCursor(pTripperObj.Tripper_GetCursor()); } else { CursorMng.Instance.SetCursor(ENUM_CURSOR_TYPE.CURSOR_NORMAL); } break; case MOUSE_CMD_TYPE.MCT_SPEAK: //对话 CursorMng.Instance.SetCursor(ENUM_CURSOR_TYPE.CURSOR_SPEAK); break; } //显示/隐藏技能范围指示器 if (MOUSE_CMD_TYPE.MCT_SKILL_AREA == cmd.m_typeMouse || (MOUSE_CMD_TYPE.MCT_USE_ITEM == cmd.m_typeMouse && cmd.GetValue <bool>(4))) { if (m_pSkillArea == null) { m_pSkillArea = (CObject_ProjTex_AuraDure)CObjectManager.Instance.NewProjTexAuraDure(-1); m_pSkillArea.Initial(null); } m_pSkillArea.SetShowEnable(true); m_pSkillArea.SetPosition(fvMouseHitPlan); if (MOUSE_CMD_TYPE.MCT_SKILL_AREA == cmd.m_typeMouse) { m_pSkillArea.SetRingRange(cmd.GetValue <float>(5)); } } else if (m_pSkillArea != null && m_pSkillArea.GetShowEnable()) { m_pSkillArea.SetShowEnable(false); } } } //----------------------------------------------------------- //分析事件队列 if (input.IsLeftMouseClick()) { //激活鼠标命令 // if(s_pUISystem && s_pUISystem->IsDragFlag()) // { // s_pUISystem->ChangeDragFlag(false); // } // else if (m_bCameraDraging) // { // //显示鼠标 // CCursorMng::GetMe()->ShowCursor(true); // s_pInputSystem->SetCapture(ICS_NONE); // } // else { if (CursorMng.Instance.MouseCommand_GetLeft().m_typeMouse == MOUSE_CMD_TYPE.MCT_PLAYER_MOVETO) { AutoReleaseSkill.Instance.SetTargetObject(-1); s_pGameInterface.StopAutoHit(); } CursorMng.Instance.MouseCommand_Active(CursorMng.Instance.MouseCommand_GetLeft()); } } else if (input.IsRightMouseClick()) { CursorMng.Instance.MouseCommand_Active(CursorMng.Instance.MouseCommand_GetRight()); } //鼠标滚轮操作 float scrollWheel = input.GetAxis("Mouse ScrollWheel"); GFX.SceneCamera.Instance.setScrollWheel(scrollWheel); if (input.isMouseRightHold() && !bInUIHover)//摄像机旋转操作 { float mouseHorMove = input.GetAxis("Mouse X"); if (Mathf.Abs(mouseHorMove) > 0.0001) { GFX.SceneCamera.Instance.AddDirection(mouseHorMove); } } //----------------------------------------------------------- // 显示鼠标 if (CursorMng.Instance.GetCursor() != LastCursor) { CursorMng.Instance.OnSetCursor(); } }