using System; using System.Collections.Generic; using System.Runtime.Remoting.Lifetime; using Games.GlobeDefine; using Games.LogicObj; using Games.SkillModle; using GCGame; using GCGame.Table; using Module.Log; using UnityEngine; using UnityEngine.UI; using System.Collections; using Games.Item; public class FactionSkillChangeRootCtr : MonoBehaviour { public static FactionSkillChangeRootCtr Instance; private void Awake() { Instance = this; } private void OnDestroy() { Instance = null; } private int[] SkillIdx = new int[4]; //五个ID的下标 public FactionSkillBarItem _DragSkillBar { get; set; } public int _DragSkillOwnIdx { get; set; } public FactionSkillBarItem[] _SkillBarItems; public UISubScollMenu _SkillClasses; public Image _DragIcon; public SkillRootPage _SkillInfoPage; //private UserConfigData.FactionSkillSavePage _CurSkillPage; private void OnEnable() { InitSkillItems(); //初始化技能按钮 LoadFactionSkillSavePage(); _SkillClasses.Clear(); foreach (var skillClass in _MySkillInfos) { _SkillClasses.PushMenu(skillClass.Key); } _SkillClasses.ShowDefaultFirst(); OnSkillClassPage(_SkillClasses.SelectedSub1); } private int[] settingSkillIdx; private void LoadFactionSkillSavePage() { var mainPlayer = Singleton.GetInstance().MainPlayer; if (mainPlayer == null) return; settingSkillIdx = new int[4]; for (int index = 0; index < 4; index++) { bool hasFind = false; for (int _Index = 0; _Index < mainPlayer.OwnSkillInfo.Length; _Index++) { if (mainPlayer.OwnSkillInfo[_Index].SkillId == FactionChallengeCtr.Instace.curSkillIdx[index] && mainPlayer.OwnSkillInfo[_Index].SkillId != -1) { hasFind = true; settingSkillIdx[index] = _Index; } } if (!hasFind) { settingSkillIdx[index] = -1; } } for (int i = 0; i < settingSkillIdx.Length; ++i) { if (i < _SkillBarItems.Length) { _SkillBarItems[i].InitSkillBar(settingSkillIdx[i], i); } } } private Dictionary> _MySkillInfos; private SkillRootItem.SkillShowInfo _SelectedSkillShow; private void InitSkillItems() { var totleList = new List(); _MySkillInfos = new Dictionary>(); foreach (var skillInfo in Singleton.GetInstance().MainPlayer.OwnSkillInfo) { if (skillInfo.SkillLevelTable == null) continue; SkillRootItem.SkillShowInfo showInfo = new SkillRootItem.SkillShowInfo(); showInfo.SkillExTab = skillInfo.SkillExTable; if (showInfo.SkillExTab == null) continue; showInfo.SkillBase = skillInfo.SkillBaseTable; Tab_SkillLevelUp skillnext = TableManager.GetSkillLevelUpByID(skillInfo.SkillLevelTable.NextSkillId, 0); showInfo.SkillLevelUp = skillnext; totleList.Add(showInfo); } var learnList = TableManager.GetSkillLearn().Values; foreach (var tabAct in learnList) { if (tabAct.Profession != GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.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 showList = new List(); 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); } } public void OnSkillItemClick(object skillItem) { SkillRootItem.SkillShowInfo skillShowInfo = skillItem as SkillRootItem.SkillShowInfo; if (skillShowInfo == null) return; _SelectedSkillShow = skillShowInfo; { if (skillShowInfo.SkillExTab != null) { SkillTooltipsLogic.ShowSkillToolTips(skillShowInfo.SkillExTab.SkillExID, new Vector3(114, -35, 0)); } else { SkillTooltipsLogic.ShowSkillToolTips(skillShowInfo.SkillLearn.SkillId, new Vector3(114, -35, 0)); } } } public void ChangeSkillBar(int skillItemIdx) { if (_DragSkillOwnIdx < 0) return; for (int index = 0; index < settingSkillIdx.Length; index++) { //技能已经存在的情况 if (settingSkillIdx[index] == _DragSkillOwnIdx) { //目标位置ID与拖拽过来的技能ID相同 if (settingSkillIdx[skillItemIdx] == _DragSkillOwnIdx) { return; } else { //目标位置技能ID置为拖拽过来的ID settingSkillIdx[skillItemIdx] = _DragSkillOwnIdx; //将存在技能的ID置为-1 settingSkillIdx[index] = -1; } //刷新界面 UpdateSkillBarInfo(); return; } } settingSkillIdx[skillItemIdx] = _DragSkillOwnIdx; } public void SaveSkillPage() { //发送技能ID CG_USER_CHALLENGE_EQUIP_SKILL packet = (CG_USER_CHALLENGE_EQUIP_SKILL)PacketDistributed.CreatePacket(MessageID.PACKET_CG_USER_CHALLENGE_EQUIP_SKILL); var mainPlayer = Singleton.GetInstance().MainPlayer; if (mainPlayer == null) return; for (int index = 0; index < _SkillBarItems.Length; index++) { if(_SkillBarItems[index].OwnSkillIdx == -1) { packet.AddSkillId(-1); } else { packet.AddSkillId(mainPlayer.OwnSkillInfo[_SkillBarItems[index].OwnSkillIdx].SkillId); } } packet.SendPacket(); //请求一次当前的页面的配置信息包括技能配置信息 CG_REQ_USER_CHALLENGE_INFO ask = (CG_REQ_USER_CHALLENGE_INFO)PacketDistributed.CreatePacket(MessageID.PACKET_CG_REQ_USER_CHALLENGE_INFO); ask.SetFlag(1); ask.SendPacket(); } public void UpdateSkillBarInfo() { for (int i = 0; i < settingSkillIdx.Length; ++i) { if (i < _SkillBarItems.Length) { _SkillBarItems[i].InitSkillBar(settingSkillIdx[i], i); } } } public void ExChangeSkillBar(int skillItemIdx) { if (_DragSkillOwnIdx < 0) return; if (_DragSkillBar != null) { int tempIdx = settingSkillIdx[skillItemIdx]; settingSkillIdx[skillItemIdx] = _DragSkillBar.OwnSkillIdx; settingSkillIdx[_DragSkillBar.SkillItemIdx] = tempIdx; } } public void ClearSkillBar(int skillItemIdx) { if (skillItemIdx >= settingSkillIdx.Length) return; settingSkillIdx[skillItemIdx] = -1; } public void SetDragSkillIdx(SkillRootItem.SkillShowInfo showInfo) { if (showInfo == null || showInfo.SkillExTab == null) { _DragSkillOwnIdx = -1; return; } if (Singleton.GetInstance().MainPlayer == null) return; for (int i = 0; i < Singleton.GetInstance().MainPlayer.OwnSkillInfo.Length; ++i) { if (showInfo.SkillExTab.SkillExID == Singleton.GetInstance().MainPlayer.OwnSkillInfo[i].SkillId) { _DragSkillOwnIdx = i; return; } } _DragSkillOwnIdx = -1; } public void CloseWindow() { SaveSkillPage(); //把当前的技能配置存储在XML文件内 UIManager.CloseUI(UIInfo.FactionSkillChangeRoot); } }