/// <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>
    /// <param name="key"></param>
    /// <returns></returns>
    private string CombineSkillText(int key)
    {
        EnumSkillType[]   skills            = SkillCombineStaticTools.GetCombineSkills(key);
        SkillBaseStruct[] thisUsedSkills    = skillStructData_Base.SearchSkillDatas(temp => skills.Contains(temp.skillType));
        string            combineSkillNames = SkillCombineStaticTools.GetCombineSkillsName(thisUsedSkills);

        if (string.IsNullOrEmpty(combineSkillNames))
        {
            return("[None]");
        }
        return(combineSkillNames);
    }
예제 #3
0
 public void KeyDown(int key)
 {
     if (keyContactData == null)
     {
         return;
     }
     if (iGameState.GameRunType != EnumGameRunType.Safe && iGameState.GameRunType != EnumGameRunType.Unsafa)
     {
         return;
     }
     if (iPlayerState.KeyContactDataZone != EnumKeyContactDataZone.Normal)//如果此时不是释放技能的键位,则不需要下面的判断
     {
         return;
     }
     KeyContactStruct[] keyContactStructs = keyContactData.GetKeyContactStruct(key, temp => temp.keyContactType == EnumKeyContactType.Skill);
     if (keyContactStructs.Length > 0)
     {
         foreach (KeyContactStruct keyContactStruct in keyContactStructs)//便利所有按键对象
         {
             int skillID = keyContactStruct.id;
             //组合技能放入技能组合盘
             if (skillID > (int)EnumSkillType.MagicCombinedStart)
             {
                 EnumSkillType[]   enumSkillTypes = SkillCombineStaticTools.GetCombineSkills(skillID);
                 SkillBaseStruct[] combineSkills  = skillStructData.SearchSkillDatas(temp => enumSkillTypes.Contains(temp.skillType));
                 iSkillState.CombineSkills = combineSkills;
             }
             else if (skillID > (int)EnumSkillType.MagicCombinedLevel1Start && skillID < (int)EnumSkillType.MagicCombinedLevel4End)
             {
                 SkillBaseStruct[] singleCombineSkills = skillStructData.SearchSkillDatas(temp => (EnumSkillType)skillID == temp.skillType);
                 iSkillState.CombineSkills = singleCombineSkills;
             }
             //如果按下魔法释放键,则释放组合盘中的魔法
             else if (skillID == (int)EnumSkillType.MagicRelease)
             {
                 iSkillState.StartCombineSkillRelease();
             }
             else//非组合技能直接释放
             {
                 iSkillState.ReleaseNormalSkill(skillStructData.SearchSkillDatas(temp => (int)temp.skillType == skillID).FirstOrDefault());
             }
         }
     }
     else if (keyContactData.GetKeyContactStruct(key, temp => temp.keyContactType == EnumKeyContactType.None).Count() == 1)//如果输入了空的按键则
     {
         iSkillState.CombineSkills = null;
     }
 }
    /// <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;
    }
    /// <summary>
    /// 根据指定的类型和id设置图标
    /// </summary>
    public void InitShow()
    {
        switch (keyLatticeType)
        {
        case EnumKeyContactType.Skill:
            if (ThisSkillStructData == null)
            {
                break;
            }
            if (id > (int)EnumSkillType.MagicCombinedStart)    //组合技能
            {
                SetTargetImage(SkillCombineStaticTools.GetCombineSkillSprite(ThisSkillStructData, id));
            }
            else    //单一的技能
            {
                SkillBaseStruct skillBaseStruct = ThisSkillStructData.SearchSkillDatas(temp => temp.skillType == (EnumSkillType)id).FirstOrDefault();
                if (skillBaseStruct != null)
                {
                    SetTargetImage(skillBaseStruct.skillSprite);
                }
                else
                {
                    SetTargetImage(null);
                }
            }
            break;

        case EnumKeyContactType.Prap:
            if (ThisPlayerState == null)
            {
                break;
            }
            PlayGoods playGoods = ThisPlayerState.PlayerAllGoods.Where(temp => temp.ID == id).FirstOrDefault();
            SetTargetImage(playGoods.GetGoodsSprite);
            break;

        default:
            SetTargetImage(null);
            break;
        }
    }
 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);
     }
 }
    private void Show()
    {
        if (skillStructData == null || playerState == null || keyImage == null)
        {
            return;
        }
        KeyContactStruct keyContactStruct = default(KeyContactStruct);

        //这里存在优化空间
        if (r1Press)
        {
            keyContactStruct = keyContactData.GetKeyContactStruct(InputType | (int)EnumInputType.RB, null, iPlayerState.KeyContactDataZone).FirstOrDefault();
        }
        else if (r2Press)
        {
            keyContactStruct = keyContactData.GetKeyContactStruct(InputType | (int)EnumInputType.RT, null, iPlayerState.KeyContactDataZone).FirstOrDefault();
        }
        else if (l1Press)
        {
            keyContactStruct = keyContactData.GetKeyContactStruct(InputType | (int)EnumInputType.LB, null, iPlayerState.KeyContactDataZone).FirstOrDefault();
        }
        else if (l2Press)
        {
            keyContactStruct = keyContactData.GetKeyContactStruct(InputType | (int)EnumInputType.LT, null, iPlayerState.KeyContactDataZone).FirstOrDefault();
        }
        else
        {
            keyContactStruct = keyContactData.GetKeyContactStruct(InputType, null, iPlayerState.KeyContactDataZone).FirstOrDefault();
        }

        switch (keyContactStruct.keyContactType)
        {
        case EnumKeyContactType.None:
            keyImage.sprite       = null;
            innerImage.fillAmount = 0;
            break;

        case EnumKeyContactType.Skill:
            int skillKey = keyContactStruct.id;
            if (skillKey > (int)EnumSkillType.MagicCombinedStart)
            {
                keyImage.sprite = SkillCombineStaticTools.GetCombineSkillSprite(skillStructData, skillKey);
            }
            else
            {
                keyImage.sprite = skillStructData.SearchSkillDatas(temp => (int)temp.skillType == skillKey).Select(temp => temp.skillSprite).FirstOrDefault();
            }
            //这里还需要判断是不是没有冷却的技能,比如魔法释放 普通攻击等
            if (skillKey != (int)EnumSkillType.MagicRelease && skillKey != (int)EnumSkillType.PhysicAttack)
            {
                innerImage.fillAmount = Mathf.Clamp(iSkillState.PublicCoolingTime / 1, 0, 1);
            }
            else
            {
                innerImage.fillAmount = 0;
            }
            break;

        case EnumKeyContactType.Prap:
            PlayGoods playGoods = playerState.PlayerAllGoods.Where(temp => (int)temp.GoodsInfo.EnumGoodsType == keyContactStruct.id).FirstOrDefault();
            if (playGoods != null)
            {
                keyImage.sprite = playGoods.GetGoodsSprite;
            }
            else
            {
                keyImage.sprite = null;
            }
            innerImage.fillAmount = 0;
            break;

        case EnumKeyContactType.Action:
            keyImage.sprite       = keyContactStruct.Sprite;
            innerImage.fillAmount = 0;
            break;
        }
        keyImage.enabled = keyImage.sprite != null;
        r1Press          = false;
        r2Press          = false;
        l1Press          = false;
        l2Press          = false;
    }
    private void OnGUI()
    {
        if (skillTypeToParticalNameDic == null)
        {
            return;
        }
        EditorGUILayout.BeginHorizontal();
        //左侧的选择配置项按钮面板
        EditorGUILayout.BeginVertical(GUILayout.Width(250));
        EditorGUILayout.BeginHorizontal();
        if (GUILayout.Button("保存", GUILayout.Width(35)))
        {
            string valueText = SerializeNow(skillTypeToParticalNameDic);
            File.WriteAllText(dataDirecotryPath + "/CombinePartical.txt", valueText, Encoding.UTF8);
            EditorUtility.DisplayDialog("保存数据", "保存成功!", "确认");
        }
        GUILayout.Space(100);
        if (GUILayout.Button("增量加载资源", GUILayout.Width(100)))
        {
            ParticalManager.IncrementalLoad();
        }
        EditorGUILayout.EndHorizontal();
        if (GUILayout.Button("添加", GUILayout.Width(35)))
        {
            if (!skillTypeToParticalNameDic.ContainsKey(-1))
            {
                skillTypeToParticalNameDic.Add(-1, "None");
            }
            else
            {
                EditorUtility.DisplayDialog("提示", "请先编辑之前添加的数据!", "确认");
            }
        }
        leftScroll = EditorGUILayout.BeginScrollView(leftScroll);
        KeyValuePair <int, string>[] tempValues = skillTypeToParticalNameDic.ToArray();
        Type enumType = typeof(EnumSkillType);

        foreach (KeyValuePair <int, string> tempValue in tempValues)
        {
            EditorGUILayout.BeginHorizontal();
            if (GUILayout.Button("×", GUILayout.Width(15)))
            {
                if (EditorUtility.DisplayDialog("警告!", "将会减去该数据!", "确认", "取消"))
                {
                    skillTypeToParticalNameDic.Remove(tempValue.Key);
                }
            }
            if (object.Equals(tempValue.Key, selectKey))
            {
                GUILayout.Space(30);
            }
            string[]        showNames     = new string[0];
            EnumSkillType[] thisSkillTyps = SkillCombineStaticTools.GetCombineSkills(tempValue.Key);
            if (thisSkillTyps != null)
            {
                showNames = thisSkillTyps.Select <EnumSkillType, string>(temp =>
                {
                    FieldInfo fieldInfo = enumType.GetField(temp.ToString());
                    if (fieldInfo == null)
                    {
                        return("");
                    }
                    FieldExplanAttribute fieldExplanAttribute = fieldInfo.GetCustomAttributes(typeof(FieldExplanAttribute), false).Select(innerTemp => innerTemp as FieldExplanAttribute).Where(innerTemp => innerTemp != null).FirstOrDefault();
                    if (fieldExplanAttribute == null)
                    {
                        return("");
                    }
                    return(fieldExplanAttribute.GetExplan());
                }).Where(temp => !string.IsNullOrEmpty(temp)).ToArray();
            }
            string showName = showNames.Length > 0 ? string.Join("+", showNames) : "None";
            if (GUILayout.Button(showName))
            {
                if (object.Equals(tempValue.Key, selectKey))
                {
                    selectKey = 0;
                }
                else
                {
                    selectKey          = tempValue.Key;
                    nowSelectSkillTyps = thisSkillTyps;
                }
            }
            EditorGUILayout.EndHorizontal();
        }
        EditorGUILayout.EndScrollView();
        EditorGUILayout.EndVertical();

        //第一个技能
        EditorGUILayout.BeginVertical();
        if (nowSelectSkillTyps == null || nowSelectSkillTyps.Length < 1)
        {
            nowSelectSkillTyps = new EnumSkillType[] { EnumSkillType.None }
        }
        ;
        var enumSkillTypes_First = allSkillTypes.Select(temp =>
        {
            FieldInfo fieldInfo = enumType.GetField(temp.ToString());
            if (fieldInfo == null)
            {
                return new { type = temp, str = "" }
            }
            ;
            FieldExplanAttribute fieldExplanAttriubte = fieldInfo.GetCustomAttributes(typeof(FieldExplanAttribute), false).OfType <FieldExplanAttribute>().Where(innerTemp => innerTemp != null).FirstOrDefault();
            if (fieldExplanAttriubte == null)
            {
                return new { type = temp, str = "" }
            }
            ;
            return(new { type = temp, str = fieldExplanAttriubte.GetExplan() });
        }).Where(temp => !string.IsNullOrEmpty(temp.str)).Where(temp => temp.type < EnumSkillType.MagicCombinedLevel1End).Reverse();
        int index_First    = enumSkillTypes_First.Select(temp => temp.type).ToList().IndexOf(nowSelectSkillTyps[0]);
        int nowIndex_First = EditorGUILayout.Popup(index_First, enumSkillTypes_First.Select(temp => temp.str).ToArray());

        if (nowIndex_First > -1 && nowIndex_First < enumSkillTypes_First.Count())
        {
            EnumSkillType selectEnumSkillType = enumSkillTypes_First.ToArray()[nowIndex_First].type;
            nowSelectSkillTyps[0] = selectEnumSkillType;
        }
        if (nowSelectSkillTyps[0] < EnumSkillType.MagicCombinedLevel1Start)
        {
            EnumSkillType[] tempArray = nowSelectSkillTyps;
            nowSelectSkillTyps = new EnumSkillType[1];
            Array.Copy(tempArray, nowSelectSkillTyps, 1);
        }
        //第二个技能
        if (nowSelectSkillTyps.Length > 0 && nowSelectSkillTyps[0] > EnumSkillType.MagicCombinedLevel1Start)
        {
            if (nowSelectSkillTyps.Length < 2)
            {
                EnumSkillType[] tempArray = nowSelectSkillTyps;
                nowSelectSkillTyps = new EnumSkillType[2];
                Array.Copy(tempArray, nowSelectSkillTyps, 1);
            }
            var enumSkillTypes_Second = allSkillTypes.Select(temp =>
            {
                FieldInfo fieldInfo = enumType.GetField(temp.ToString());

                if (fieldInfo == null)
                {
                    return new { type = temp, str = "" }
                }
                ;
                FieldExplanAttribute fieldExplanAttriubte = fieldInfo.GetCustomAttributes(typeof(FieldExplanAttribute), false).OfType <FieldExplanAttribute>().Where(innerTemp => innerTemp != null).FirstOrDefault();
                if (fieldExplanAttriubte == null)
                {
                    return new { type = temp, str = "" }
                }
                ;
                return(new { type = temp, str = fieldExplanAttriubte.GetExplan() });
            }).Where(temp => !string.IsNullOrEmpty(temp.str)).Where(temp => temp.type <EnumSkillType.MagicCombinedLevel2End && temp.type> EnumSkillType.MagicCombinedLevel2Start);
            int index_Second    = enumSkillTypes_Second.Select(temp => temp.type).ToList().IndexOf(nowSelectSkillTyps[1]);
            int nowIndex_Second = EditorGUILayout.Popup(index_Second, enumSkillTypes_Second.Select(temp => temp.str).ToArray());
            if (nowIndex_Second > -1 && nowIndex_Second < enumSkillTypes_Second.Count())
            {
                EnumSkillType selectEnumSkillType = enumSkillTypes_Second.ToArray()[nowIndex_Second].type;
                nowSelectSkillTyps[1] = selectEnumSkillType;
            }
        }
        //第三个技能
        if (nowSelectSkillTyps.Length > 1 && nowSelectSkillTyps[1] > EnumSkillType.MagicCombinedLevel2Start)
        {
            if (nowSelectSkillTyps.Length < 3)
            {
                EnumSkillType[] tempArray = nowSelectSkillTyps;
                nowSelectSkillTyps = new EnumSkillType[3];
                Array.Copy(tempArray, nowSelectSkillTyps, 2);
            }
            var enumSkillTypes_Third = allSkillTypes.Select(temp =>
            {
                FieldInfo fieldInfo = enumType.GetField(temp.ToString());
                if (fieldInfo == null)
                {
                    return new { type = temp, str = "" }
                }
                ;
                FieldExplanAttribute fieldExplanAttriubte = fieldInfo.GetCustomAttributes(typeof(FieldExplanAttribute), false).OfType <FieldExplanAttribute>().Where(innerTemp => innerTemp != null).FirstOrDefault();
                if (fieldExplanAttriubte == null)
                {
                    return new { type = temp, str = "" }
                }
                ;
                return(new { type = temp, str = fieldExplanAttriubte.GetExplan() });
            }).Where(temp => !string.IsNullOrEmpty(temp.str)).Where(temp => temp.type <EnumSkillType.MagicCombinedLevel3End && temp.type> EnumSkillType.MagicCombinedLevel3Start);
            int index_Third    = enumSkillTypes_Third.Select(temp => temp.type).ToList().IndexOf(nowSelectSkillTyps[2]);
            int nowIndex_Third = EditorGUILayout.Popup(index_Third, enumSkillTypes_Third.Select(temp => temp.str).ToArray());
            if (nowIndex_Third > -1 && nowIndex_Third < enumSkillTypes_Third.Count())
            {
                EnumSkillType selectEnumSkillType = enumSkillTypes_Third.ToArray()[nowIndex_Third].type;
                nowSelectSkillTyps[2] = selectEnumSkillType;
            }
        }
        //第四个技能
        if (nowSelectSkillTyps.Length > 2 && nowSelectSkillTyps[2] > EnumSkillType.MagicCombinedLevel3Start)
        {
            if (nowSelectSkillTyps.Length < 4)
            {
                EnumSkillType[] tempArray = nowSelectSkillTyps;
                nowSelectSkillTyps = new EnumSkillType[4];
                Array.Copy(tempArray, nowSelectSkillTyps, 3);
            }
            var enumSkillTypes_Fourth = allSkillTypes.Select(temp =>
            {
                FieldInfo fieldInfo = enumType.GetField(temp.ToString());
                if (fieldInfo == null)
                {
                    return new { type = temp, str = "" }
                }
                ;
                FieldExplanAttribute fieldExplanAttriubte = fieldInfo.GetCustomAttributes(typeof(FieldExplanAttribute), false).OfType <FieldExplanAttribute>().Where(innerTemp => innerTemp != null).FirstOrDefault();
                if (fieldExplanAttriubte == null)
                {
                    return new { type = temp, str = "" }
                }
                ;
                return(new { type = temp, str = fieldExplanAttriubte.GetExplan() });
            }).Where(temp => !string.IsNullOrEmpty(temp.str)).Where(temp => temp.type <EnumSkillType.MagicCombinedLevel4End && temp.type> EnumSkillType.MagicCombinedLevel4Start);
            int index_Fourth    = enumSkillTypes_Fourth.Select(temp => temp.type).ToList().IndexOf(nowSelectSkillTyps[3]);
            int nowIndex_Fourth = EditorGUILayout.Popup(index_Fourth, enumSkillTypes_Fourth.Select(temp => temp.str).ToArray());
            if (nowIndex_Fourth > -1 && nowIndex_Fourth < enumSkillTypes_Fourth.Count())
            {
                EnumSkillType selectEnumSkillType = enumSkillTypes_Fourth.ToArray()[nowIndex_Fourth].type;
                nowSelectSkillTyps[3] = selectEnumSkillType;
            }
        }
        //技能粒子对象
        if (skillTypeToParticalNameDic.ContainsKey(selectKey))
        {
            GameObject particalObj = (GameObject)EditorGUILayout.ObjectField(ParticalManager.GetPartical(skillTypeToParticalNameDic[selectKey]), typeof(GameObject), true);
            skillTypeToParticalNameDic[selectKey] = ParticalManager.GetName(particalObj);
        }
        if (GUILayout.Button("保存", GUILayout.Width(35)))
        {
            int key = SkillCombineStaticTools.GetCombineSkillKey(nowSelectSkillTyps);
            if (key == 0 || (key != selectKey && skillTypeToParticalNameDic.ContainsKey(key)))
            {
                EditorUtility.DisplayDialog("提示", "无法保存该数据!", "确认");
            }
            else
            {
                string particalName = "";
                if (skillTypeToParticalNameDic.ContainsKey(selectKey))
                {
                    particalName = skillTypeToParticalNameDic[selectKey];
                    skillTypeToParticalNameDic.Remove(selectKey);
                }
                skillTypeToParticalNameDic.Add(key, particalName);
                selectKey = key;
            }
        }

        EditorGUILayout.EndVertical();
        EditorGUILayout.EndHorizontal();
    }
}
    private void Awake()
    {
        //重置路径
        dataDirectoryPath = Application.dataPath + @"\Scripts\Data\Resources\Data\SkillSprite";

        skillTypeToSpriteShowDic    = new Dictionary <EnumSkillType, Sprite>();
        skillTypeToSpriteCombineDic = new Dictionary <EnumSkillType, Sprite>();
        skillTypeToExplanDic        = new Dictionary <EnumSkillType, string>();
        if (!Directory.Exists(dataDirectoryPath))
        {
            Directory.CreateDirectory(dataDirectoryPath);
        }
        //用于显示
        if (!File.Exists(dataDirectoryPath + "/SkillSprite.txt"))
        {
            File.Create(dataDirectoryPath + "/SkillSprite.txt").Close();
            skillTypeToSpriteIDShowDic = new Dictionary <EnumSkillType, string>();
            File.WriteAllText(dataDirectoryPath + "/SkillSprite.txt", "{}", Encoding.UTF8);
        }
        else
        {
            string assetText = File.ReadAllText(dataDirectoryPath + "/SkillSprite.txt", Encoding.UTF8);
            skillTypeToSpriteIDShowDic = DeSerializeNow <Dictionary <EnumSkillType, string> >(assetText);
        }
        //用于组合
        if (!File.Exists(dataDirectoryPath + "/SkillSprite_Combine.txt"))
        {
            File.Create(dataDirectoryPath + "/SkillSprite_Combine.txt").Close();
            skillTypeToSpriteIDCombineDic = new Dictionary <EnumSkillType, string>();
            File.WriteAllText(dataDirectoryPath + "/SkillSprite_Combine.txt", "{}", Encoding.UTF8);
        }
        else
        {
            string assetText = File.ReadAllText(dataDirectoryPath + "/SkillSprite_Combine.txt", Encoding.UTF8);
            skillTypeToSpriteIDCombineDic = DeSerializeNow <Dictionary <EnumSkillType, string> >(assetText);
        }
        //检测是否增加或减少
        EnumSkillType[] defaultEnumSKillTypes = Enum.GetValues(typeof(EnumSkillType)).OfType <EnumSkillType>().ToArray();
        //增加二阶技能的枚举
        EnumSkillType[] combineEnumSkillTypes = SkillCombineStaticTools.GetCombineSkillByCombineSkillIndex(2);
        defaultEnumSKillTypes = defaultEnumSKillTypes.Concat(combineEnumSkillTypes).Distinct().ToArray();
        foreach (EnumSkillType enumSkillType in defaultEnumSKillTypes)//检测增加量
        {
            if (!skillTypeToSpriteIDShowDic.ContainsKey(enumSkillType))
            {
                skillTypeToSpriteIDShowDic.Add(enumSkillType, "");
            }
            if (!skillTypeToSpriteIDCombineDic.ContainsKey(enumSkillType))
            {
                skillTypeToSpriteIDCombineDic.Add(enumSkillType, "");
            }
        }
        //显示
        EnumSkillType[] nowShowDicEnumSkillTypes = skillTypeToSpriteIDShowDic.Keys.OfType <EnumSkillType>().ToArray();
        foreach (EnumSkillType enumSkillType in nowShowDicEnumSkillTypes)//检测减少量
        {
            if (!defaultEnumSKillTypes.Contains(enumSkillType))
            {
                skillTypeToSpriteIDShowDic.Remove(enumSkillType);
            }
        }
        //组合
        EnumSkillType[] nowCombineDicEnumSkillTypes = skillTypeToSpriteIDCombineDic.Keys.OfType <EnumSkillType>().ToArray();
        foreach (EnumSkillType enumSkillType in nowCombineDicEnumSkillTypes)//检测减少量
        {
            if (!defaultEnumSKillTypes.Contains(enumSkillType))
            {
                skillTypeToSpriteIDCombineDic.Remove(enumSkillType);
            }
        }
        //根据当前id字典构建sprite字典(显示)
        foreach (KeyValuePair <EnumSkillType, string> item in skillTypeToSpriteIDShowDic)
        {
            Sprite sprite = SpriteManager.GetSrpite(item.Value);
            skillTypeToSpriteShowDic.Add(item.Key, sprite);
        }
        //根据当前id字典构建sprite字典(组合)
        foreach (KeyValuePair <EnumSkillType, string> item in skillTypeToSpriteIDCombineDic)
        {
            Sprite sprite = SpriteManager.GetSrpite(item.Value);
            skillTypeToSpriteCombineDic.Add(item.Key, sprite);
        }
        //构建技能类型对应说明字典
        Type enumType = typeof(EnumSkillType);
        Func <EnumSkillType, string> GetSkillNameFunc = (skillType) =>
        {
            FieldInfo fieldInfo = enumType.GetField(skillType.ToString());
            if (fieldInfo != null)
            {
                FieldExplanAttribute fieldExplanAttribute = fieldInfo.GetCustomAttributes(typeof(FieldExplanAttribute), false).OfType <FieldExplanAttribute>().FirstOrDefault();
                if (fieldExplanAttribute != null)
                {
                    return(fieldExplanAttribute.GetExplan());
                }
            }
            return(null);
        };

        foreach (EnumSkillType enumSkillType in defaultEnumSKillTypes)
        {
            string skillName = GetSkillNameFunc(enumSkillType);
            if (skillName != null)
            {
                skillTypeToExplanDic.Add(enumSkillType, skillName);
            }
            else//这可能是组合技能
            {
                int key = (int)enumSkillType;
                if (key <= (int)EnumSkillType.MagicCombinedStart || key >= (int)EnumSkillType.EndMagic)//这不是组合技能
                {
                    continue;
                }
                EnumSkillType[] childSkills = SkillCombineStaticTools.GetCombineSkills(key);
                if (childSkills != null && childSkills.Length > 0)
                {
                    string names = "组合:";
                    childSkills.ToList().ForEach(temp => names += GetSkillNameFunc(temp) + "--");
                    skillTypeToExplanDic.Add(enumSkillType, names);
                }
                else
                {
                    skillTypeToExplanDic.Add(enumSkillType, "获取命名失败");
                }
            }
        }
    }
예제 #10
0
    /// <summary>
    /// 更新显示
    /// </summary>
    private void ChangeSpriteLattice()
    {
        SkillBaseStruct[]          skillBaseStructs = iSkillState.CombineSkills;
        Action <Transform, Sprite> SetImageSprite   = (trans, sprite) =>//设置技能的图片显示
        {
            if (trans)
            {
                Image image = trans.GetComponent <Image>();
                if (image)
                {
                    image.sprite  = sprite;
                    image.enabled = sprite != null;
                }
            }
        };
        Action <Transform, float> SetImageInnerState = (trans, coolingTime) =>//设置技能的冷却显示
        {
            if (trans)
            {
                Image image = trans.GetComponent <Image>();
                if (image)
                {
                    image.fillAmount = Mathf.Clamp(coolingTime, 0, 1);
                }
            }
        };

        if (skillBaseStructs != null)
        {
            int   skillID          = SkillCombineStaticTools.GetCombineSkillKey(skillBaseStructs);
            float skillCoolingTime = iSkillState.GetSkillRuntimeCoolingTime(skillID);                                                                                                     //本技能的冷却时间
            float maxTime          = skillCoolingTime > iSkillState.PublicCoolingTime ? (skillCoolingTime / iSkillState.GetSkillMaxCoolingTime(skillID)) : iSkillState.PublicCoolingTime; //选取最大的时间作为显示时间
            if (skillBaseStructs.Length > 0 && skillBaseStructs[0] != null)
            {
                Sprite sprite = SkillCombineStaticTools.GetCombineSkillSprite(skillStructData, (int)skillBaseStructs[0].skillType);
                SetImageSprite(firstImage, sprite);
                SetImageInnerState(firstInnerImage, maxTime);
            }
            else//清理第一个框
            {
                SetImageSprite(firstImage, null);
                SetImageInnerState(firstInnerImage, 0);
            }

            if (skillBaseStructs.Length > 1 && skillBaseStructs[1] != null)
            {
                Sprite sprite = SkillCombineStaticTools.GetCombineSkillSprite(skillStructData, (int)skillBaseStructs[1].skillType);
                SetImageSprite(secondImage, sprite);
                SetImageInnerState(secondInnerImage, maxTime);
            }
            else//清理第二个框
            {
                SetImageSprite(secondImage, null);
                SetImageInnerState(secondInnerImage, 0);
            }

            if (skillBaseStructs.Length > 2 && skillBaseStructs[2] != null)
            {
                Sprite sprite = SkillCombineStaticTools.GetCombineSkillSprite(skillStructData, (int)skillBaseStructs[2].skillType);
                SetImageSprite(thirdImage, sprite);
                SetImageInnerState(thirdInnerImage, maxTime);
            }
            else//清理第三个框
            {
                SetImageSprite(thirdImage, null);
                SetImageInnerState(thirdInnerImage, 0);
            }

            if (skillBaseStructs.Length > 3 && skillBaseStructs[3] != null)
            {
                Sprite sprite = SkillCombineStaticTools.GetCombineSkillSprite(skillStructData, (int)skillBaseStructs[3].skillType);
                SetImageSprite(fourthImage, sprite);
                SetImageInnerState(fourthInnerImage, maxTime);
            }
            else//清理第四个框
            {
                SetImageSprite(fourthImage, null);
                SetImageInnerState(fourthInnerImage, 0);
            }
        }
        else
        {
            SetImageSprite(firstImage, null);
            SetImageSprite(secondImage, null);
            SetImageSprite(thirdImage, null);
            SetImageSprite(fourthImage, null);
            SetImageInnerState(firstInnerImage, 0);
            SetImageInnerState(secondInnerImage, 0);
            SetImageInnerState(thirdInnerImage, 0);
            SetImageInnerState(fourthInnerImage, 0);
        }
    }
예제 #11
0
    /// <summary>
    /// 显示集合
    /// </summary>
    private void ShowUIList()
    {
        uiKeySettingList.Init();
        //注意第一项弄成空的
        UIListItem firstItem = uiKeySettingList.NewItem();

        firstItem.childText.text = "None";
        //firstItem.transform.GetChild(1).GetComponent<Text>().text = "None";
        firstItem.value = null;
        uiKeySettingList.UpdateUI();
        //其他项从技能和道具中检索
        List <KeyContactStruct> keyContactStructList = new List <KeyContactStruct>();

        //单独的技能
        foreach (var item in playerState.SkillPoint)
        {
            if (item.Value <= 0)
            {
                continue;
            }
            SkillBaseStruct skillBaseStruct = skillStructData.SearchSkillDatas(temp => temp.skillType == item.Key).FirstOrDefault();
            if (skillBaseStruct != null)
            {
                KeyContactStruct tempKeyContactStruct = new KeyContactStruct();
                tempKeyContactStruct.id             = (int)item.Key;
                tempKeyContactStruct.key            = 0;
                tempKeyContactStruct.keyContactType = EnumKeyContactType.Skill;
                tempKeyContactStruct.name           = skillBaseStruct.skillName;
                keyContactStructList.Add(tempKeyContactStruct);
            }
        }
        //组合的技能
        foreach (var item in playerState.CombineSkills)
        {
            if (item != null && item.Count(temp => temp == EnumSkillType.None) < 4)
            {
                KeyContactStruct tempKeyContactStruct = new KeyContactStruct();
                tempKeyContactStruct.id             = SkillCombineStaticTools.GetCombineSkillKey(item);
                tempKeyContactStruct.key            = 0;
                tempKeyContactStruct.keyContactType = EnumKeyContactType.Skill;
                tempKeyContactStruct.name           = SkillCombineStaticTools.GetCombineSkillsName(item);
                keyContactStructList.Add(tempKeyContactStruct);
            }
        }
        //可使用的炼金道具
        foreach (var item in playerState.PlayerAllGoods.Where(temp =>
                                                              ((int)temp.GoodsInfo.EnumGoodsType > (int)EnumGoodsType.Item && (int)temp.GoodsInfo.EnumGoodsType < (int)EnumGoodsType.Item + 1000000) ||
                                                              ((int)temp.GoodsInfo.EnumGoodsType > (int)EnumGoodsType.Elixir && (int)temp.GoodsInfo.EnumGoodsType < (int)EnumGoodsType.Elixir + 1000000)
                                                              ))
        {
            KeyContactStruct tempKeyContactStruct = new KeyContactStruct();
            tempKeyContactStruct.id             = item.ID;
            tempKeyContactStruct.key            = 0;
            tempKeyContactStruct.keyContactType = EnumKeyContactType.Prap;
            tempKeyContactStruct.name           = item.GoodsInfo.GoodsName;
            keyContactStructList.Add(tempKeyContactStruct);
        }
        //显示在下拉列表中
        foreach (var item in keyContactStructList)
        {
            UIListItem uiListItem = uiKeySettingList.NewItem();
            uiListItem.childText.text     = item.name;
            uiListItem.value              = item;
            uiListItem.childImage.enabled = false;
        }
        //最后的设置
        uiKeySettingList.UpdateUI();
        nowKeySettingListItem = uiKeySettingList.FirstShowItem();
        uiKeySettingList.ShowItem(nowKeySettingListItem);
        if (nowKeySettingListItem)
        {
            nowKeySettingListItem.childImage.enabled = true;
        }
        selectTargetPanel.gameObject.SetActive(true);
        //状态改为选择技能
        enumKeySettingType = EnumKeySettingType.Select;
    }
예제 #12
0
    /// <summary>
    /// 当隐藏时处理
    /// </summary>
    private void OnDisable()
    {
        UIManager.Instance.KeyUpHandle -= Instance_KeyUpHandle;
        if (nowKeySettingLattice)
        {
            nowKeySettingLattice.LostForcus();
        }
        //保存状态
        UIFocus[] uiKeySettingLatticeArray = keySettingFocusPath.UIFocuesArray;
        foreach (UIFocus item in uiKeySettingLatticeArray)
        {
            if (!item)
            {
                continue;
            }
            UIFocusKeySettingLattice uiKeySettingLattice = item as UIFocusKeySettingLattice;
            int inputKey = uiKeySettingLattice.GetKeySettingInput();//输入的按键值
            if (uiKeySettingLattice)
            {
                //KeyContactStruct[] keyContactStructs = keyContactData.GetKeyContactStruct(inputKey);
                KeyContactStruct newTarget = new KeyContactStruct();
                newTarget.id             = uiKeySettingLattice.id;
                newTarget.keyContactType = uiKeySettingLattice.keyLatticeType;
                //if (keyContactStructs.Length > 0)
                //{
                //    newTarget = keyContactStructs[0];
                //}
                //else
                //{
                //设置对象的名字
                switch (newTarget.keyContactType)
                {
                case EnumKeyContactType.None:
                    newTarget.name = "None";
                    break;

                case EnumKeyContactType.Skill:
                    EnumSkillType[] skillTypes = SkillCombineStaticTools.GetCombineSkills(newTarget.id);
                    newTarget.name = SkillCombineStaticTools.GetCombineSkillsName(skillTypes);
                    //如果是火球术
                    if (newTarget.id == SkillCombineStaticTools.GetCombineSkillKey(new EnumSkillType[] { EnumSkillType.FS01, EnumSkillType.YSX01 }))
                    {
                        //给任务系统填入状态
                        INowTaskState iNowTaskState = GameState.Instance.GetEntity <INowTaskState>();
                        iNowTaskState.CheckNowTask(EnumCheckTaskType.Special, (int)TaskMap.Enums.EnumTaskSpecialCheck.SetFireSkillToLattice);
                    }
                    break;

                case EnumKeyContactType.Prap:
                    PlayGoods playGoods = playerState.PlayerAllGoods.FirstOrDefault(temp => temp.ID == newTarget.id);
                    newTarget.name = playGoods.GoodsInfo.GoodsName;
                    break;

                case EnumKeyContactType.Action:
                    newTarget.name = "暂无功能";
                    break;
                }
                //}
                keyContactData.SetKeyContactStruct(inputKey, newTarget);
            }
        }
    }