Files
JJBB/Assets/Project/Script/GUI/PlayerInfo/OtherPlayerSkillInfoCtr.cs

262 lines
8.6 KiB
C#
Raw Permalink Normal View History

2024-08-23 15:49:34 +08:00
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using GCGame.Table;
using UnityEngine.UI;
public class OtherPlayerSkillInfoCtr : MonoBehaviour {
public static OtherPlayerSkillInfoCtr Instance;
private void Awake()
{
Instance = this;
}
private void OnDestroy()
{
Instance = null;
}
public SkillRootPage _SkillInfoPage;
public UISubScollMenu _SkillClasses;
private Dictionary<string, List<SkillRootItem.SkillShowInfo>> _MySkillInfos;
private SkillRootItem.SkillShowInfo _SelectedSkillShow;
#region skill Desc
public Text _SkillName;
public Text _SkillCurDesc;
public Text _SkillNextDesc;
public Text _LeardNeedLv;
public Text _LeardNeedPreSkill;
public Text _Xiuwei;
public Image[] _DamageTypes;
//public Image[] _DamageTypes;
#endregion
// 入口
// 网络包返回后,会调用此函数显示界面
public void InitSkillInfo()
{
InitSkillItems();
_SkillClasses.Clear();
foreach (var skillClass in _MySkillInfos)
{
_SkillClasses.PushMenu(skillClass.Key);
}
_SkillClasses.ShowDefaultFirst();
OnSkillClassPage(_SkillClasses.SelectedSub1);
}
private void InitSkillItems()
{
// 全部可学技能列表,为未分类
var totleList = new List<SkillRootItem.SkillShowInfo>();
// 分类过后的全部技能列表
_MySkillInfos = new Dictionary<string, List<SkillRootItem.SkillShowInfo>>();
var skillActives = TableManager.GetSkillActive().Values;
var skillCount = 0;
foreach (var skill in skillActives)
{
if (skill.Profession == GameManager.gameManager.OtherPlayerData.Profession)
skillCount++;
}
// 保存玩家已经学的技能
for (int i = 0; i < GameManager.gameManager.OtherPlayerData.OwnSkillInfo.Length; ++i)
{
//if (skillInfo.SkillLevelTable == null)
// continue;
//潜规则,这两个位置默认存放试用技能
if (i == skillCount - 1 || i == skillCount - 2)
continue;
var skillInfo = GameManager.gameManager.OtherPlayerData.OwnSkillInfo[i];
var showInfo = new SkillRootItem.SkillShowInfo();
showInfo.SkillExTab = skillInfo.SkillExTable;
if (showInfo.SkillExTab == null)
continue;
showInfo.SkillBase = skillInfo.SkillBaseTable;
Tab_SkillLevelUp skillnext = TableManager.GetSkillLevelUpByID(skillInfo.SkillExTable.NextSkillId, 0);
showInfo.SkillLevelUp = skillnext;
totleList.Add(showInfo);
}
// 获得所有可学技能列表
var learnList = TableManager.GetSkillLearn().Values;
foreach (var tabAct in learnList)
{
if (tabAct.Profession != GameManager.gameManager.OtherPlayerData.Profession)
continue;
// 获取每个技能相关信息
Tab_SkillEx skillEx = TableManager.GetSkillExByID(tabAct.SkillId, 0);
Tab_SkillBase skillBase = TableManager.GetSkillBaseByID(skillEx.BaseId, 0);
var skillInfo = totleList.Find((showInfo) =>
{
if (showInfo.SkillBase.Id == skillEx.BaseId)
{
return true;
}
return false;
});
if (skillInfo != null)
{
skillInfo.SkillLearn = tabAct;
}
else
{
SkillRootItem.SkillShowInfo showInfo = new SkillRootItem.SkillShowInfo();
showInfo.SkillLearn = tabAct;
showInfo.SkillBase = skillBase;
showInfo.SkillLevelUp = TableManager.GetSkillLevelUpByID(skillEx.SkillExID, 0);
totleList.Add(showInfo);
}
}
// 将已学和没学的技能,按照类型存入字典
foreach (var showInfo in totleList)
{
if (showInfo.SkillLearn == null)
continue;
if (_MySkillInfos.ContainsKey(showInfo.SkillLearn.Class))
{
_MySkillInfos[showInfo.SkillLearn.Class].Add(showInfo);
}
else
{
List<SkillRootItem.SkillShowInfo> showList = new List<SkillRootItem.SkillShowInfo>();
showList.Add(showInfo);
_MySkillInfos.Add(showInfo.SkillLearn.Class, showList);
}
}
}
// 技能左侧菜单点击回调
public void OnSkillClassPage(object paramObj)
{
string skillClass = paramObj as string;
if (_MySkillInfos.ContainsKey(skillClass))
{
_SkillInfoPage.InitContainer(_MySkillInfos[skillClass], OnSkillItemClick, true);
_SkillInfoPage.SelectItem(_SelectedSkillShow);
}
}
// 技能点击回调
public void OnSkillItemClick(object skillItem)
{
SkillRootItem.SkillShowInfo skillShowInfo = skillItem as SkillRootItem.SkillShowInfo;
if (skillShowInfo == null)
return;
_SelectedSkillShow = skillShowInfo;
InitSkillInfo(skillShowInfo);
}
// 显示技能详细描述
private SkillRootItem.SkillShowInfo _SelectedSkill;
public void InitSkillInfo(SkillRootItem.SkillShowInfo skillShowInfo)
{
_SelectedSkill = skillShowInfo;
_SkillName.text = skillShowInfo.SkillBase.Name;
if(skillShowInfo.SkillExTab != null)
{
_SkillCurDesc.text = skillShowInfo.SkillExTab.SkillDesc;
_SkillCurDesc.gameObject.SetActive(true);
}
else
{
_SkillCurDesc.text = "";
_SkillCurDesc.gameObject.SetActive(false);
}
// 技能类型
string[] skillDamageType = skillShowInfo.SkillLearn.SkillType.Split(';');
for (int i = 0; i < _DamageTypes.Length; ++i)
{
_DamageTypes[i].gameObject.SetActive(false);
}
for (int i = 0; i < skillDamageType.Length; ++i)
{
int index = int.Parse(skillDamageType[i]);
_DamageTypes[index].gameObject.SetActive(true);
}
ShowLevelSkillCondition(skillShowInfo);
_Xiuwei.text = StrDictionary.GetClientDictionaryString("#{2829}", GameManager.gameManager.OtherPlayerData.AbilityLevel.ToString());
}
// 显示技能详细描述第二部分
private void ShowLevelSkillCondition(SkillRootItem.SkillShowInfo skillShowInfo)
{
if (skillShowInfo.SkillLevelUp == null)
{
_SkillNextDesc.text = "";
_LeardNeedLv.text = "";
_LeardNeedPreSkill.gameObject.SetActive(false);
return;
}
var levelUpNextSkill = TableManager.GetSkillExByID(skillShowInfo.SkillLevelUp.NextSkillId, 0);
if (levelUpNextSkill == null)
return;
if (levelUpNextSkill != null)
{
_SkillNextDesc.text = levelUpNextSkill.SkillDesc;
}
if (skillShowInfo.SkillLevelUp.Level > Singleton<ObjManager>.Instance.MainPlayer.BaseAttr.Level)
{
_LeardNeedLv.text = "<color=#ff1100>" + skillShowInfo.SkillLevelUp.Level.ToString() + "</color>";
}
else
{
_LeardNeedLv.text = "<color=#5bd55b>" + skillShowInfo.SkillLevelUp.Level.ToString() + "</color>";
}
var needSkill = skillShowInfo.GetNeedSkillLvUp();
if (needSkill == null)
{
_LeardNeedPreSkill.gameObject.SetActive(false);
}
else
{
_LeardNeedPreSkill.gameObject.SetActive(true);
bool alreadyLearnNeedSkill = false;
var skillBase = TableManager.GetSkillBaseByID(needSkill.BaseId, 0);
foreach (var skillInfo in Singleton<ObjManager>.GetInstance().MainPlayer.OwnSkillInfo)
{
var skillEx = skillInfo.SkillExTable;
if (skillEx == null)
continue;
if (skillEx.BaseId == needSkill.BaseId && skillEx.Level >= needSkill.Level)
{
alreadyLearnNeedSkill = true;
}
}
string skillName = skillBase.Name + needSkill.Level.ToString() + StrDictionary.GetClientDictionaryString("#{5120}");
if (!alreadyLearnNeedSkill)
{
_LeardNeedPreSkill.text = "<color=#ff1100>" + skillName + "</color>";
}
else
{
_LeardNeedPreSkill.text = "<color=#5bd55b>" + skillName + "</color>";
}
}
}
}