using UnityEngine; using UnityEngine.UI; using System.Collections; using Games.Item; using System.Collections.Generic; using GCGame.Table; public class EquipEnhanceRoot : UIControllerBase { public static GameItem _DefaultSelectedItem; public static int _DefaultSelectedPage = -1; //private List curSelected = new List(); public static void ShowEnhanceRoot(GameItem showItem, int showPage = 0) { Hashtable hashtable = new Hashtable(); hashtable.Add("ShowItem", showItem); hashtable.Add("ShowPage", showPage); _DefaultSelectedItem = showItem; _DefaultSelectedPage = showPage; UIManager.ShowUI(UIInfo.EquipEnhance, ShowUIOver, hashtable); } public static void ShowEnhanceRootStr(string pageStr) { int page = int.Parse(pageStr); Hashtable hashtable = new Hashtable(); hashtable.Add("ShowPage", page); _DefaultSelectedPage = page; UIManager.ShowUI(UIInfo.EquipEnhance, ShowUIOver, hashtable); } public static void ShowUIOver(bool isSucess, object param) { Hashtable hash = param as Hashtable; GameItem equipItem = (GameItem)hash["ShowItem"]; int showPage = (int)hash["ShowPage"]; _DefaultSelectedItem = equipItem; //EquipEnhanceRoot.Instance()._TagPanel.ShowPage(showPage); } void Awake() { SetInstance(this); } void OnDestory() { SetInstance(null); } // Use this for initialization void OnEnable() { UIManager.ShowUI(UIInfo.MoneyInfoPanel); InitAllEquipList(); if (_DefaultSelectedPage >= 0) { TryOpen(_DefaultSelectedPage); OnTabPage(_DefaultSelectedPage); } else { // 默认打开强化界面 TryOpen(1); OnTabPage(1); } UpdateQianghuaTips(); UpdateXiangqianTips(); UpdateHeChengTips(); UpdateFrenzyRedTips(); if (EquipAutoUseLogic.Instance() != null) { EquipAutoUseLogic.Instance().CloseWindow(); } UpdateTagState(); } private void OnDisable() { UIManager.CloseUI(UIInfo.MoneyInfoPanel); } // 更新切页按钮的解锁情况 private void UpdateTagState() { Tab_FunctionOpen frenzyTab = TableManager.GetFunctionOpenByID(16, 0); bool frenzyLock = GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Level < frenzyTab.OpenLevel; lockedFrenzyBtn.SetActive(frenzyLock); frenzyToggle.SetActive(!frenzyLock); Tab_FunctionOpen xiLianTab = TableManager.GetFunctionOpenByID(17, 0); bool xiLianLock = GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Level < xiLianTab.OpenLevel; lockedXiLianBtn.SetActive(xiLianLock); xiLianToggle.SetActive(!xiLianLock); Tab_FunctionOpen xiangQianTab = TableManager.GetFunctionOpenByID(18, 0); bool xiangQianLock = GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Level < xiangQianTab.OpenLevel; lockedXiangQianBtn.SetActive(xiangQianLock); xiangQianToggle.SetActive(!xiangQianLock); } //public void ShowFrenzyPanel() //{ // Tab_FunctionOpen tab = TableManager.GetFunctionOpenByID(16, 0); // if (GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Level >= tab.OpenLevel) // { // lockedFrenzyBtn.SetActive(false); // frenzyToggle.SetActive(true); // _TagPanel.ShowPage(3); // } // else // { // lockedFrenzyBtn.SetActive(true); // frenzyToggle.SetActive(false); // OnLockFrenzyClick(); // } //} public void OnLockFrenzyClick() { Tab_FunctionOpen tab = TableManager.GetFunctionOpenByID(16, 0); GUIData.AddNotifyData(StrDictionary.GetClientDictionaryString("#{5407}", tab.OpenLevel)); } public void OnLockXiLianClick() { Tab_FunctionOpen tab = TableManager.GetFunctionOpenByID(17, 0); GUIData.AddNotifyData(StrDictionary.GetClientDictionaryString("#{5407}", tab.OpenLevel)); } public void OnLockXiangQianClick() { Tab_FunctionOpen tab = TableManager.GetFunctionOpenByID(18, 0); GUIData.AddNotifyData(StrDictionary.GetClientDictionaryString("#{5407}", tab.OpenLevel)); } public void CloseWindow() { _AllEquipList = null; UIManager.CloseUI(UIInfo.EquipEnhance); _DefaultSelectedItem = null; _DefaultSelectedPage = -1; EquipAutoUseLogic.AutoRelease(); } public void OnTabPage(int page) { } // 0 - 洗练 // 1 - 强化 // 2 - 镶嵌 // 3 - 狂化 // 4 - 合成 public bool TryOpen(int pageIndex) { Tab_FunctionOpen tab = null; switch (pageIndex) { case 0: tab = TableManager.GetFunctionOpenByID(17); break; case 2: tab = TableManager.GetFunctionOpenByID(18); break; case 3: tab = TableManager.GetFunctionOpenByID(16); break; } if (tab != null && tab.OpenLevel > GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Level) { switch(pageIndex) { case 0: OnLockXiLianClick(); break; case 2: OnLockXiangQianClick(); break; case 3: OnLockFrenzyClick(); break; } return false; } else { EquipEnhanceRoot.Instance()._TagPanel.ShowPage(pageIndex); return true; } } public UITagPanel _TagPanel; public EquipEnhanceContainer _EquipContainer; public GameObject lockedXiLianBtn; public GameObject xiLianToggle; public GameObject lockedXiangQianBtn; public GameObject xiangQianToggle; public GameObject lockedFrenzyBtn; public GameObject frenzyToggle; public List _AllEquipList; public void InitAllEquipList() { //if (_AllEquipList == null) { _AllEquipList = new List(); var equipList = GameManager.gameManager.PlayerDataPool.EquipPack.GetList(); foreach (var equipItem in equipList) { if (equipItem.IsValid()) _AllEquipList.Add(equipItem); } //var backPackItems = GameManager.gameManager.PlayerDataPool.BackPack.GetList(); //foreach (var backPackItem in backPackItems) //{ // if (backPackItem.IsValid() && backPackItem.IsEquipMent()) // { // _AllEquipList.Add(backPackItem); // } //} //_AllEquipList.Sort((equip1, equip2) => //{ // if (equip1.IsPlayerEquiped() && !equip2.IsPlayerEquiped()) // return -1; // else if (!equip1.IsPlayerEquiped() && equip2.IsPlayerEquiped()) // return 1; // else // return 0; //}); } } public bool RefreshItems() { bool refreshOk = true; _EquipContainer.ForeachActiveItem((enhanceItem) => { refreshOk |= enhanceItem.RefreshEqupItem(); }); return refreshOk; } public void OnBtnXilianHelp() { MessageHelpLogic.ShowHelpMessage(3); } #region equip qianhua tips public static bool CanEquipEnhanceRedTips() { if (_SelectedQianghuaItem != null) return true; if (_SelectedXiangqianItem != null) return true; if (HasAnyCanHeCheng == true) return true; if (EquipFrenzy.HasAnyFrenzy) return true; return false; } public static void UpdateFucntionPanel() { if (CanEquipEnhanceRedTips()) { RedTipPoint.RedPointStateChange(RedTipPoint.PointType.Equip, true); } else { RedTipPoint.RedPointStateChange(RedTipPoint.PointType.Equip,false); } } public enum QIANGHUA_TIP { NONE, QIANGHUA, BUZHUI, } private static GameItem _SelectedQianghuaItem = null; public GameObject _EquipEnhanceTip; public static bool CanAnyEquipQianhua() { var selectItem = GetQianghuaSelectItem(); return selectItem != null; } public static QIANGHUA_TIP CanEquipQianhua(GameItem equipItem) { if (!equipItem.IsValid()) return QIANGHUA_TIP.NONE; // 获取极限等级,极限等级前才考虑可强化 int maxLv = TableManager.GetEquipEnchanceRandRate().Count; if (equipItem.StrengthLevel < maxLv) { var qianghua = equipItem.GetEquipStarRate(equipItem.StrengthLevel); if ((int)qianghua.x == (int)qianghua.z) { int qianghuaLv = equipItem.StrengthLevel + 1; var qianhuaTab = TableManager.GetEquipEnchanceRandRateByID(qianghuaLv, 0); var itemCount = GameManager.gameManager.PlayerDataPool.BackPack.GetItemCountByDataId(qianhuaTab.ConsumeSubType); if (qianhuaTab.PlayerLevel <= GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Level && itemCount >= qianhuaTab.ConsumeNum) { return QIANGHUA_TIP.QIANGHUA; } } } for (int i = 1; i < equipItem.StrengthLevel + 1; ++i) { var qianghua = equipItem.GetEquipStarRate(i); if ((int)qianghua.x == (int)qianghua.z) continue; var buzhui = TableManager.GetEquipEnchanceRandRateByID(i, 0); var buzhuiItemCnt = GameManager.gameManager.PlayerDataPool.BackPack.GetItemCountByDataId(buzhui.ConsumeSubType); if (buzhuiItemCnt >= buzhui.ConsumeNum) { return QIANGHUA_TIP.BUZHUI; } } return QIANGHUA_TIP.NONE; } public static GameItem GetQianghuaSelectItem() { var equipList = GameManager.gameManager.PlayerDataPool.EquipPack.GetList(); GameItem selectItem = null; foreach (var equipItem in equipList) { var qianghuaTip = CanEquipQianhua(equipItem); if (qianghuaTip == QIANGHUA_TIP.QIANGHUA) { selectItem = equipItem; break; } else if (qianghuaTip == QIANGHUA_TIP.BUZHUI && selectItem == null) { selectItem = equipItem; break; } } _SelectedQianghuaItem = selectItem; if(EquipEnhanceRoot.Instance()) EquipEnhanceRoot.Instance().UpdateQianghuaTips(); UpdateFucntionPanel(); return selectItem; } public static void ShowEquipQianhua() { if (_SelectedQianghuaItem != null) { ShowEnhanceRoot(_SelectedQianghuaItem, 1); } } public void UpdateQianghuaTips() { if (_SelectedQianghuaItem == null) { _EquipEnhanceTip.SetActive(false); } else { _EquipEnhanceTip.SetActive(true); } } #endregion #region private static GameItem _SelectedXiangqianItem = null; public GameObject _EquipXiangqianTip; public static bool CanAnyEquipXiangqian() { // 功能开启等级判断 var tab = TableManager.GetFunctionOpenByID(18); if (tab != null) { if (GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Level < tab.OpenLevel) { return false; } } var selectItem = GetXiangqianSelectItem(); return selectItem != null; } public static bool CanEquipXiangqian(GameItem equipItem) { if (!equipItem.IsValid()) return false; if (!equipItem.IsPlayerEquiped()) return false; bool hasEmptyPos = false; var playerLevel = ObjManager.Instance.MainPlayer.BaseAttr.Level; var gemOpenTabs = TableManager.GetEquipPunchConsume(); for (int i = 0; i < equipItem.GemItems.Count; ++i) { var gemOpen = TableManager.GetEquipPunchConsumeByID(i); if (gemOpen.OpenLevel <= playerLevel && !equipItem.GemItems[i].IsValid()) { hasEmptyPos = true; } } if (!hasEmptyPos) { return false; } bool hasGemPos = false; var itemList = ItemTool.ItemFilter(GameManager.gameManager.PlayerDataPool.BackPack, 3, 5, false); for(int i = 0; i< itemList.Count; ++i) { List gemTypes = EquipGemPutOnPanel.GetGemSlots(itemList[i].DataID); if (!gemTypes.Contains(equipItem.GetSubClass())) { continue; } int curDataId = itemList[i].DataID; var gemProp = GemData.GetGemPropTab(itemList[i].DataID, 1, 0); var sameItem = equipItem.GemItems.Find((equipedGem) => { var gemPropTab = equipedGem.GetGemPropTab(0); if (gemPropTab == null) return false; if (gemPropTab.PropID[0] == gemProp.PropID[0]) { return true; } return false; }); if (sameItem != null) { continue; } hasGemPos = true; break; } if (hasGemPos) { return true; } return false; } //可以镶嵌替换 public static bool CanEquipXiangqianReplace(GameItem equipItem,GemData gemData) { if (!equipItem.IsValid()) return false; if (!equipItem.IsPlayerEquiped()) return false; bool hasEmptyPos = false; var playerLevel = ObjManager.Instance.MainPlayer.BaseAttr.Level; var gemOpenTabs = TableManager.GetEquipPunchConsume(); for (int i = 0; i < equipItem.GemItems.Count; ++i) { var gemOpen = TableManager.GetEquipPunchConsumeByID(i); if (gemOpen.OpenLevel <= playerLevel && !equipItem.GemItems[i].IsValid()) { hasEmptyPos = true; } } bool hasGemPos = false; var itemList = ItemTool.ItemFilter(GameManager.gameManager.PlayerDataPool.BackPack, 3, 5, false); for (int i = 0; i < itemList.Count; ++i) { List gemTypes = EquipGemPutOnPanel.GetGemSlots(itemList[i].DataID); if (!gemTypes.Contains(equipItem.GetSubClass())) { continue; } Tab_GemProp curGemData = TableManager.GetGemPropByID(gemData.DataID, 0); Tab_GemProp nextGemData = TableManager.GetGemPropByID(itemList[i].DataID, 0); if ((nextGemData.PropID[0] == curGemData.PropID[0]) && (nextGemData.CombatValue > curGemData.CombatValue)) { hasGemPos = true; break; } } if (hasGemPos) { return true; } return false; } public static GameItem GetXiangqianSelectItem() { var equipList = GameManager.gameManager.PlayerDataPool.EquipPack.GetList(); _SelectedXiangqianItem = null; foreach (var equipItem in equipList) { if (!equipItem.IsValid()) continue; if (CanEquipXiangqian(equipItem) || equipItem.IsCanAnyGemLvUp() || equipItem.IsCanAnyGemQualityLvUp()) { _SelectedXiangqianItem = equipItem; break; } } if (EquipEnhanceRoot.Instance()) EquipEnhanceRoot.Instance().UpdateXiangqianTips(); UpdateFucntionPanel(); return _SelectedXiangqianItem; } public void UpdateXiangqianTips() { if (_SelectedXiangqianItem == null) { _EquipXiangqianTip.SetActive(false); } else { _EquipXiangqianTip.SetActive(true); } } public GameObject _EquipHeChengTip; private static bool HasAnyCanHeCheng = false; public void UpdateHeChengTips() { _EquipHeChengTip.SetActive(HasAnyCanHeCheng); } /// /// 当合成界面不显示时的合成界面红点结果 /// /// public static void HeChengRedTipsUpdate() { // 功能开启等级判断 var tab = TableManager.GetFunctionOpenByID(18); if (tab != null) { if (GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Level < tab.OpenLevel) { return; } } // 存储所有可合成的物体 var tabCombineItem = TableManager.GetItemCombine().Values; foreach (var tabCombineTab in tabCombineItem) { if (tabCombineTab.ShowTips == 0) continue; var isCanCombine = true; for (int j = 0; j < tabCombineTab.getNeedNumCount(); ++j) { if (tabCombineTab.GetSrcItemIDbyIndex(j) > 0) { var materialCnt = GameManager.gameManager.PlayerDataPool.BackPack.GetItemCountByDataId(tabCombineTab.GetSrcItemIDbyIndex(j)); if (materialCnt < tabCombineTab.GetNeedNumbyIndex(j)) { isCanCombine = false; } } } if (isCanCombine) { HasAnyCanHeCheng = true; if (Instance()) Instance().UpdateHeChengTips(); UpdateFucntionPanel(); return; } } HasAnyCanHeCheng = false; var instance = Instance(); if (instance) instance.UpdateHeChengTips(); UpdateFucntionPanel(); } #endregion #region combine //private static GameItem _SelectedCombatItem = null; //public GameObject _EquipCombatTip; //public static bool CanAnyCombat() //{ // var selectItem = GetCombatSelectItem(); // return selectItem != null; //} //public static bool CanItemCombat(Tab_ItemCombine combineItem) //{ // for (int i = 0; i < combineItem.getNeedNumCount(); ++i) // { // if (combineItem.GetSrcItemIDbyIndex(i) > 0) // { // var materialCnt = GameManager.gameManager.PlayerDataPool.BackPack.GetItemCountByDataId(combineItem.GetSrcItemIDbyIndex(i)); // if (materialCnt < combineItem.GetNeedNumbyIndex(i)) // { // return false; // } // } // } // return true; //} //public static GameItem GetXiangqianSelectItem() //{ // var equipList = GameManager.gameManager.PlayerDataPool.EquipPack.GetList(); // _SelectedXiangqianItem = null; // foreach (var equipItem in equipList) // { // if (CanEquipXiangqian(equipItem)) // { // _SelectedXiangqianItem = equipItem; // break; // } // } // if (EquipEnhanceRoot.Instance()) // EquipEnhanceRoot.Instance().UpdateXiangqianTips(); // UpdateFucntionPanel(); // return _SelectedXiangqianItem; //} //public void UpdateXiangqianTips() //{ // if (_SelectedXiangqianItem == null) // { // _EquipXiangqianTip.SetActive(false); // } // else // { // _EquipXiangqianTip.SetActive(true); // } //} #endregion #region FrenzyRedTip public GameObject frenzyRedTips; public static void UpdateFrenzyRedTips() { EquipFrenzy.CheckAnyFrenzy(); if (EquipEnhanceRoot.Instance() != null) { EquipEnhanceRoot.Instance().frenzyRedTips.SetActive(EquipFrenzy.HasAnyFrenzy); } UpdateFucntionPanel(); } public static bool CanEquipFrenzy(GameItem equipItem) { var fenzyTabs = TableManager.GetEquipFrenzy().Values; foreach (var kv in fenzyTabs) { if ((int)equipItem.GetQuality() == kv.Quality && equipItem.GetMinLevelRequire() >= kv.EquipLevelMin && equipItem.GetMinLevelRequire() <= kv.EquipLevelMax) { return true; } } return false; } public static bool CanEquipFrenzyMat(GameItem equipItem) { if (equipItem.IsFrenzy) return false; var fenzyTabs = TableManager.GetEquipFrenzy().Values; foreach (var kv in fenzyTabs) { if ((int)equipItem.GetQuality() == kv.Quality && equipItem.GetMinLevelRequire() >= kv.EquipLevelMin && equipItem.GetMinLevelRequire() <= kv.EquipLevelMax) { if (GameManager.gameManager.PlayerDataPool.BackPack.GetItemCountByDataId(kv.FrenzyConsumeSubType) >= kv.FrenzyConsumeNum) { return true; } } } return false; } #endregion }