//--------------------------------------------------------
|
// [Author]: 第二世界
|
// [ Date ]: Tuesday, July 31, 2018
|
//--------------------------------------------------------
|
|
using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
using TableConfig;
|
using UnityEngine;
|
using UnityEngine.UI;
|
|
namespace Snxxz.UI {
|
|
public class TalentWin : Window
|
{
|
[SerializeField] TalentSeriesBehaviour[] m_TalentSeries;
|
[SerializeField] TalentTreeScriptable[] m_TalentConfigs;
|
[SerializeField] RectTransform m_ContainerSelect;
|
[SerializeField] Button m_TalentTypeSelect;
|
[SerializeField] Text m_TalentType;
|
|
[SerializeField] ScrollRect m_Scroller;
|
[SerializeField] TalentSkillBehaviour[] m_TalentSkills;
|
[SerializeField] Image[] m_Arrows;
|
|
[SerializeField] RectTransform m_ContainerSelectSkill;
|
[SerializeField] Image m_SelectSkillIcon;
|
[SerializeField] Text m_SelectSkillLevel;
|
[SerializeField] Text m_SelectSkillName;
|
[SerializeField] Text[] m_SelectConditions;
|
[SerializeField] RectTransform m_ContainerSelectEffect;
|
[SerializeField] Text m_SelectSkillEffect;
|
[SerializeField] RectTransform m_ContainerNextEffect;
|
[SerializeField] Text m_SelectNextEffect;
|
|
|
[SerializeField] Button m_ResetPoint;
|
[SerializeField] Button m_AddPoint;
|
[SerializeField] Text m_AddPointBtnText;
|
[SerializeField] Text m_SurplusPoint;
|
|
#if UNITY_EDITOR
|
[SerializeField] TalentTreeScriptable m_EditorScriptable;
|
#endif
|
|
TalentModel model { get { return ModelCenter.Instance.GetModel<TalentModel>(); } }
|
#region Built-in
|
protected override void BindController()
|
{
|
}
|
|
protected override void AddListeners()
|
{
|
m_TalentTypeSelect.onClick.AddListener(SelectTalentType);
|
m_ResetPoint.onClick.AddListener(ResetPoint);
|
m_AddPoint.onClick.AddListener(AddPoint);
|
}
|
|
protected override void OnPreOpen()
|
{
|
model.selectSeries = 1;
|
model.selectTalentType = 1;
|
Display();
|
model.OnSelectTalentTypeEvnet += OnSelectTalentTypeEvnet;
|
model.OnSelectSeriesEvent += OnSelectSeriesEvent;
|
model.OnSelectSkillEvent += OnSelectSkillEvent;
|
model.talentSkillUpdate += TalentSkillUpdate;
|
model.talentPointUpdate += TalentPointUpdate;
|
}
|
|
protected override void OnAfterOpen()
|
{
|
}
|
|
protected override void OnPreClose()
|
{
|
model.OnSelectTalentTypeEvnet -= OnSelectTalentTypeEvnet;
|
model.OnSelectSeriesEvent -= OnSelectSeriesEvent;
|
model.OnSelectSkillEvent -= OnSelectSkillEvent;
|
model.talentSkillUpdate -= TalentSkillUpdate;
|
model.talentPointUpdate -= TalentPointUpdate;
|
for (int i = 0; i < m_TalentSeries.Length; i++)
|
{
|
m_TalentSeries[i].Dispose();
|
}
|
|
#if UNITY_EDITOR
|
if (m_EditorScriptable != null)
|
{
|
m_EditorScriptable = null;
|
}
|
#endif
|
}
|
|
protected override void OnAfterClose()
|
{
|
}
|
#endregion
|
|
protected override void LateUpdate()
|
{
|
base.LateUpdate();
|
#if UNITY_EDITOR
|
if (m_EditorScriptable != null)
|
{
|
DisplayTalentLayout(m_EditorScriptable);
|
}
|
#endif
|
}
|
|
void Display()
|
{
|
for (int i = 0; i < m_TalentSeries.Length; i++)
|
{
|
m_TalentSeries[i].Display(model.selectSeries);
|
}
|
|
DisplaySkills();
|
DisplaySeries();
|
DisplaySelectSkill();
|
DisplayTalentPoint();
|
}
|
|
void DisplaySkills()
|
{
|
|
}
|
|
void DisplaySeries()
|
{
|
var point = 0;
|
point += model.GetTalentTypeTotalPoint(model.selectSeries, 1);
|
point += model.GetTalentTypeTotalPoint(model.selectSeries, 2);
|
point += model.GetTalentTypeTotalPoint(model.selectSeries, 3);
|
m_TalentType.text = model.selectSeries == 1 ? string.Format("智力天赋({0})", point) : string.Format("力量天赋({0})", point);
|
}
|
|
void DisplaySelectSkill()
|
{
|
m_ContainerSelect.gameObject.SetActive(false);
|
|
DisplaySkillInfo();
|
DisplayConditions();
|
DisplaySkillEffect();
|
}
|
|
void DisplayConditions()
|
{
|
TalentSkill talent;
|
var index = 0;
|
if (model.TryGetTalent(model.selectSkill, out talent))
|
{
|
var talentConfig = Config.Instance.Get<TalentConfig>(talent.skillId + talent.level);
|
var skillConfig = Config.Instance.Get<SkillConfig>(talent.skillId + talent.level);
|
if (talentConfig != null)
|
{
|
if (talentConfig.requireSeriesPoint != 0 && index < m_SelectConditions.Length)
|
{
|
m_SelectConditions[index].gameObject.SetActive(true);
|
m_SelectConditions[index].text = StringUtility.Contact(0, "/", talentConfig.requireSeriesPoint);
|
index++;
|
}
|
}
|
if (skillConfig != null && index < m_SelectConditions.Length)
|
{
|
TalentSkill learnTalent;
|
if (skillConfig.LearnSkillReq != 0 && model.TryGetTalent(skillConfig.LearnSkillReq, out learnTalent))
|
{
|
var learnSkillConfig = Config.Instance.Get<SkillConfig>(skillConfig.LearnSkillReq);
|
m_SelectConditions[index].gameObject.SetActive(true);
|
m_SelectConditions[index].text = StringUtility.Contact(
|
"前置天赋: ", learnSkillConfig.SkillName, " ",
|
learnTalent.level, "/", learnSkillConfig.LearnSkillLV
|
);
|
index++;
|
}
|
}
|
}
|
for (int i = index; i < m_SelectConditions.Length; i++)
|
{
|
m_SelectConditions[i].gameObject.SetActive(false);
|
}
|
}
|
|
void DisplaySkillInfo()
|
{
|
TalentSkill talent;
|
m_ContainerSelectSkill.gameObject.SetActive(false);
|
if (model.TryGetTalent(model.selectSkill, out talent))
|
{
|
m_ContainerSelectSkill.gameObject.SetActive(true);
|
var config = Config.Instance.Get<SkillConfig>(talent.skillId + talent.level);
|
m_SelectSkillIcon.SetSprite(config.IconName);
|
m_SelectSkillLevel.text = StringUtility.Contact(talent.level, "/", talent.maxLevel);
|
m_SelectSkillName.text = config.SkillName;
|
}
|
}
|
|
void DisplaySkillEffect()
|
{
|
TalentSkill talent;
|
if (model.TryGetTalent(model.selectSkill, out talent))
|
{
|
var config = Config.Instance.Get<SkillConfig>(talent.skillId + talent.level);
|
m_SelectSkillEffect.text = config.Description;
|
m_ContainerNextEffect.gameObject.SetActive(talent.level < talent.maxLevel);
|
if (talent.level < talent.maxLevel)
|
{
|
var nextConfig = Config.Instance.Get<SkillConfig>(talent.skillId + talent.level + 1);
|
m_SelectNextEffect.text = nextConfig.Description;
|
}
|
}
|
}
|
|
bool TryGetTalentConfig(out TalentTreeScriptable config)
|
{
|
config = null;
|
for (int i = 0; i < m_TalentConfigs.Length; i++)
|
{
|
if (m_TalentConfigs[i].Belong(PlayerDatas.Instance.baseData.Job, model.selectTalentType, model.selectSeries))
|
{
|
config = m_TalentConfigs[i];
|
return true;
|
}
|
}
|
return false;
|
}
|
|
void DisplayTalentPoint()
|
{
|
m_SurplusPoint.text = model.talentPoint.ToString();
|
}
|
|
private void TalentSkillUpdate(int _skillId)
|
{
|
if (_skillId == model.selectSkill)
|
{
|
DisplaySkillInfo();
|
DisplayConditions();
|
DisplaySkillEffect();
|
}
|
}
|
|
private void TalentPointUpdate()
|
{
|
DisplayTalentPoint();
|
}
|
|
private void OnSelectTalentTypeEvnet()
|
{
|
DisplaySkills();
|
}
|
|
private void OnSelectSeriesEvent()
|
{
|
model.selectTalentType = 1;
|
Display();
|
}
|
|
private void OnSelectSkillEvent()
|
{
|
DisplaySelectSkill();
|
}
|
|
private void SelectTalentType()
|
{
|
model.selectTalentType = model.selectTalentType == 1 ? 2 : 1;
|
}
|
|
private void AddPoint()
|
{
|
TalentSkill talent;
|
if (model.TryGetTalent(model.selectSkill, out talent))
|
{
|
int error;
|
if (!model.SatisfyLevelUp(model.selectSkill, out error))
|
{
|
model.ProcessLevelUpError(error);
|
return;
|
}
|
}
|
}
|
|
private void ResetPoint()
|
{
|
|
}
|
|
void DisplayTalentLayout(TalentTreeScriptable config)
|
{
|
m_Scroller.content.sizeDelta = config.contentSizeDelta;
|
for (int i = 0; i < m_TalentSkills.Length; i++)
|
{
|
var element = config.GetTalentElement(i);
|
m_TalentSkills[i].transform.localPosition = element.position;
|
}
|
}
|
}
|
}
|
|
|
|
|