262 lines
8.6 KiB
C#
262 lines
8.6 KiB
C#
|
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>";
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|