/// <summary>
 /// 重置当前选中技能的选择技能
 /// </summary>
 private void ResetCombineSkillLattice()
 {
     //重置技能
     if (nowSelectSkillItem && nowUISkilCombineLattice)
     {
         //判断当前锁定框的位置并修改技能
         int             level = nowUISkilCombineLattice.Level;
         EnumSkillType[] thisCombineSkillTypes = nowCombineSkillItem.value as EnumSkillType[];
         EnumSkillType[] tempCombineSkillTypes = thisCombineSkillTypes.Clone() as EnumSkillType[];
         tempCombineSkillTypes[level - 1] = (EnumSkillType)nowSelectSkillItem.value;
         if (SkillCombineStaticTools.GetCanCombineSkills(tempCombineSkillTypes) ||//该框内是否可以使用该技能
             tempCombineSkillTypes.Count(temp => temp == EnumSkillType.None) == 4   //说明都是空的
             )
         {
             thisCombineSkillTypes[level - 1] = (EnumSkillType)nowSelectSkillItem.value;
             //修改组合框的图标
             SetSkillCombineLatticeAndShowVadio(thisCombineSkillTypes);
             //修改组合技能集合中选中技能的名字
             if (nowCombineSkillItem)
             {
                 int key = SkillCombineStaticTools.GetCombineSkillKey(thisCombineSkillTypes);
                 nowCombineSkillItem.childText.text = CombineSkillText(key);
             }
         }
     }
     //切换状态到技能框
     uiSelectSkillList.gameObject.SetActive(false);
     enumUISkillCombine = EnumUISkillCombine.CombineSkillLattice;
 }
    /// <summary>
    /// 根据当前的技能框项显示技能选择
    /// </summary>
    private void SetSelectSkill()
    {
        uiSelectSkillList.gameObject.SetActive(true);
        //根据当前的技能框,选择技能的种类来初始化技能选择集合并显示该集合
        uiSelectSkillList.Init();
        //需要选中的技能框以及已经存放的技能显示可以放入的技能
        //当前的技能组合
        EnumSkillType[] nowSkillCombineTypes = (nowCombineSkillItem.value as EnumSkillType[]).Clone() as EnumSkillType[];
        //判断当前锁定框的位置
        int level = nowUISkilCombineLattice.Level;

        //通过位置和判断是否可以组合技能显示需要添加的技能
        EnumSkillType[]      canSetSkillTypes     = SkillCombineStaticTools.GetBaseSkillBackCombineSkillIndex(level);                        //该阶段的技能
        EnumSkillType[]      addedPointSkillTypes = playerState.SkillPoint.Where(temp => temp.Value > 0).Select(temp => temp.Key).ToArray(); //所有加点的技能
        List <EnumSkillType> mustShowSkillTypes   = canSetSkillTypes.Intersect(addedPointSkillTypes).ToList();                               //简略判断可以显示的技能

        //将现有技能组合判断是否可以使用技能
        mustShowSkillTypes.RemoveAll(temp =>
        {
            nowSkillCombineTypes[level - 1] = temp;
            return(!SkillCombineStaticTools.GetCanCombineSkills(nowSkillCombineTypes));
        });
        mustShowSkillTypes.Insert(0, EnumSkillType.None);//第一个必须是None技能
        foreach (EnumSkillType mustShowSkillType in mustShowSkillTypes)
        {
            UIListItem      uiListItem          = uiSelectSkillList.NewItem();
            SkillBaseStruct tempSkillBaseStruct = skillStructData_Base.SearchSkillDatas(temp => temp.skillType == mustShowSkillType).FirstOrDefault();
            //uiListItem.childImage.sprite = tempSkillBaseStruct == null ? null : tempSkillBaseStruct.skillSprite;
            uiListItem.value          = mustShowSkillType;
            uiListItem.childText.text = SkillCombineStaticTools.GetSingleSkillName(mustShowSkillType);
        }
        uiSelectSkillList.UpdateUI();
        //设置第一个技能高亮
        nowSelectSkillItem = uiSelectSkillList.FirstShowItem();
        if (nowSelectSkillItem)
        {
            nowSelectSkillItem.childImage.gameObject.SetActive(true);
            nowSelectSkillItem.childImage.enabled = true;
        }
        //然后切换状态到技能选择
        enumUISkillCombine = EnumUISkillCombine.CombineSkillSelect;
    }
 private void OnEnable()
 {
     UIManager.Instance.KeyUpHandle += Instance_KeyUpHandle;
     //重新载入数据
     skillStructData_Base = DataCenter.Instance.GetMetaData <SkillStructData>(); //元数据
     playerState          = DataCenter.Instance.GetEntity <PlayerState>();       //玩家状态
     uiCombineSkillList.Init();
     foreach (EnumSkillType[] skillTypes in playerState.CombineSkills)
     {
         SkillBaseStruct[] thisUsedSkills = skillStructData_Base.SearchSkillDatas(temp => skillTypes.Contains(temp.skillType));
         int        key            = SkillCombineStaticTools.GetCombineSkillKey(thisUsedSkills.Select(temp => temp.skillType));
         UIListItem thisUIListItem = uiCombineSkillList.NewItem();
         thisUIListItem.value          = thisUsedSkills.Select(temp => temp.skillType).ToArray();
         thisUIListItem.childText.text = CombineSkillText(key);
     }
     if (playerState.CombineSkills.Count < 30)
     {
         for (int i = 0; i < 30 - playerState.CombineSkills.Count; i++)
         {
             UIListItem thisUIListItem = uiCombineSkillList.NewItem();
             thisUIListItem.value          = new EnumSkillType[4];
             thisUIListItem.childText.text = "[None]";
         }
     }
     uiCombineSkillList.UpdateUI();
     //重设状态
     enumUISkillCombine = EnumUISkillCombine.CombineSkillItem;
     uiCombineSkillList.CanClickListItem = true;
     nowCombineSkillItem = uiCombineSkillList.FirstShowItem();
     uiCombineSkillList.ShowItem(nowCombineSkillItem);
     if (nowCombineSkillItem)
     {
         nowCombineSkillItem.childImage.enabled = true;
         nowCombineSkillItem.childImage.gameObject.SetActive(true);
         SetSkillCombineLatticeAndShowVadio((EnumSkillType[])nowCombineSkillItem.value);
     }
 }
    /// <summary>
    /// 按键检测
    /// </summary>
    /// <param name="keyType"></param>
    /// <param name="rockValue"></param>
    private void Instance_KeyUpHandle(UIManager.KeyType keyType, Vector2 rockValue)
    {
        switch (enumUISkillCombine)
        {
        case EnumUISkillCombine.CombineSkillItem:    //处于左侧状态
            switch (keyType)
            {
            case UIManager.KeyType.A:
                if (nowCombineSkillItem)
                {
                    //设置技能框的边框显示
                    nowUISkilCombineLattice = uiFocusPath.GetFirstFocus <UIFocusSkillCombineLattice>();
                    if (nowUISkilCombineLattice)
                    {
                        nowUISkilCombineLattice.SetForcus();
                    }
                    //同时将模式更改为CombineSkillLattice
                    enumUISkillCombine = EnumUISkillCombine.CombineSkillLattice;
                    uiCombineSkillList.CanClickListItem = false;
                }
                break;

            case UIManager.KeyType.UP:
            case UIManager.KeyType.DOWN:
            {
                UIListItem[] tempArrays = uiCombineSkillList.GetAllImtes();
                int          index      = 0;
                if (nowCombineSkillItem)
                {
                    index = tempArrays.ToList().IndexOf(nowCombineSkillItem);
                }
                if (index < 0)
                {
                    index = 0;
                }
                switch (keyType)
                {
                case UIManager.KeyType.UP: index--; break;

                case UIManager.KeyType.DOWN: index++; break;
                }
                index = Mathf.Clamp(index, 0, tempArrays.Length - 1);
                if (index < tempArrays.Length)
                {
                    uiCombineSkillList.ShowItem(tempArrays[index]);
                    if (nowCombineSkillItem && nowCombineSkillItem.childImage)
                    {
                        nowCombineSkillItem.childImage.enabled = false;
                        nowCombineSkillItem.childImage.gameObject.SetActive(false);
                    }
                    nowCombineSkillItem = tempArrays[index];
                    if (nowCombineSkillItem && nowCombineSkillItem.childImage)
                    {
                        nowCombineSkillItem.childImage.enabled = true;
                        nowCombineSkillItem.childImage.gameObject.SetActive(true);
                    }
                    if (nowCombineSkillItem)
                    {
                        SetSkillCombineLatticeAndShowVadio((EnumSkillType[])nowCombineSkillItem.value);
                    }
                }
            }
            break;
            }
            break;

        case EnumUISkillCombine.CombineSkillLattice:    //处于右侧状态
            switch (keyType)
            {
            case UIManager.KeyType.A:
                SetSelectSkill();
                break;

            case UIManager.KeyType.B:
                if (nowUISkilCombineLattice)
                {
                    nowUISkilCombineLattice.LostForcus();
                }
                enumUISkillCombine = EnumUISkillCombine.CombineSkillItem;        //切换模式到组合技能集合
                uiCombineSkillList.CanClickListItem = true;
                break;

            case UIManager.KeyType.LEFT:
            case UIManager.KeyType.RIGHT:
                if (nowUISkilCombineLattice)
                {
                    UIFocusSkillCombineLattice tempUIFocuesSkillCombineLattice =
                        uiFocusPath.GetNewNextFocus(nowUISkilCombineLattice, keyType == UIManager.KeyType.LEFT ? UIFocusPath.MoveType.LEFT : UIFocusPath.MoveType.RIGHT) as UIFocusSkillCombineLattice;
                    //uiFocusPath.GetNextFocus(nowUISkilCombineLattice, keyType == UIManager.KeyType.LEFT ? UIFocusPath.MoveType.LEFT : UIFocusPath.MoveType.RIGHT) as UIFocusSkillCombineLattice;
                    if (tempUIFocuesSkillCombineLattice)
                    {
                        nowUISkilCombineLattice.LostForcus();
                        nowUISkilCombineLattice = tempUIFocuesSkillCombineLattice;
                        nowUISkilCombineLattice.SetForcus();
                    }
                }
                break;
            }
            break;

        case EnumUISkillCombine.CombineSkillSelect:    //处于选择技能状态
            switch (keyType)
            {
            case UIManager.KeyType.A:
                ResetCombineSkillLattice();
                break;

            case UIManager.KeyType.B:
                //切换状态
                uiSelectSkillList.gameObject.SetActive(false);
                enumUISkillCombine = EnumUISkillCombine.CombineSkillLattice;
                break;

            case UIManager.KeyType.UP:
            case UIManager.KeyType.DOWN:
            {
                UIListItem[] tempArrays = uiSelectSkillList.GetAllImtes();
                int          index      = 0;
                if (nowCombineSkillItem)
                {
                    index = tempArrays.ToList().IndexOf(nowSelectSkillItem);
                }
                if (index < 0)
                {
                    index = 0;
                }
                switch (keyType)
                {
                case UIManager.KeyType.UP: index--; break;

                case UIManager.KeyType.DOWN: index++; break;
                }
                index = Mathf.Clamp(index, 0, tempArrays.Length - 1);
                if (index < tempArrays.Length)
                {
                    uiSelectSkillList.ShowItem(tempArrays[index]);
                    if (uiSelectSkillList && nowSelectSkillItem.childImage)
                    {
                        nowSelectSkillItem.childImage.enabled = false;
                        nowSelectSkillItem.childImage.gameObject.SetActive(false);
                    }
                    nowSelectSkillItem = tempArrays[index];
                    if (uiSelectSkillList && nowSelectSkillItem.childImage)
                    {
                        nowSelectSkillItem.childImage.enabled = true;
                        nowSelectSkillItem.childImage.gameObject.SetActive(true);
                    }
                }
            }
            break;
            }
            break;
        }
    }