//--------------------------------------------------------
|
// [Author]: 第二世界
|
// [ Date ]: Wednesday, February 20, 2019
|
//--------------------------------------------------------
|
|
using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
using UnityEngine;
|
using UnityEngine.UI;
|
|
namespace vnxbqy.UI
|
{
|
|
public class TreasureSkillWin : Window
|
{
|
[SerializeField] ScrollerController m_Controller;
|
[SerializeField] SkillWidget m_SkillNow;
|
[SerializeField] SkillExpertBehaviour[] m_SkillExpertBehaviours;
|
[SerializeField] ExpertSkillSelectBehaviour m_ExpertSkillBehaviours;
|
[SerializeField] float m_DisappearTime = 1f;
|
|
public static int autoSelectSkill = 0;
|
|
|
float functionGuideTime = 0f;
|
|
List<int> displaySkills = new List<int>();
|
|
TreasureSkillModel model
|
{
|
get { return ModelCenter.Instance.GetModel<TreasureSkillModel>(); }
|
}
|
|
PackModel packModel
|
{
|
get { return ModelCenter.Instance.GetModel<PackModel>(); }
|
}
|
|
SkillModel skillModel { get { return ModelCenter.Instance.GetModel<SkillModel>(); } }
|
|
ReikiRootModel reikiRootModel { get { return ModelCenter.Instance.GetModel<ReikiRootModel>(); } }
|
TreasureModel treasureModel { get { return ModelCenter.Instance.GetModel<TreasureModel>(); } }
|
|
#region Built-in
|
protected override void BindController()
|
{
|
}
|
|
protected override void AddListeners()
|
{
|
m_Controller.OnRefreshCell += OnRefreshCell;
|
}
|
|
protected override void OnPreOpen()
|
{
|
SetDefaultSelect();
|
|
model.selectActivePriority = false;
|
|
|
model.treasureSkillRefresh += TreasureSkillRefresh;
|
model.selectRefresh += SelectRefresh;
|
model.selectExpertSkillRefresh += OnExpertSkillSelect;
|
model.skillLevelUpRefresh += SkillLevelUpRefresh;
|
packModel.refreshItemCountEvent += RefreshItemCountEvent;
|
model.expertSkillRefresh += ExpertSkillRefresh;
|
model.expertActiveRefresh += OnExpertSkillActive;
|
|
}
|
|
protected override void OnActived()
|
{
|
base.OnActived();
|
|
var index = displaySkills.IndexOf(model.selectSkill);
|
if (index != -1)
|
{
|
var offset = 0f;
|
m_Controller.JumpIndex(index, ref offset);
|
var rect = m_Controller.mScrollRect.transform as RectTransform;
|
m_Controller.JumpIndex(offset - rect.rect.height / 2 + 50, 0, EnhancedUI.EnhancedScroller.EnhancedScroller.TweenType.immediate);
|
}
|
}
|
|
protected override void OnAfterOpen()
|
{
|
Display();
|
}
|
|
protected override void OnPreClose()
|
{
|
model.treasureSkillRefresh -= TreasureSkillRefresh;
|
model.selectRefresh -= SelectRefresh;
|
model.selectExpertSkillRefresh -= OnExpertSkillSelect;
|
model.skillLevelUpRefresh -= SkillLevelUpRefresh;
|
packModel.refreshItemCountEvent -= RefreshItemCountEvent;
|
model.expertSkillRefresh -= ExpertSkillRefresh;
|
model.expertActiveRefresh -= OnExpertSkillActive;
|
|
if (autoSelectSkill != 0)
|
{
|
var pak = new CA516_tagCMSelectSkillElement();
|
pak.SkillTypeID = (uint)autoSelectSkill;
|
pak.DoType = 1;
|
GameNetSystem.Instance.SendInfo(pak);
|
}
|
|
if(NewBieCenter.Instance.inGuiding&& NewBieCenter.Instance.currentGuide == 62)
|
{
|
NewBieCenter.Instance.FinishNewBieGuide(62);
|
}
|
|
m_ExpertSkillBehaviours.OnClose();
|
}
|
|
protected override void OnAfterClose()
|
{
|
}
|
#endregion
|
|
void SetDefaultSelect()
|
{
|
|
displaySkills.Clear();
|
|
var _skill = 0;
|
List<int> list;
|
if (model.TryGetSkills(out list))
|
{
|
displaySkills.AddRange(list);
|
|
var index = displaySkills.FindIndex((x) =>
|
{
|
var treasureId = treasureModel.GetTreasureBySkillId(x);
|
var treasureConfig = TreasureConfig.Get(treasureId);
|
return treasureConfig.Category == (int)TreasureCategory.Fairy;
|
});
|
|
if (index != -1)
|
{
|
var skillId = displaySkills[index];
|
TreasureSkill treasureSkill;
|
var isActive = model.TryGetSkill(skillId, out treasureSkill)
|
&& treasureSkill.level > 0;
|
displaySkills.RemoveAt(index);
|
if (isActive)
|
{
|
displaySkills.Insert(0, skillId);
|
}
|
else
|
{
|
displaySkills.Add(skillId);
|
}
|
}
|
|
foreach (var skillId in displaySkills)
|
{
|
TreasureSkill skill;
|
if (model.TryGetSkill(skillId, out skill))
|
{
|
if (_skill == 0 && skill.level > 0)
|
{
|
_skill = skillId;
|
}
|
if (skill.redpoint.state == RedPointState.Simple)
|
{
|
_skill = skillId;
|
}
|
if (model.selectActivePriority && skill.expertRedpoint.state == RedPointState.Simple)
|
{
|
_skill = skillId;
|
break;
|
}
|
}
|
}
|
if (_skill == 0)
|
{
|
_skill = list[0];
|
}
|
}
|
model.selectSkill = _skill;
|
}
|
|
private void Display()
|
{
|
DisplaySkills();
|
DisplaySkillDetial();
|
SetDefaultExpertSkill();
|
DisplayExpertSkill();
|
DisplayExpertSkillDesc();
|
}
|
|
private void DisplaySkills()
|
{
|
m_Controller.Refresh();
|
for (int i = 0; i < displaySkills.Count; i++)
|
{
|
m_Controller.AddCell(ScrollerDataType.Header, displaySkills[i]);
|
}
|
m_Controller.Restart();
|
}
|
|
void DisplaySkillDetial()
|
{
|
TreasureSkill skill;
|
if (model.TryGetSkill(model.selectSkill, out skill))
|
{
|
var config = skill.GetSkillConfig(skill.level);
|
if (config == null)
|
{
|
return;
|
}
|
|
m_SkillNow.Display(skill.skillId, skill.level);
|
}
|
}
|
|
void OnExpertSkillSelect()
|
{
|
DisplayExpertSkill();
|
DisplayExpertSkillDesc();
|
}
|
|
//专精描述
|
void DisplayExpertSkillDesc()
|
{
|
m_ExpertSkillBehaviours.OnClose();
|
m_ExpertSkillBehaviours.OnShow();
|
}
|
|
void OnExpertSkillActive(int id)
|
{
|
DisplayExpertSkill();
|
}
|
|
void DisplayExpertSkill()
|
{
|
DisplayExpertSkills();
|
}
|
|
void DisplayExpertSkills()
|
{
|
TreasureSkill skill;
|
if (model.TryGetSkill(model.selectSkill, out skill))
|
{
|
for (int i = 0; i < m_SkillExpertBehaviours.Length; i++)
|
{
|
var potential = skill.potentials[i];
|
var level = 0;
|
model.TryGetExpertActiveLevel(potential.id, out level);
|
m_SkillExpertBehaviours[i].Display(potential.id, level);
|
}
|
}
|
}
|
|
|
private void OnRefreshCell(ScrollerDataType type, CellView cell)
|
{
|
var skillCell = cell as TreasureSkillCell;
|
skillCell.Display(cell.index);
|
}
|
|
|
|
private void TreasureSkillRefresh(int skillId)
|
{
|
m_Controller.m_Scorller.RefreshActiveCellViews();
|
if (skillId == model.selectSkill)
|
{
|
DisplaySkillDetial();
|
}
|
}
|
|
private void SelectRefresh()
|
{
|
m_Controller.m_Scorller.RefreshActiveCellViews();
|
DisplaySkillDetial();
|
SetDefaultExpertSkill();
|
//DisplayExpertSkill();
|
//DisplayExpertSkillDesc();
|
}
|
|
// 默认选中专精技能 当前使用专精-红点-表顺序
|
private void SetDefaultExpertSkill()
|
{
|
var skillId = 0;
|
if (model.TryGetExpertSkill(model.selectSkill, out skillId))
|
{
|
model.selecttExpertSkill = skillId;
|
return;
|
}
|
|
TreasureSkill treasureSkill;
|
if (model.TryGetSkill(model.selectSkill, out treasureSkill))
|
{
|
foreach (var potential in treasureSkill.potentials)
|
{
|
if (potential.activeRedpoint.state != RedPointState.None)
|
{
|
model.selecttExpertSkill = potential.id;
|
return;
|
}
|
}
|
model.selecttExpertSkill = treasureSkill.potentials[1].id;
|
return;
|
}
|
|
}
|
|
|
private void SkillLevelUpRefresh(int id)
|
{
|
if (model.selectSkill == id)
|
{
|
m_Controller.m_Scorller.RefreshActiveCellViews();
|
DisplaySkillDetial();
|
}
|
}
|
|
private void ExpertSkillRefresh()
|
{
|
DisplayExpertSkill();
|
m_Controller.m_Scorller.RefreshActiveCellViews();
|
|
}
|
|
private void RefreshItemCountEvent(PackType packType, int arg2, int itemId)
|
{
|
if (packType == PackType.Item && model.skillLevelUpItems.Contains(itemId))
|
{
|
DisplaySkillDetial();
|
}
|
}
|
|
|
|
|
|
[Serializable]
|
public class SkillWidget
|
{
|
[SerializeField] Transform m_Container;
|
[SerializeField] Text m_SkillLevel;
|
[SerializeField] Text m_SkillCoolDown;
|
[SerializeField] Text m_SkillDesc;
|
|
TreasureSkillModel model { get { return ModelCenter.Instance.GetModel<TreasureSkillModel>(); } }
|
|
public void Display(int skillId, int level)
|
{
|
m_SkillLevel.text = Language.Get("SkillActLevel", level);
|
TreasureSkill skill;
|
model.TryGetSkill(skillId, out skill);
|
var skillConfig = skill.GetSkillConfig(level);
|
m_SkillCoolDown.text = skillConfig.CoolDownTime == 0 ? string.Empty
|
: Language.Get("L1065", skillConfig.CoolDownTime / 1000);
|
m_SkillDesc.text = skillConfig.Description;
|
}
|
|
public void SetActive(bool active)
|
{
|
m_Container.SetActive(active);
|
}
|
}
|
|
|
}
|
}
|
|
|
|
|