using UnityEngine; using System.Collections; using System.Collections.Generic; using GCGame.Table; using UnityEngine.UI; public class OtherPlayerSkillInfoCtr : MonoBehaviour { public static OtherPlayerSkillInfoCtr Instance; private void Awake() { Instance = this; } private void OnDestroy() { Instance = null; } public SkillRootPage _SkillInfoPage; public UISubScollMenu _SkillClasses; private Dictionary<string, List<SkillRootItem.SkillShowInfo>> _MySkillInfos; private SkillRootItem.SkillShowInfo _SelectedSkillShow; #region skill Desc public Text _SkillName; public Text _SkillCurDesc; public Text _SkillNextDesc; public Text _LeardNeedLv; public Text _LeardNeedPreSkill; public Text _Xiuwei; public Image[] _DamageTypes; //public Image[] _DamageTypes; #endregion // 入口 // 网络包返回后,会调用此函数显示界面 public void InitSkillInfo() { InitSkillItems(); _SkillClasses.Clear(); foreach (var skillClass in _MySkillInfos) { _SkillClasses.PushMenu(skillClass.Key); } _SkillClasses.ShowDefaultFirst(); OnSkillClassPage(_SkillClasses.SelectedSub1); } private void InitSkillItems() { // 全部可学技能列表,为未分类 var totleList = new List<SkillRootItem.SkillShowInfo>(); // 分类过后的全部技能列表 _MySkillInfos = new Dictionary<string, List<SkillRootItem.SkillShowInfo>>(); var skillActives = TableManager.GetSkillActive().Values; var skillCount = 0; foreach (var skill in skillActives) { if (skill.Profession == GameManager.gameManager.OtherPlayerData.Profession) skillCount++; } // 保存玩家已经学的技能 for (int i = 0; i < GameManager.gameManager.OtherPlayerData.OwnSkillInfo.Length; ++i) { //if (skillInfo.SkillLevelTable == null) // continue; //潜规则,这两个位置默认存放试用技能 if (i == skillCount - 1 || i == skillCount - 2) continue; var skillInfo = GameManager.gameManager.OtherPlayerData.OwnSkillInfo[i]; var showInfo = new SkillRootItem.SkillShowInfo(); showInfo.SkillExTab = skillInfo.SkillExTable; if (showInfo.SkillExTab == null) continue; showInfo.SkillBase = skillInfo.SkillBaseTable; Tab_SkillLevelUp skillnext = TableManager.GetSkillLevelUpByID(skillInfo.SkillExTable.NextSkillId, 0); showInfo.SkillLevelUp = skillnext; totleList.Add(showInfo); } // 获得所有可学技能列表 var learnList = TableManager.GetSkillLearn().Values; foreach (var tabAct in learnList) { if (tabAct.Profession != GameManager.gameManager.OtherPlayerData.Profession) continue; // 获取每个技能相关信息 Tab_SkillEx skillEx = TableManager.GetSkillExByID(tabAct.SkillId, 0); Tab_SkillBase skillBase = TableManager.GetSkillBaseByID(skillEx.BaseId, 0); var skillInfo = totleList.Find((showInfo) => { if (showInfo.SkillBase.Id == skillEx.BaseId) { return true; } return false; }); if (skillInfo != null) { skillInfo.SkillLearn = tabAct; } else { SkillRootItem.SkillShowInfo showInfo = new SkillRootItem.SkillShowInfo(); showInfo.SkillLearn = tabAct; showInfo.SkillBase = skillBase; showInfo.SkillLevelUp = TableManager.GetSkillLevelUpByID(skillEx.SkillExID, 0); totleList.Add(showInfo); } } // 将已学和没学的技能,按照类型存入字典 foreach (var showInfo in totleList) { if (showInfo.SkillLearn == null) continue; if (_MySkillInfos.ContainsKey(showInfo.SkillLearn.Class)) { _MySkillInfos[showInfo.SkillLearn.Class].Add(showInfo); } else { List<SkillRootItem.SkillShowInfo> showList = new List<SkillRootItem.SkillShowInfo>(); showList.Add(showInfo); _MySkillInfos.Add(showInfo.SkillLearn.Class, showList); } } } // 技能左侧菜单点击回调 public void OnSkillClassPage(object paramObj) { string skillClass = paramObj as string; if (_MySkillInfos.ContainsKey(skillClass)) { _SkillInfoPage.InitContainer(_MySkillInfos[skillClass], OnSkillItemClick, true); _SkillInfoPage.SelectItem(_SelectedSkillShow); } } // 技能点击回调 public void OnSkillItemClick(object skillItem) { SkillRootItem.SkillShowInfo skillShowInfo = skillItem as SkillRootItem.SkillShowInfo; if (skillShowInfo == null) return; _SelectedSkillShow = skillShowInfo; InitSkillInfo(skillShowInfo); } // 显示技能详细描述 private SkillRootItem.SkillShowInfo _SelectedSkill; public void InitSkillInfo(SkillRootItem.SkillShowInfo skillShowInfo) { _SelectedSkill = skillShowInfo; _SkillName.text = skillShowInfo.SkillBase.Name; if(skillShowInfo.SkillExTab != null) { _SkillCurDesc.text = skillShowInfo.SkillExTab.SkillDesc; _SkillCurDesc.gameObject.SetActive(true); } else { _SkillCurDesc.text = ""; _SkillCurDesc.gameObject.SetActive(false); } // 技能类型 string[] skillDamageType = skillShowInfo.SkillLearn.SkillType.Split(';'); for (int i = 0; i < _DamageTypes.Length; ++i) { _DamageTypes[i].gameObject.SetActive(false); } for (int i = 0; i < skillDamageType.Length; ++i) { int index = int.Parse(skillDamageType[i]); _DamageTypes[index].gameObject.SetActive(true); } ShowLevelSkillCondition(skillShowInfo); _Xiuwei.text = StrDictionary.GetClientDictionaryString("#{2829}", GameManager.gameManager.OtherPlayerData.AbilityLevel.ToString()); } // 显示技能详细描述第二部分 private void ShowLevelSkillCondition(SkillRootItem.SkillShowInfo skillShowInfo) { if (skillShowInfo.SkillLevelUp == null) { _SkillNextDesc.text = ""; _LeardNeedLv.text = ""; _LeardNeedPreSkill.gameObject.SetActive(false); return; } var levelUpNextSkill = TableManager.GetSkillExByID(skillShowInfo.SkillLevelUp.NextSkillId, 0); if (levelUpNextSkill == null) return; if (levelUpNextSkill != null) { _SkillNextDesc.text = levelUpNextSkill.SkillDesc; } if (skillShowInfo.SkillLevelUp.Level > Singleton<ObjManager>.Instance.MainPlayer.BaseAttr.Level) { _LeardNeedLv.text = "<color=#ff1100>" + skillShowInfo.SkillLevelUp.Level.ToString() + "</color>"; } else { _LeardNeedLv.text = "<color=#5bd55b>" + skillShowInfo.SkillLevelUp.Level.ToString() + "</color>"; } var needSkill = skillShowInfo.GetNeedSkillLvUp(); if (needSkill == null) { _LeardNeedPreSkill.gameObject.SetActive(false); } else { _LeardNeedPreSkill.gameObject.SetActive(true); bool alreadyLearnNeedSkill = false; var skillBase = TableManager.GetSkillBaseByID(needSkill.BaseId, 0); foreach (var skillInfo in Singleton<ObjManager>.GetInstance().MainPlayer.OwnSkillInfo) { var skillEx = skillInfo.SkillExTable; if (skillEx == null) continue; if (skillEx.BaseId == needSkill.BaseId && skillEx.Level >= needSkill.Level) { alreadyLearnNeedSkill = true; } } string skillName = skillBase.Name + needSkill.Level.ToString() + StrDictionary.GetClientDictionaryString("#{5120}"); if (!alreadyLearnNeedSkill) { _LeardNeedPreSkill.text = "<color=#ff1100>" + skillName + "</color>"; } else { _LeardNeedPreSkill.text = "<color=#5bd55b>" + skillName + "</color>"; } } } }