Files
JJBB/Assets/Project/Script/GUI/Equip/EquipEnhanceRoot.cs

760 lines
21 KiB
C#
Raw Normal View History

2024-08-23 15:49:34 +08:00
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using Games.Item;
using System.Collections.Generic;
using GCGame.Table;
public class EquipEnhanceRoot : UIControllerBase<EquipEnhanceRoot>
{
public static GameItem _DefaultSelectedItem;
public static int _DefaultSelectedPage = -1;
//private List<GameItem> curSelected = new List<GameItem>();
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<GameItem> _AllEquipList;
public void InitAllEquipList()
{
//if (_AllEquipList == null)
{
_AllEquipList = new List<GameItem>();
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<EquipEnhanceItem>((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<int> 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<int> 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);
}
/// <summary>
/// 当合成界面不显示时的合成界面红点结果
/// </summary>
/// <returns></returns>
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
}