451 lines
16 KiB
C#
451 lines
16 KiB
C#
using Games.LogicObj;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
using System.Collections;
|
|
using GCGame;
|
|
using Module.Log;
|
|
using Games.GlobeDefine;
|
|
using System.Collections.Generic;
|
|
using System;
|
|
using GCGame.Table;
|
|
using Games.Events;
|
|
|
|
public class HeartSoul : MonoBehaviour
|
|
{
|
|
public UIImgText _Power;
|
|
public UIContainerBase m_AddAttrs;
|
|
public Text PulsLevel;
|
|
public Slider HeartAllLevelSlider;
|
|
public GameObject SliderEffect;
|
|
public GameObject UpClassBtn;
|
|
public GameObject UpClassPayObj;
|
|
public Image PayQuilityIcon;
|
|
public Image PayIcon;
|
|
public Text PayName;
|
|
public GameObject GetButtonObj;
|
|
|
|
public Image CurrSelectIcon;
|
|
public Text curSlider;
|
|
public Text godHas;
|
|
|
|
public GameObject ChildWnd;
|
|
public GameObject InputFieldWnd;
|
|
public Text CurPulsLevel;
|
|
public GameObject PulsChildWnd1;
|
|
public GameObject PulsTitle;
|
|
public GameObject PulsChildWnd2;
|
|
public GameObject PulsAddAttr;
|
|
public GameObject PulsNeedAttr;
|
|
|
|
public Text CostItemTip;
|
|
public Text CostItemNum;
|
|
|
|
public Image[] Points;
|
|
public GameObject PointChildObj;
|
|
private List<HeartItem> HeartItems = new List<HeartItem>();
|
|
|
|
int m_MaxAllLevelCount = 0;
|
|
int m_HeartLevelCount = 0;
|
|
int m_CurrSelectHeartID = -1;
|
|
|
|
private void Awake()
|
|
{
|
|
HeartItems.Clear();
|
|
for (int i=0;i<Points.Length;i++)
|
|
{
|
|
GameObject newPoint = GameObject.Instantiate(PointChildObj) as GameObject;
|
|
if(newPoint!=null)
|
|
{
|
|
newPoint.SetActive(true);
|
|
newPoint.transform.SetParent(Points[i].gameObject.transform);
|
|
newPoint.transform.localPosition = Vector3.zero;
|
|
newPoint.transform.localScale = Vector3.one;
|
|
|
|
HeartItem heartItem = newPoint.EnsureComponent<HeartItem>();
|
|
HeartItems.Add(heartItem);
|
|
}
|
|
}
|
|
}
|
|
|
|
void OnEnable()
|
|
{
|
|
ReqGetHeartList cmd2 = new ReqGetHeartList();
|
|
cmd2.flag = 1;
|
|
cmd2.SendMsg();
|
|
}
|
|
|
|
public static int GetLearnMaxLevel(int heartID)
|
|
{
|
|
int count = 0;
|
|
var heartLevels = TableManager.GetHeartLevel().Values;
|
|
foreach (var heartLevel in heartLevels)
|
|
{
|
|
if (heartLevel.Level != 0
|
|
&& heartLevel.HeartID == heartID
|
|
&& heartLevel.ClassID == MeridiaSoulData.Instance.HeartClass)
|
|
count++;
|
|
}
|
|
return count;
|
|
}
|
|
|
|
public Tab_HeartPulse GetPulseTab(int level)
|
|
{
|
|
var pulses = TableManager.GetHeartPulse().Values;
|
|
foreach (var pulse in pulses)
|
|
if (pulse.Level == level)
|
|
return pulse;
|
|
return null;
|
|
}
|
|
|
|
public void Show()
|
|
{
|
|
_Power.text = MeridiaSoulData.Instance.HeartTotlePower.ToString();
|
|
PulsLevel.text = StrDictionary.GetClientDictionaryString("#{46008}", MeridiaSoulData.Instance.PulseLevel);
|
|
|
|
Dictionary<int, MeridiaSoul.BloodVeinAttrData> attrLists = new Dictionary<int, MeridiaSoul.BloodVeinAttrData>();
|
|
List<MeridiaSoul.BloodVeinAttrData> showLists = null;
|
|
m_MaxAllLevelCount = 0;
|
|
m_HeartLevelCount = 0;
|
|
var hearts = TableManager.GetHeartAttr().Values;
|
|
var id = 0;
|
|
foreach (var heart in hearts)
|
|
{
|
|
if (HeartItems.Count > id)
|
|
HeartItems[id].InitData(heart);
|
|
id++;
|
|
int heartLevel = MeridiaSoulData.Instance.GetHeartLevel(heart.Id);
|
|
int HeartLevelID = heart.Id * 1000000 + MeridiaSoulData.Instance.HeartClass * 1000 + heartLevel;
|
|
Tab_HeartLevel HeartLevelTab = TableManager.GetHeartLevelByID(HeartLevelID, 0);
|
|
if (HeartLevelTab == null)
|
|
continue;
|
|
Tab_HeartLevel HeartLevelTabNext = TableManager.GetHeartLevelByID(HeartLevelID + 1, 0);
|
|
int count = GetLearnMaxLevel(heart.Id);
|
|
m_MaxAllLevelCount += count;
|
|
m_HeartLevelCount += MeridiaSoulData.Instance.GetHeartLevel(heart.Id);
|
|
|
|
MeridiaSoul.BloodVeinAttrData data = new MeridiaSoul.BloodVeinAttrData();
|
|
if (HeartLevelTabNext != null)
|
|
data.ProId = HeartLevelTabNext.AttrId1;
|
|
else
|
|
data.ProId = HeartLevelTab.AttrId1;
|
|
data.ProVal = 0;
|
|
if (data.ProId != -1)
|
|
{
|
|
AttrData attrData = MeridiaSoulData.Instance.GetOneHeartAddAttr(data.ProId);
|
|
if (attrData != null)
|
|
data.ProVal = attrData.attrValue;
|
|
if (attrLists.ContainsKey(data.ProId))
|
|
{
|
|
data.ProVal += attrLists[data.ProId].ProVal;
|
|
}
|
|
attrLists[data.ProId] = data;
|
|
}
|
|
}
|
|
Tab_HeartPulse heartPuls = GetPulseTab(MeridiaSoulData.Instance.PulseLevel);
|
|
Tab_HeartPulse heartPulsNext1 = GetPulseTab(MeridiaSoulData.Instance.PulseLevel+1);
|
|
if (heartPulsNext1 != null)
|
|
heartPuls = heartPulsNext1;
|
|
if(heartPuls!=null)
|
|
{
|
|
for (var i = 0; i < heartPuls.getAttrIdCount(); i++)
|
|
{
|
|
int attrID = heartPuls.GetAttrIdbyIndex(i);
|
|
MeridiaSoul.BloodVeinAttrData data = new MeridiaSoul.BloodVeinAttrData();
|
|
data.ProVal = 0;
|
|
data.ProId = attrID;
|
|
if (attrID != -1)
|
|
{
|
|
AttrData attrData = MeridiaSoulData.Instance.GetOnePulseAddAttr(attrID);
|
|
if (attrData != null)
|
|
data.ProVal = attrData.attrValue;
|
|
if (attrLists.ContainsKey(data.ProId))
|
|
{
|
|
data.ProVal += attrLists[data.ProId].ProVal;
|
|
}
|
|
attrLists[data.ProId] = data;
|
|
}
|
|
}
|
|
}
|
|
showLists = new List<MeridiaSoul.BloodVeinAttrData>(attrLists.Values);
|
|
m_AddAttrs.SetShowItemFinishCallFun(ShowAddAttrOver);
|
|
m_AddAttrs.InitContentItem(showLists, null);
|
|
if(m_HeartLevelCount>= m_MaxAllLevelCount)
|
|
{
|
|
ShowUpClass();
|
|
}
|
|
else
|
|
{
|
|
UpClassPayObj.SetActive(false);
|
|
UpClassBtn.SetActive(false);
|
|
CostItemTip.gameObject.SetActive(false);
|
|
}
|
|
}
|
|
|
|
public bool IsMaxLevel(int heartID)
|
|
{
|
|
int HeartLevelID = heartID * 1000000 + MeridiaSoulData.Instance.HeartClass * 1000 + MeridiaSoulData.Instance.GetHeartLevel(heartID);
|
|
Tab_HeartLevel HeartLevelTabNext = TableManager.GetHeartLevelByID(HeartLevelID + 1, 0);
|
|
if (HeartLevelTabNext == null)
|
|
return true;
|
|
return false;
|
|
}
|
|
|
|
public void ShowAddAttrOver()
|
|
{
|
|
var hearts = TableManager.GetHeartAttr().Values;
|
|
var index = -1;
|
|
var i = 0;
|
|
foreach (var heart in hearts)
|
|
{
|
|
if (heart.Id == m_CurrSelectHeartID && IsMaxLevel(heart.Id) == false)
|
|
{
|
|
index = i;
|
|
break;
|
|
}
|
|
if (IsMaxLevel(heart.Id) == false && index == -1)
|
|
index = i;
|
|
i++;
|
|
}
|
|
if (index == -1)
|
|
index = 0;
|
|
SelectOneHeart(index);
|
|
}
|
|
|
|
public void Click_ItemToolTip()
|
|
{
|
|
Tab_HeartClass heartClass = TableManager.GetHeartClassByID(MeridiaSoulData.Instance.HeartClass, 0);
|
|
if (heartClass == null)
|
|
return;
|
|
if (heartClass.ConsumeType != 3)
|
|
return;
|
|
Tab_CommonItem commonItem = TableManager.GetCommonItemByID(heartClass.ConsumeSubType, 0);
|
|
if (commonItem == null)
|
|
return;
|
|
ItemTooltipsLogic.ShowItemTooltip(heartClass.ConsumeSubType, ItemTooltipsLogic.ShowType.Info, transform.position);
|
|
}
|
|
|
|
public void GetItem()
|
|
{
|
|
Tab_HeartClass heartClass = TableManager.GetHeartClassByID(MeridiaSoulData.Instance.HeartClass, 0);
|
|
if (heartClass == null)
|
|
return;
|
|
if (heartClass.ConsumeType != 3)
|
|
return;
|
|
Tab_CommonItem commonItem = TableManager.GetCommonItemByID(heartClass.ConsumeSubType, 0);
|
|
if (commonItem == null)
|
|
return;
|
|
ItemTooltipsLogic.ShowItemTooltip(commonItem.Id, ItemTooltipsLogic.ShowType.GetPath, transform.position);
|
|
}
|
|
|
|
public void ShowUpClass()
|
|
{
|
|
Tab_HeartClass heartClass = TableManager.GetHeartClassByID(MeridiaSoulData.Instance.HeartClass, 0);
|
|
Tab_HeartClass heartClassNext = TableManager.GetHeartClassByID(MeridiaSoulData.Instance.HeartClass + 1, 0);
|
|
if (heartClassNext == null)
|
|
{
|
|
CostItemTip.gameObject.SetActive(true);
|
|
CostItemTip.text = StrDictionary.GetClientDictionaryString("#{47409}");
|
|
UpClassPayObj.SetActive(false);
|
|
return;
|
|
}
|
|
if (heartClass == null)
|
|
return;
|
|
if (heartClass.ConsumeType != 3)
|
|
return;
|
|
Tab_CommonItem commonItem = TableManager.GetCommonItemByID(heartClass.ConsumeSubType, 0);
|
|
if (commonItem == null)
|
|
return;
|
|
UpClassPayObj.SetActive(true);
|
|
UpClassBtn.SetActive(true);
|
|
LoadAssetBundle.Instance.SetImageSprite(PayIcon,commonItem.Icon);
|
|
LoadAssetBundle.Instance.SetImageSprite(PayQuilityIcon, Utils.GetItemQualityFrame(commonItem));
|
|
if (commonItem.QualityEffect > 0)
|
|
{
|
|
CommonItemContainerItem.ShowQualityEffect(true, commonItem.QualityEffect, PayIcon.transform);
|
|
}
|
|
else
|
|
{
|
|
CommonItemContainerItem.ShowQualityEffect(false, commonItem.QualityEffect, PayIcon.transform);
|
|
}
|
|
|
|
int has = GameManager.gameManager.PlayerDataPool.BackPack.GetItemCountByDataId(heartClass.ConsumeSubType);
|
|
PayName.text = commonItem.Name;
|
|
if (heartClass.ConsumeValue > has)
|
|
{
|
|
CostItemNum.text = StrDictionary.GetClientDictionaryString("#{47410}", string.Format("<color=#ab423cff>{0}</color>/{1}", has, heartClass.ConsumeValue));
|
|
GetButtonObj.SetActive(true);
|
|
}
|
|
else
|
|
{
|
|
CostItemNum.text = StrDictionary.GetClientDictionaryString("#{47410}", string.Format("<color=#21f461ff>{0}</color>/{1}", has, heartClass.ConsumeValue));
|
|
GetButtonObj.SetActive(false);
|
|
}
|
|
CostItemTip.gameObject.SetActive(true);
|
|
if (MeridiaSoulData.Instance.HeartClass == 1)
|
|
CostItemTip.text = StrDictionary.GetClientDictionaryString("#{47407}");
|
|
if (MeridiaSoulData.Instance.HeartClass == 2)
|
|
CostItemTip.text = StrDictionary.GetClientDictionaryString("#{47408}");
|
|
if (MeridiaSoulData.Instance.HeartClass == 3)
|
|
CostItemTip.text = StrDictionary.GetClientDictionaryString("#{47409}");
|
|
}
|
|
|
|
public void SelectOneHeart(int index)
|
|
{
|
|
var hearts = TableManager.GetHeartAttr().Values;
|
|
Tab_HeartAttr heart = null;
|
|
var id = 0;
|
|
foreach (var item in hearts)
|
|
{
|
|
if (id == index)
|
|
{
|
|
heart = item;
|
|
break;
|
|
}
|
|
id++;
|
|
}
|
|
if (heart == null)
|
|
return;
|
|
if (m_MaxAllLevelCount <= 0)
|
|
return;
|
|
for(int i=0;i< HeartItems.Count;i++)
|
|
{
|
|
HeartItems[i].OnSelect(index == i);
|
|
if (index == i)
|
|
CurrSelectIcon.sprite = Points[i].sprite;
|
|
}
|
|
HeartAllLevelSlider.value = m_HeartLevelCount*1.0f / m_MaxAllLevelCount;
|
|
SliderEffect.SetActive(HeartAllLevelSlider.value > 0);
|
|
int HeartLevelID = heart.Id * 1000000 + MeridiaSoulData.Instance.HeartClass * 1000 + MeridiaSoulData.Instance.GetHeartLevel(heart.Id);
|
|
Tab_HeartLevel HeartLevelTab = TableManager.GetHeartLevelByID(HeartLevelID, 0);
|
|
Tab_HeartLevel HeartLevelTabNext = TableManager.GetHeartLevelByID(HeartLevelID+1, 0);
|
|
m_CurrSelectHeartID = heart.Id;
|
|
curSlider.text = string.Format("{0}/{1}", m_HeartLevelCount * HeartLevelTab.LevelSoulCount, m_MaxAllLevelCount * HeartLevelTab.LevelSoulCount);
|
|
|
|
godHas.text = MeridiaSoulData.Instance.HeartCount.ToString();
|
|
m_AddAttrs.RefreshItems();
|
|
if (HeartLevelTabNext == null)
|
|
{
|
|
Tab_HeartLevel HeartLevelTabMax = TableManager.GetHeartLevelByID(HeartLevelID - 1, 0);
|
|
if(HeartLevelTabMax!=null)
|
|
curSlider.text = string.Format("{0}/{1}", m_HeartLevelCount * HeartLevelTabMax.LevelSoulCount, m_MaxAllLevelCount * HeartLevelTabMax.LevelSoulCount);
|
|
return;
|
|
}
|
|
MeridiaSoul.BloodVeinAttrData data = new MeridiaSoul.BloodVeinAttrData();
|
|
data.ProId = HeartLevelTabNext.AttrId1;
|
|
data.ProVal = HeartLevelTabNext.AttrValue1;
|
|
Hashtable addAttr = new Hashtable();
|
|
addAttr["InitObj"] = data;
|
|
m_AddAttrs.RefreshItems(addAttr);
|
|
}
|
|
|
|
public void Click_CloseFieldWn()
|
|
{
|
|
ChildWnd.SetActive(false);
|
|
InputFieldWnd.SetActive(false);
|
|
}
|
|
|
|
List<GameObject> _CloneGameObjs = new List<GameObject>();
|
|
public void ShowPulsWnd()
|
|
{
|
|
ChildWnd.SetActive(true);
|
|
InputFieldWnd.SetActive(true);
|
|
CurPulsLevel.text = MeridiaSoulData.Instance.PulseLevel.ToString();
|
|
Tab_HeartPulse heartPuls = GetPulseTab(MeridiaSoulData.Instance.PulseLevel + 1);
|
|
if (heartPuls == null)
|
|
{
|
|
PulsChildWnd1.SetActive(false);
|
|
PulsTitle.SetActive(false);
|
|
PulsChildWnd2.SetActive(true);
|
|
return;
|
|
}
|
|
PulsChildWnd1.SetActive(true);
|
|
PulsTitle.SetActive(true);
|
|
PulsChildWnd2.SetActive(false);
|
|
for (int i = 0; i < _CloneGameObjs.Count; i++)
|
|
{
|
|
_CloneGameObjs[i].SetActive(false);
|
|
_CloneGameObjs[i].transform.SetParent(null);
|
|
GameObject.Destroy(_CloneGameObjs[i]);
|
|
}
|
|
_CloneGameObjs.Clear();
|
|
for (int i=0;i<heartPuls.getNeedAttrIdCount();i++)
|
|
{
|
|
CloneAttrObj(PulsNeedAttr, heartPuls.GetNeedAttrIdbyIndex(i), heartPuls.GetNeedAttrValuebyIndex(i),true);
|
|
}
|
|
for (int i = 0; i < heartPuls.getAttrIdCount(); i++)
|
|
{
|
|
CloneAttrObj(PulsAddAttr, heartPuls.GetAttrIdbyIndex(i), heartPuls.GetAttrValuebyIndex(i));
|
|
}
|
|
}
|
|
|
|
void CloneAttrObj(GameObject obj, int proID, long proValue,bool add = false)
|
|
{
|
|
if (proID == -1)
|
|
return;
|
|
GameObject newObj = GameObject.Instantiate(obj);
|
|
newObj.SetActive(true);
|
|
newObj.transform.SetParent(obj.transform.parent);
|
|
newObj.transform.localPosition = obj.transform.localPosition;
|
|
newObj.transform.localScale = obj.transform.localScale;
|
|
Text attr = newObj.GetComponent<Text>();
|
|
if (attr != null)
|
|
attr.text = PropID.GetAttrName((PropID.PropertyID)proID);
|
|
Transform child = newObj.transform.Find("Text");
|
|
if (child != null)
|
|
{
|
|
AttrData attrData = MeridiaSoulData.Instance.GetOneHeartAddAttr(proID);
|
|
Text attrValue = child.GetComponent<Text>();
|
|
if (attrValue != null)
|
|
{
|
|
if(add==false)
|
|
{
|
|
attrValue.text = proValue.ToString();
|
|
}
|
|
else
|
|
{
|
|
if (attrData != null && attrData.attrValue >= proValue)
|
|
{
|
|
attrValue.text = proValue.ToString();
|
|
}
|
|
else
|
|
attrValue.text = string.Format("<color=#ab0e0eff>{0}</color>", proValue);
|
|
}
|
|
}
|
|
}
|
|
_CloneGameObjs.Add(newObj);
|
|
}
|
|
|
|
public void Click_UpLevel()
|
|
{
|
|
Tab_HeartClass heartClassNext = TableManager.GetHeartClassByID(MeridiaSoulData.Instance.HeartClass, 0);
|
|
if (heartClassNext == null)
|
|
{
|
|
GUIData.AddNotifyData(StrDictionary.GetClientDictionaryString("#{47406}"));
|
|
return;
|
|
}
|
|
|
|
ReqUpgradeHeart cmd = new ReqUpgradeHeart();
|
|
cmd.heartId = m_CurrSelectHeartID;
|
|
cmd.isAuto = 0;
|
|
cmd.SendMsg();
|
|
}
|
|
|
|
public void Click_UpClass()
|
|
{
|
|
Tab_HeartClass heartClassNext = TableManager.GetHeartClassByID(MeridiaSoulData.Instance.HeartClass + 1, 0);
|
|
if (heartClassNext == null)
|
|
{
|
|
GUIData.AddNotifyData(StrDictionary.GetClientDictionaryString("#{47406}"));
|
|
return;
|
|
}
|
|
|
|
ReqAdvanced cmd = new ReqAdvanced();
|
|
cmd.flag = 1;
|
|
cmd.SendMsg();
|
|
}
|
|
|
|
public void Click_Descript()
|
|
{
|
|
MessageHelpLogic.ShowHelpMessage(39);
|
|
}
|
|
} |