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); } }
/// <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); }
/// <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(); }
/// <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; }
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; }
/// <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; }
/// <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); } } }