Files
JJBB/Assets/Project/Script/GUI/Advance/AdvanceSoulAndSoiritDescPanelCtr.cs
2024-08-23 15:49:34 +08:00

370 lines
16 KiB
C#

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using System.Collections.Generic;
using Games.Item;
using GCGame.Table;
using GCGame;
using Games.GlobeDefine;
public class AdvanceSoulAndSoiritDescPanelCtr : MonoBehaviour{
public GameDefine_Globe.ShowType showType = GameDefine_Globe.ShowType.Self;
public Transform objPos;
public Text titleText;
public Text usedCountDesc;
public List<GameObject> attrList;
public List<Text> attrNameList;
public List<Text> attrValueList;
public List<Text> attrIncValutList;
public List<GameObject> incAttrList;
public GameObject propList;
public Text propNameText;
public Text propValueText;
public Text propIncValueText;
public GameObject propInc;
public Text itemName;
public Image itemIcon;
public Image itemQuality;
public Text itemCount;
public Text combatValue;
public Text combatIncValue;
public GameObject combatInc;
public Text itemDesc;
public Text useDesc;
public GameObject _GainBtn;
private int curCommonItemId = -1;
public static AdvanceSoulAndSoiritDescPanelCtr Instance;
private void Awake()
{
Instance = this;
}
private void OnDestroy()
{
Instance = null;
}
private Dictionary<int, Dictionary<int, int>> soulDanGradeLimitCountDic = new Dictionary<int, Dictionary<int, int>>();
private Dictionary<int, Dictionary<int, int>> spiritDanGradeLimitCountDic = new Dictionary<int, Dictionary<int, int>>();
private Dictionary<int, int> spiritDanMaxLimitCountDic = new Dictionary<int, int>();
private Dictionary<int, int> soulDanMaxLimitCountDic = new Dictionary<int, int>();
void GetGaradeSoulAndSpritLimitCount()
{
soulDanGradeLimitCountDic = new Dictionary<int, Dictionary<int, int>>();
spiritDanGradeLimitCountDic = new Dictionary<int, Dictionary<int, int>>();
foreach(var advanceBase in TableManager.GetAdvanceBase().Values)
{
var advanceType = (advanceBase.Id - advanceBase.Level) / 1000 - 1;
if(soulDanGradeLimitCountDic.ContainsKey(advanceType))
{
if(!soulDanGradeLimitCountDic[advanceType].ContainsKey(advanceBase.Grade))
{
soulDanGradeLimitCountDic[advanceType].Add(advanceBase.Grade, advanceBase.SoulDanLimit);
}
}else
{
var soulLimitDic = new Dictionary<int, int>();
soulLimitDic.Add(advanceBase.Grade, advanceBase.SoulDanLimit);
soulDanGradeLimitCountDic.Add(advanceType, soulLimitDic);
}
if (spiritDanGradeLimitCountDic.ContainsKey(advanceType))
{
if (!spiritDanGradeLimitCountDic[advanceType].ContainsKey(advanceBase.Grade))
{
spiritDanGradeLimitCountDic[advanceType].Add(advanceBase.Grade, advanceBase.SpiritDanLimit);
}
}
else
{
var spiritLimitDic = new Dictionary<int, int>();
spiritLimitDic.Add(advanceBase.Grade, advanceBase.SpiritDanLimit);
spiritDanGradeLimitCountDic.Add(advanceType, spiritLimitDic);
}
if (spiritDanMaxLimitCountDic.ContainsKey(advanceType))
{
if (advanceBase.SpiritDanLimit > spiritDanMaxLimitCountDic[advanceType])
spiritDanMaxLimitCountDic[advanceType] = advanceBase.SpiritDanLimit;
}
else
{
spiritDanMaxLimitCountDic.Add(advanceType, advanceBase.SpiritDanLimit);
}
if(soulDanMaxLimitCountDic.ContainsKey(advanceType))
{
if (advanceBase.SoulDanLimit > soulDanMaxLimitCountDic[advanceType])
soulDanMaxLimitCountDic[advanceType] = advanceBase.SoulDanLimit;
}
else
{
soulDanMaxLimitCountDic.Add(advanceType, advanceBase.SoulDanLimit);
}
}
}
//danType 0.灵 1.魂
private int onceIncCombat; //当前等级使用一次增加的战力
private int _CostItemId = -1;
public void InitInfo(int baseId, int advanceType, int danType, int usedCount, Vector3 pos, GameDefine_Globe.ShowType showType = GameDefine_Globe.ShowType.Self)
{
this.showType = showType;
_CostItemId = -1;
objPos.transform.position = pos;
Tab_AdvanceBase advanceBase = TableManager.GetAdvanceBaseByID(baseId, 0);
if (advanceBase == null)
{
return;
}
if(soulDanGradeLimitCountDic.Count == 0 || spiritDanGradeLimitCountDic.Count == 0)
{
GetGaradeSoulAndSpritLimitCount();
}
Tab_AdvanceOther advanceOther = TableManager.GetAdvanceOtherByID((int)advanceType, 0);
if (advanceOther == null)
{
return;
}
GameItemContainer backPack = GameManager.gameManager.PlayerDataPool.BackPack;
onceIncCombat = advanceBase.CombatValue;
switch (danType)
{
case 1:
{
for (int index = 0; index < attrList.Count; index++)
{
attrList[index].SetActive(true);
}
propList.SetActive(false);
usedCountDesc.text = StrDictionary.GetClientDictionaryString("#{43039}", usedCount, advanceBase.SoulDanLimit, Utils.GetGradeString(advanceBase.Grade));
Tab_CommonItem commonItem = TableManager.GetCommonItemByID(advanceOther.SoulItemId, 0);
if (commonItem == null)
{
return;
}
_CostItemId = advanceOther.SoulItemId;
titleText.text = commonItem.Name;
itemName.text = commonItem.Name;
LoadAssetBundle.Instance.SetImageSprite(itemIcon, commonItem.Icon);
if (commonItem.QualityEffect > 0)
{
CommonItemContainerItem.ShowQualityEffect(true, commonItem.QualityEffect, itemIcon.transform);
}
else
{
CommonItemContainerItem.ShowQualityEffect(false, commonItem.QualityEffect, itemIcon.transform);
}
GameItem item = new GameItem();
item.DataID = commonItem.Id;
LoadAssetBundle.Instance.SetImageSprite(itemQuality, item.GetQualityFrame());
//itemCount.text = GameManager.gameManager.PlayerDataPool.BackPack.GetItemCountByDataId(item.DataID).ToString();
_GainBtn.SetActive(GameManager.gameManager.PlayerDataPool.BackPack.GetItemCountByDataId(item.DataID) <= 0);
for (int index = 0; index < attrNameList.Count; index++)
{
if (advanceOther.GetSoulIncAttrIdbyIndex(index) >= 0)
{
attrList[index].gameObject.SetActive(true);
int strId = advanceOther.GetSoulIncAttrIdbyIndex(index) + 10000;
attrNameList[index].text = StrDictionary.GetClientDictionaryString("#{" + strId + "}");
attrValueList[index].text = (advanceOther.GetSoulIncAttrValuebyIndex(index) * usedCount).ToString();
}
else
{
attrList[index].gameObject.SetActive(false);
}
}
combatInc.SetActive(true);
combatIncValue.text = advanceBase.SoulCombatCoefficient.ToString();
var nextGrade = advanceBase.Grade + 1;
if(!soulDanMaxLimitCountDic.ContainsKey(advanceType) || usedCount >= soulDanMaxLimitCountDic[advanceType])
{
for (int index = 0; index < incAttrList.Count; index++)
{
incAttrList[index].SetActive(false);
}
}else
{
for (int index = 0; index < attrIncValutList.Count; index++)
{
if (!attrList[index].activeInHierarchy)
{
continue;
}
incAttrList[index].SetActive(true);
attrIncValutList[index].text = advanceOther.GetSoulIncAttrValuebyIndex(index).ToString(); //onceIncCombat.ToString();
}
}
if (soulDanGradeLimitCountDic.ContainsKey(advanceType) && soulDanGradeLimitCountDic[advanceType].ContainsKey(nextGrade))
{
combatInc.SetActive(true);
useDesc.text = StrDictionary.GetClientDictionaryString("#{43041}", soulDanGradeLimitCountDic[advanceType][nextGrade]);
}
else
{
combatInc.SetActive(false);
useDesc.text = StrDictionary.GetClientDictionaryString("#{43046}");
}
combatValue.text = (advanceBase.SoulCombatCoefficient * usedCount).ToString();
// 当在处于他人信息界面,不显示 "已有道具数量"
if(showType == GameDefine_Globe.ShowType.Self)
{
itemCount.transform.parent.gameObject.SetActive(true);
itemCount.text = backPack.GetItemCountByDataId(commonItem.Id).ToString();
}
else
{
itemCount.transform.parent.gameObject.SetActive(false);
}
_GainBtn.SetActive(backPack.GetItemCountByDataId(commonItem.Id) <= 0);
for (int index = 0; index < attrNameList.Count; index++)
curCommonItemId = commonItem.Id;
}
break;
default:
{
for (int index = 0; index < attrList.Count; index++)
{
attrList[index].SetActive(false);
}
propList.SetActive(true);
usedCountDesc.text = StrDictionary.GetClientDictionaryString("#{43039}", usedCount, advanceBase.SpiritDanLimit, Utils.GetGradeString(advanceBase.Grade));
//设置增加的属性百分比
switch (advanceType)
{
case (int)AdvanceBase.AdvanceType.Ride:
propNameText.text = StrDictionary.GetClientDictionaryString("#{42667}") + StrDictionary.GetClientDictionaryString("#{43040}");
break;
case (int)AdvanceBase.AdvanceType.Wing:
propNameText.text = StrDictionary.GetClientDictionaryString("#{42669}") + StrDictionary.GetClientDictionaryString("#{43040}");
break;
case (int)AdvanceBase.AdvanceType.Piano:
propNameText.text = StrDictionary.GetClientDictionaryString("#{42668}") + StrDictionary.GetClientDictionaryString("#{43040}");
break;
case (int)AdvanceBase.AdvanceType.Qilinbi:
propNameText.text = StrDictionary.GetClientDictionaryString("#{42671}") + StrDictionary.GetClientDictionaryString("#{43040}");
break;
case (int)AdvanceBase.AdvanceType.Soul:
propNameText.text = StrDictionary.GetClientDictionaryString("#{42709}") + StrDictionary.GetClientDictionaryString("#{43040}");
break;
case (int)AdvanceBase.AdvanceType.Mask:
propNameText.text = StrDictionary.GetClientDictionaryString("#{42710}") + StrDictionary.GetClientDictionaryString("#{43040}");
break;
case (int)AdvanceBase.AdvanceType.Huopao:
propNameText.text = StrDictionary.GetClientDictionaryString("#{42711}") + StrDictionary.GetClientDictionaryString("#{43040}");
break;
}
Tab_CommonItem commonItem = TableManager.GetCommonItemByID(advanceOther.SpiritItemId, 0);
if(commonItem != null)
{
GameItem m_Item = new GameItem();
m_Item.DataID = commonItem.Id;
LoadAssetBundle.Instance.SetImageSprite(itemQuality, m_Item.GetQualityFrame());
}
_CostItemId = advanceOther.SpiritItemId;
titleText.text = commonItem.Name;
itemName.text = commonItem.Name;
LoadAssetBundle.Instance.SetImageSprite(itemIcon, commonItem.Icon);
if (commonItem.QualityEffect > 0)
{
CommonItemContainerItem.ShowQualityEffect(true, commonItem.QualityEffect, itemIcon.transform);
}
else
{
CommonItemContainerItem.ShowQualityEffect(false, commonItem.QualityEffect, itemIcon.transform);
}
GameItem item = new GameItem();
item.DataID = commonItem.Id;
LoadAssetBundle.Instance.SetImageSprite(itemQuality, item.GetQualityFrame());
if(spiritDanMaxLimitCountDic.ContainsKey(advanceType) && usedCount < spiritDanMaxLimitCountDic[advanceType])
{
propInc.SetActive(true);
propIncValueText.text = advanceOther.SpiritIncPercent + "%";
}
else
{
propInc.SetActive(false);
}
propValueText.text = advanceOther.SpiritIncPercent * usedCount + "%";
var nextGrade = advanceBase.Grade + 1;
if(spiritDanGradeLimitCountDic.ContainsKey(advanceType) && spiritDanGradeLimitCountDic[advanceType].ContainsKey(nextGrade))
{
combatInc.SetActive(true);
combatIncValue.text = advanceBase.SpiritCombatCoefficient.ToString();
useDesc.gameObject.SetActive(true);
useDesc.text = StrDictionary.GetClientDictionaryString("#{43041}", spiritDanGradeLimitCountDic[advanceType][nextGrade]);
}
else
{
useDesc.gameObject.SetActive(true);
combatInc.SetActive(false);
useDesc.text = StrDictionary.GetClientDictionaryString("#{43046}");
}
// 当在处于他人信息界面,不显示 "已有道具数量"
if (showType == GameDefine_Globe.ShowType.Self)
{
itemCount.transform.parent.gameObject.SetActive(true);
itemCount.text = backPack.GetItemCountByDataId(commonItem.Id).ToString();
}
else
{
itemCount.transform.parent.gameObject.SetActive(false);
}
_GainBtn.SetActive(backPack.GetItemCountByDataId(commonItem.Id) <= 0);
curCommonItemId = commonItem.Id;
combatValue.text = (advanceBase.SpiritCombatCoefficient * usedCount).ToString();
itemDesc.text = commonItem.Tips;
}
break;
}
}
public void OnGainBtnClick()
{
ItemTooltipsLogic.ShowItemTooltip(_CostItemId, ItemTooltipsLogic.ShowType.GetPath, _GainBtn.transform.position);
}
public void OnItemIconClick()
{
ItemGetPathPopRoot.Show(curCommonItemId, itemIcon.transform.position);
}
public void OnBackClick()
{
UIManager.CloseUI(UIInfo.AdvanceSoulAndSoiritDescPanel);
}
}