Exemple #1
0
    /// <summary>
    /// 输入code处理/
    /// </summary>
    private void StickCodeHandle(StickButtonCode code)
    {
        if (code == StickButtonCode.L1_R1)
        {
            //呼出或者隐藏光标键
            HideOrShowMouse(true);
        }
        else if (code == StickButtonCode.B)
        {
            HideOrShowMouse(false);
        }

        if (_mouseStatus == UIMouseStatus.MouseHide)
        {
            DispatchEvents(code);
        }
        else
        {
            //呼出光标键状态,不派发方向键盘事件,只处理鼠标的移动和确认事件/
            if (Input.GetKey(KeyCode_X) || Input.GetKeyUp(KeyCode_X) || Input.GetKeyDown(KeyCode_X))
            {
                DispatchEvents(code);
            }
        }
    }
Exemple #2
0
 private void CacheCode(StickButtonCode code)
 {
     //只处理两个以下按键的组合键/
     if (codeList.Count < 3)
     {
         codeList.Add(code);
     }
 }
Exemple #3
0
    /// <summary>
    /// 派发事件
    /// </summary>
    /// <param name="code"></param>
    private void DispatchEvents(StickButtonCode code)
    {
        if (inputListeners == null || inputListeners.Count == 0)
        {
            return;
        }

        for (int i = 0; i < inputListeners.Count; i++)
        {
            inputListeners[i].Invoke(code);
        }
    }
Exemple #4
0
    /// <summary>
    /// 检查是否是组合键
    /// </summary>
    /// <param name="code1"></param>
    /// <param name="code2"></param>
    /// <returns></returns>
    private StickButtonCode CheckIsGroupCode(StickButtonCode code1, StickButtonCode code2)
    {
        if (code1 == code2)
        {
            return(StickButtonCode.None);
        }
        else
        {
            if (code1 == StickButtonCode.A)
            {
                if (code2 == StickButtonCode.L1)
                {
                    return(StickButtonCode.L1_A);
                }
                else if (code2 == StickButtonCode.R1)
                {
                    return(StickButtonCode.R1_A);
                }
            }
            else if (code1 == StickButtonCode.XUp)
            {
                if (code2 == StickButtonCode.L1)
                {
                    return(StickButtonCode.L1_X);
                }
                else if (code2 == StickButtonCode.R1)
                {
                    return(StickButtonCode.R1_X);
                }
            }
            else if (code1 == StickButtonCode.Y)
            {
                if (code2 == StickButtonCode.L1)
                {
                    return(StickButtonCode.L1_Y);
                }
                else if (code2 == StickButtonCode.R1)
                {
                    return(StickButtonCode.R1_Y);
                }
            }
            else if (code1 == StickButtonCode.L1)
            {
                if (code2 == StickButtonCode.A)
                {
                    return(StickButtonCode.L1_A);
                }
                else if (code2 == StickButtonCode.XUp)
                {
                    return(StickButtonCode.L1_X);
                }
                else if (code2 == StickButtonCode.Y)
                {
                    return(StickButtonCode.L1_Y);
                }
                else if (code2 == StickButtonCode.R1)
                {
                    return(StickButtonCode.L1_R1);
                }
            }
            else if (code1 == StickButtonCode.R1)
            {
                if (code2 == StickButtonCode.A)
                {
                    return(StickButtonCode.R1_A);
                }
                else if (code2 == StickButtonCode.XUp)
                {
                    return(StickButtonCode.R1_X);
                }
                else if (code2 == StickButtonCode.Y)
                {
                    return(StickButtonCode.R1_Y);
                }
                else if (code2 == StickButtonCode.L1)
                {
                    return(StickButtonCode.L1_R1);
                }
            }
        }

        return(StickButtonCode.Both);
    }
Exemple #5
0
    void Update()
    {
        int nowFrameCount = Time.frameCount;

        if (nowFrameCount > beforeDownFrame + detecFrameInterval && codeList.Count > 0)
        {
            //大于时间间隔,派发上一次的code事件/
            for (int i = 0; i < codeList.Count; i++)
            {
                StickCodeHandle(codeList[i]);
            }
            beforeDownFrame = nowFrameCount;
            codeList.Clear();
        }

        StickButtonCode tempStickCode = StickButtonCode.None;

        if (Input.GetKeyUp(KeyCode_A))
        {
            tempStickCode = StickButtonCode.A;
            CacheCode(tempStickCode);
        }

        if (Input.GetKeyUp(KeyCode_B))
        {
            tempStickCode = StickButtonCode.B;
            CacheCode(tempStickCode);
        }

        if (Input.GetKeyUp(KeyCode_X))
        {
            tempStickCode = StickButtonCode.XUp;
            CacheCode(tempStickCode);
        }

        if (Input.GetKeyDown(KeyCode_X))
        {
            tempStickCode = StickButtonCode.XDown;
            CacheCode(tempStickCode);
        }

        if (Input.GetKeyUp(KeyCode_Y))
        {
            tempStickCode = StickButtonCode.Y;
            CacheCode(tempStickCode);
        }

        if (Input.GetKeyUp(KeyCode_L1))
        {
            tempStickCode = StickButtonCode.L1;
            CacheCode(tempStickCode);
        }

        if (Input.GetKeyUp(KeyCode_R1))
        {
            tempStickCode = StickButtonCode.R1;
            CacheCode(tempStickCode);
        }


        if (Input.GetKeyDown(KeyCode_Q))
        {
            tempStickCode = StickButtonCode.Q;
            CacheCode(tempStickCode);
        }

        //         if (Input.GetAxis("joy_vertical") != 0.0f || Input.GetAxis("joy_horizontal") != 0.0f || Input.GetAxis("dpad_vertical") != 0.0f || Input.GetAxis("dpad_horizontal") != 0.0f)
        //         {
        //             MouseMove();
        //         }

        if (_mouseStatus == UIMouseStatus.MouseActive)
        {
            //UI选中状态属于呼出状态,只响应确认键和方向键,暂时不处理组合键的情况/
            if (Input.GetKey(KeyCode_X) || Input.GetKeyUp(KeyCode_X) || Input.GetKeyDown(KeyCode_X) || Input.GetKeyUp(KeyCode_B))
            {
                //不处理任何code,UICamera处理KeyCode_X的状态/
                StickCodeHandle(tempStickCode);
                codeList.Clear();
            }
            return;
        }

        if (codeList.Count == 2)
        {
            //如果缓存列表中的按键个数已经达到组合键最大个数,处理按键事件/
            StickButtonCode code1 = codeList[0];
            StickButtonCode code2 = codeList[1];
            if (code1 != code2)
            {
                StickButtonCode groupCode = CheckIsGroupCode(code1, code2);
                if (groupCode == StickButtonCode.Both)
                {
                    StickCodeHandle(code2);
                    StickCodeHandle(code1);
                }
                else
                {
                    if (groupCode != StickButtonCode.None)
                    {
                        StickCodeHandle(groupCode);
                    }
                }
            }
            codeList.Clear();
        }
        else
        {
            if (tempStickCode != StickButtonCode.None)
            {
                //如果没有达到个数,稍作延迟处理,防止用户点击的非同时性/
                beforeDownFrame = nowFrameCount;
            }
        }
    }