Files

451 lines
16 KiB
C#
Raw Permalink Normal View History

2024-08-23 15:49:34 +08:00
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);
}
}