コード例 #1
0
    public void KeyDown(int key)
    {
        if (keyContactData == null || iPlayerState == null || iGameState == null || playerState == null)
        {
            return;
        }
        if (iGameState.GameRunType != EnumGameRunType.Unsafa && iGameState.GameRunType != EnumGameRunType.Safe)
        {
            return;
        }
        KeyContactStruct[] keyContactStructs = keyContactData.GetKeyContactStruct(key, temp => temp.keyContactType == EnumKeyContactType.Prap, iPlayerState.KeyContactDataZone);
        if (keyContactStructs.Length == 0)
        {
            return;
        }
        KeyContactStruct keyContactStruct = keyContactStructs[0];
        PlayGoods        playGoods        = playerState.PlayerAllGoods.Where(temp => temp.ID == keyContactStruct.id).FirstOrDefault();

        if (playGoods == null)
        {
            return;
        }
        //暂时这么写
        if (playGoods.GoodsInfo.EnumGoodsType == EnumGoodsType.HFYJ)
        {
            iPlayerState.EatMedicine(playGoods.ID);
        }
    }
コード例 #2
0
 /// <summary>
 /// 设置对应按键信息
 /// </summary>
 /// <param name="key">组合后的按键数字,注意不可以复合组合</param>
 /// <param name="target">对应的数据对象</param>
 /// <param name="keyContactDataZone">按键分组(默认为常规)</param>
 public void SetKeyContactStruct(int key, KeyContactStruct target, EnumKeyContactDataZone keyContactDataZone = EnumKeyContactDataZone.Normal)
 {
     if (target.key == 0)
         target.key = key;
     if (!keyContactStructs.ContainsKey(keyContactDataZone))
         keyContactStructs.Add(keyContactDataZone, new Dictionary<int, KeyContactStruct>());
     if (keyContactStructs[keyContactDataZone].ContainsKey(key))
         keyContactStructs[keyContactDataZone][key] = target;
     else keyContactStructs[keyContactDataZone].Add(key, target);
 }
コード例 #3
0
    /// <summary>
    /// 通过按键获取对应按键信息的数组
    /// </summary>
    /// <param name="key">组合后的按键数字</param>
    /// <param name="selecter">选择器</param>
    /// <param name="keyContactDataZone">按键分组(默认为常规)</param>
    /// <returns></returns>
    public KeyContactStruct[] GetKeyContactStruct(int key, Func<KeyContactStruct, bool> selecter = null, EnumKeyContactDataZone keyContactDataZone = EnumKeyContactDataZone.Normal)
    {
        Func<int, KeyContactStruct> GetSpecificTarget = (_key) =>
        {
            if (!keyContactStructs.ContainsKey(keyContactDataZone))
                keyContactStructs.Add(keyContactDataZone, new Dictionary<int, KeyContactStruct>());
            if (keyContactStructs[keyContactDataZone].ContainsKey(_key))
                return keyContactStructs[keyContactDataZone][key];
            else
            {
                KeyContactStruct tempKeyContactStruct = new KeyContactStruct();
                tempKeyContactStruct.keyContactType = EnumKeyContactType.None;
                tempKeyContactStruct.id = -1;
                tempKeyContactStruct.key = _key;
                tempKeyContactStruct.name = "";
                return tempKeyContactStruct;
            }
        };

        List<KeyContactStruct> tempKeyContactStructs = new List<KeyContactStruct>();
        if (key >= (int)EnumInputType.Start)//功能键
        {
            tempKeyContactStructs.Add(GetSpecificTarget(key));
        }
        else
        {
            //表示本功能键 除了L1 L2 R1 R2 左右摇杆外的其他键
            int baseFunctionKey = key % 16;
            //附加功能键 L1 L2 R1 R2
            int addFunctionKey = key - baseFunctionKey;
            bool l1 = ((addFunctionKey / L1) % 2) == 1;//是否按下了L1键
            bool r1 = ((addFunctionKey / R1) % 2) == 1;//是否按下了R1键
            bool l2 = ((addFunctionKey / L2) % 2) == 1;//是否按下了L2键
            bool r2 = ((addFunctionKey / R2) % 2) == 1;//是否按下了R2键

            if (l1)
                tempKeyContactStructs.Add(GetSpecificTarget(L1 + baseFunctionKey));
            if (r1)
                tempKeyContactStructs.Add(GetSpecificTarget(R1 + baseFunctionKey));
            if (l2)
                tempKeyContactStructs.Add(GetSpecificTarget(L2 + baseFunctionKey));
            if (r2)
                tempKeyContactStructs.Add(GetSpecificTarget(R2 + baseFunctionKey));
            if (!l1 && !l2 && !r1 && !r2)
                tempKeyContactStructs.Add(GetSpecificTarget(baseFunctionKey));
            tempKeyContactStructs.RemoveAll(temp => temp.keyContactType == EnumKeyContactType.None);
        }
        if (selecter != null)
            tempKeyContactStructs.RemoveAll(temp => !selecter(temp));
        return tempKeyContactStructs.ToArray();
    }
コード例 #4
0
 /// <summary>
 /// 选择当前项
 /// </summary>
 private void SelectAction()
 {
     if (nowKeySettingLattice)
     {
         //设置当前框内的显示图片
         if (nowKeySettingListItem && nowKeySettingListItem.value != null)
         {
             KeyContactStruct keyContactStruct = (KeyContactStruct)nowKeySettingListItem.value;
             nowKeySettingLattice.keyLatticeType = keyContactStruct.keyContactType;
             nowKeySettingLattice.id             = keyContactStruct.id;
         }
         else
         {
             nowKeySettingLattice.keyLatticeType = EnumKeyContactType.None;
             nowKeySettingLattice.id             = 0;
         }
         nowKeySettingLattice.InitShow();
     }
     //最后的设置
     selectTargetPanel.gameObject.SetActive(false);
     //状态改为格子状态
     enumKeySettingType = EnumKeySettingType.Lattice;
 }
コード例 #5
0
    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;
    }
コード例 #6
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;
    }
コード例 #7
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);
            }
        }
    }