少年修仙传客户端代码仓库
client_linchunjie
2018-08-21 7bf61af608615884ab5a4a83569639d538ed665b
提交天赋部分代码
2个文件已修改
12个文件已添加
929 ■■■■■ 已修改文件
Core/GameEngine/Model/Config/TalentConfig.cs 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/Config/TalentConfig.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/ConfigManager.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Skill/SkillPanel.cs 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Skill/TalentButtonBehaviour.cs 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Skill/TalentButtonBehaviour.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Skill/TalentModel.cs 258 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Skill/TalentModel.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Skill/TalentSkillBehaviour.cs 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Skill/TalentSkillBehaviour.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Skill/TalentSkillScriptableObject.cs 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Skill/TalentSkillScriptableObject.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Skill/TalentWin.cs 340 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Skill/TalentWin.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/Config/TalentConfig.cs
New file
@@ -0,0 +1,59 @@
//--------------------------------------------------------
//    [Author]:            第二世界
//    [  Date ]:           Tuesday, August 21, 2018
//--------------------------------------------------------
using UnityEngine;
using System;
namespace TableConfig {
    public partial class TalentConfig : ConfigBase {
        public int SkillId { get ; private set ; }
        public int series { get ; private set ; }
        public int talentType { get ; private set ; }
        public int SkillLv { get ; private set ; }
        public int property { get ; private set ; }
        public int propertyValue { get ; private set ; }
        public int seriesCondition { get ; private set ; }
        public int point { get ; private set ; }
        public override string getKey()
        {
            return SkillId.ToString();
        }
        public override void Parse() {
            try
            {
                SkillId=IsNumeric(rawContents[0]) ? int.Parse(rawContents[0]):0;
                series=IsNumeric(rawContents[1]) ? int.Parse(rawContents[1]):0;
                talentType=IsNumeric(rawContents[2]) ? int.Parse(rawContents[2]):0;
                SkillLv=IsNumeric(rawContents[3]) ? int.Parse(rawContents[3]):0;
                property=IsNumeric(rawContents[4]) ? int.Parse(rawContents[4]):0;
                propertyValue=IsNumeric(rawContents[5]) ? int.Parse(rawContents[5]):0;
                seriesCondition=IsNumeric(rawContents[6]) ? int.Parse(rawContents[6]):0;
                point=IsNumeric(rawContents[7]) ? int.Parse(rawContents[7]):0;
            }
            catch (Exception ex)
            {
                DebugEx.Log(ex);
            }
        }
    }
}
Core/GameEngine/Model/Config/TalentConfig.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 86eb4a564c7dcb047bb4509cf2e2758a
timeCreated: 1534837559
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Core/GameEngine/Model/ConfigManager.cs
@@ -188,6 +188,7 @@
        AddAsyncTask<OrderInfoConfig>();
        AddAsyncTask<TrialExchangeConfig>();
        AddAsyncTask<TrialRewardsConfig>();
        AddAsyncTask<TalentConfig>();
        while (!AllCompleted())
        {
System/Skill/SkillPanel.cs
@@ -62,6 +62,15 @@
        private void OnTalentFunc()
        {
            CloseChild();
            functionOrder = 2;
            if (windowState == WindowState.Opened)
            {
                WindowCenter.Instance.OpenWithoutAnimation<TalentWin>();
            }
            else
            {
                WindowCenter.Instance.Open<TalentWin>();
            }
        }
        private void OnAccordFunc()
@@ -83,7 +92,7 @@
        protected override void OnActived()
        {
            base.OnActived();
            functionButtonTalent.state = TitleBtnState.Locked;
            //functionButtonTalent.state = TitleBtnState.Locked;
            if (functionOrder == 0 && model.jumpToPass)
            {
@@ -123,6 +132,10 @@
            if (WindowCenter.Instance.CheckOpen<SkillPassWin>()) {
                WindowCenter.Instance.CloseImmediately<SkillPassWin>();
            }
            if (WindowCenter.Instance.CheckOpen<TalentWin>())
            {
                WindowCenter.Instance.CloseImmediately<TalentWin>();
            }
        }
    }
}
System/Skill/TalentButtonBehaviour.cs
New file
@@ -0,0 +1,54 @@
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
namespace Snxxz.UI
{
    public class TalentButtonBehaviour : MonoBehaviour
    {
        [SerializeField] Button m_Button;
        [SerializeField] Image m_Icon;
        [SerializeField] Text m_TalentType;
        [SerializeField] Text m_TalentPoint;
        TalentModel model { get { return ModelCenter.Instance.GetModel<TalentModel>(); } }
        int talentType = 0;
        int series = 0;
        private void Awake()
        {
            m_Button.onClick.AddListener(SelectType);
        }
        private void SelectType()
        {
            if (talentType != 0)
            {
                model.selectTalentType = talentType;
            }
        }
        public void Display(int _series, int _type)
        {
            series = _series;
            talentType = _type;
            OnSelectTalentTypeEvnet();
            model.OnSelectTalentTypeEvnet -= OnSelectTalentTypeEvnet;
            model.OnSelectTalentTypeEvnet += OnSelectTalentTypeEvnet;
        }
        public void Dispose()
        {
            model.OnSelectTalentTypeEvnet -= OnSelectTalentTypeEvnet;
        }
        private void OnSelectTalentTypeEvnet()
        {
            m_Button.image.SetSprite(talentType == model.selectTalentType ? "Title_TabRight" : "Title_TabDark");
        }
    }
}
System/Skill/TalentButtonBehaviour.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 44434ba8a44224c408afd5e00a00f571
timeCreated: 1533004940
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/Skill/TalentModel.cs
New file
@@ -0,0 +1,258 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TableConfig;
using System;
namespace Snxxz.UI
{
    public class TalentModel : Model, IPlayerLoginOk, IBeforePlayerDataInitialize
    {
        Dictionary<int, TalentSkill> talentSkillDict = new Dictionary<int, TalentSkill>();
        Dictionary<int, Dictionary<int, List<int>>> talentSkills = new Dictionary<int, Dictionary<int, List<int>>>();
        int m_SelectSeries;
        public int selectSeries
        {
            get { return m_SelectSeries; }
            set
            {
                if (m_SelectSeries != value && OnSelectSeriesEvent != null)
                {
                    m_SelectSeries = value;
                    OnSelectSeriesEvent();
                }
                m_SelectSeries = value;
            }
        }
        int m_SelectTalentType;
        public int selectTalentType
        {
            get { return m_SelectTalentType; }
            set
            {
                if (m_SelectTalentType != value && OnSelectTalentTypeEvnet != null)
                {
                    m_SelectTalentType = value;
                    OnSelectTalentTypeEvnet();
                }
                m_SelectTalentType = value;
            }
        }
        int m_SelectSkill;
        public int selectSkill
        {
            get { return m_SelectSkill; }
            set
            {
                if (m_SelectSkill != value && OnSelectSkillEvent != null)
                {
                    m_SelectSkill = value;
                    OnSelectSkillEvent();
                }
                m_SelectSkill = value;
            }
        }
        public event Action OnSelectTalentTypeEvnet;
        public event Action OnSelectSeriesEvent;
        public event Action OnSelectSkillEvent;
        public event Action talentPointUpdate;
        public event Action<int> talentSkillUpdate;
        public override void Init()
        {
            //ParseConfig();
            FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent;
        }
        public void OnBeforePlayerDataInitialize()
        {
            foreach (var talent in talentSkillDict.Values)
            {
                talent.level = 0;
            }
        }
        public void OnPlayerLoginOk()
        {
        }
        public override void UnInit()
        {
            FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent;
        }
        private void OnFuncStateChangeEvent(int _id)
        {
            if (_id == (int)FuncOpenEnum.Talent)
            {
                UpdateRedpoint();
            }
        }
        void ParseConfig()
        {
            var configs = ConfigManager.Instance.GetAllValues<TalentConfig>();
            for (int i = 0; i < configs.Count; i++)
            {
                var skillId = configs[i].SkillId;
                var skillConfig = ConfigManager.Instance.GetTemplate<SkillConfig>(skillId);
                TalentSkill talent;
                if (!TryGetTalent(skillConfig.SkillTypeID, out talent))
                {
                    talent = new TalentSkill(skillConfig.SkillTypeID, skillConfig.SkillMaxLV);
                    talent.level = 0;
                    talentSkillDict.Add(skillConfig.SkillTypeID, talent);
                    Dictionary<int, List<int>> dict = null;
                    if (!talentSkills.TryGetValue(skillConfig.UseType, out dict))
                    {
                        dict = new Dictionary<int, List<int>>();
                        talentSkills.Add(skillConfig.UseType, dict);
                    }
                    List<int> list = null;
                    var type = configs[i].series * 10 + configs[i].talentType;
                    if (!dict.TryGetValue(type, out list))
                    {
                        list = new List<int>();
                        dict.Add(type, list);
                    }
                    list.Add(skillConfig.SkillTypeID);
                }
            }
        }
        public bool TryGetTalents(int job, int series, int talentType, out List<int> talents)
        {
            talents = null;
            Dictionary<int, List<int>> dict = null;
            var _job = (int)Math.Pow(2, job);
            talentSkills.TryGetValue(_job, out dict);
            if (null != dict)
            {
                return dict.TryGetValue(series * 10 + talentType, out talents);
            }
            return false;
        }
        public bool TryGetTalent(int talentId,out TalentSkill talent)
        {
            return talentSkillDict.TryGetValue(talentId, out talent);
        }
        public int GetTalentTypeTotalPoint(int series, int talentType)
        {
            var job = (int)Math.Pow(PlayerDatas.Instance.baseData.Job, 2);
            List<int> list;
            var point = 0;
            if (TryGetTalents(job, series, talentType, out list))
            {
                for (int i = 0; i < list.Count; i++)
                {
                    TalentSkill talent;
                    if (TryGetTalent(list[i], out talent))
                    {
                        point += talent.level;
                    }
                }
            }
            return point;
        }
        public bool SatisfyLevelUp(int talentId, out int error)
        {
            error = 0;
            TalentSkill talent;
            if (TryGetTalent(talentId, out talent))
            {
                if (talent.level >= talent.max)
                {
                    error = 1;
                    return false;
                }
                if (talentPoint <= 0)
                {
                    error = 2;
                    return false;
                }
                var talentConfig = ConfigManager.Instance.GetTemplate<TalentConfig>(talent.skillId + talent.level);
                if (talentConfig.property != 0)
                {
                    if (UIHelper.GetPropertyMapPlayerData((AttrEnum)talentConfig.property) < talentConfig.propertyValue)
                    {
                        error = 3;
                        return false;
                    }
                }
                if (talentConfig.seriesCondition != 0)
                {
                    if (GetTalentTypeTotalPoint(talentConfig.series, talentConfig.seriesCondition) < talentConfig.point)
                    {
                        error = 4;
                        return false;
                    }
                }
                var skillConfig = ConfigManager.Instance.GetTemplate<SkillConfig>(talent.skillId + talent.level);
                if (skillConfig.LearnSkillReq != 0)
                {
                    TalentSkill learnTalent;
                    if (TryGetTalent(skillConfig.LearnSkillReq, out learnTalent))
                    {
                        if (learnTalent.level < skillConfig.LearnSkillLV)
                        {
                            error = 5;
                            return false;
                        }
                    }
                }
            }
            return true;
        }
        public void ProcessLevelUpError(int error)
        {
        }
        #region 服务端数据
        public int talentPoint { get; private set; }
        public void UpdateTalent()
        {
            UpdateRedpoint();
        }
        #endregion
        #region 红点
        Redpoint talentRedpoint = new Redpoint(103, 10303);
        void UpdateRedpoint()
        {
            talentRedpoint.state = RedPointState.None;
            if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.Talent))
            {
                return;
            }
            if (talentPoint > 0)
            {
                talentRedpoint.state = RedPointState.Simple;
            }
        }
        #endregion
    }
    public class TalentSkill
    {
        public int skillId { get; private set; }
        public int level { get; set; }
        public int max { get; private set; }
        public TalentSkill(int id, int maxLevel)
        {
            skillId = id;
            max = maxLevel;
        }
    }
}
System/Skill/TalentModel.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 94d2b0e6415910d47a88b77e252ec3a0
timeCreated: 1532942625
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/Skill/TalentSkillBehaviour.cs
New file
@@ -0,0 +1,70 @@
using System;
using System.Collections;
using System.Collections.Generic;
using TableConfig;
using UnityEngine;
using UnityEngine.UI;
namespace Snxxz.UI
{
    public class TalentSkillBehaviour : MonoBehaviour
    {
        [SerializeField] Image m_Icon;
        [SerializeField] Text m_Level;
        [SerializeField] Button m_Button;
        int skillId = 0;
        TalentModel model { get { return ModelCenter.Instance.GetModel<TalentModel>(); } }
        private void Awake()
        {
            m_Button.onClick.AddListener(SelectSkill);
        }
        public void Display(int _skillId)
        {
            skillId = _skillId;
            model.talentSkillUpdate -= TalentSkillUpdate;
            model.talentSkillUpdate += TalentSkillUpdate;
            Display();
        }
        private void Display()
        {
            TalentSkill talent;
            if (model.TryGetTalent(skillId, out talent))
            {
                var config = ConfigManager.Instance.GetTemplate<SkillConfig>(talent.skillId);
                if (config != null)
                {
                    m_Icon.SetSprite(config.IconName);
                }
                m_Level.text = StringUtility.Contact(talent.level, "/", talent.max);
                m_Icon.material = talent.level > 0 ? MaterialUtility.GetUIDefaultGraphicMaterial() : MaterialUtility.GetDefaultSpriteGrayMaterial();
            }
        }
        private void TalentSkillUpdate(int _skillid)
        {
            if (skillId == _skillid)
            {
                Display();
            }
        }
        public void Dispose()
        {
            model.talentSkillUpdate -= TalentSkillUpdate;
        }
        private void SelectSkill()
        {
            if (skillId != 0)
            {
                model.selectSkill = skillId;
            }
        }
    }
}
System/Skill/TalentSkillBehaviour.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 5359bc88b0bc7cd439412a99efda7dbb
timeCreated: 1533007965
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/Skill/TalentSkillScriptableObject.cs
New file
@@ -0,0 +1,60 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
#if UNITY_EDITOR
using UnityEditor;
#endif
public class TalentSkillScriptableObject : ScriptableObject
{
    [SerializeField] Vector3[] m_SkillPositions;
    [SerializeField] Arrow[] m_Arows;
    [SerializeField] float m_ContentHeight;
    public Vector3 GetSkillPosition(int index)
    {
        if (m_SkillPositions != null && index >= 0 && index < m_SkillPositions.Length)
        {
            return m_SkillPositions[index];
        }
        return Vector3.zero;
    }
    public Arrow GetArrow(int index)
    {
        if (m_Arows != null && index >= 0 && index < m_Arows.Length)
        {
            return m_Arows[index];
        }
        return default(Arrow);
    }
    public float contentHeight
    {
        get { return m_ContentHeight; }
    }
    [Serializable]
    public struct Arrow
    {
        public int type;
        public Vector3 position;
        public Vector3 eulerAngle;
        public Vector2 sizeDelta;
    }
#if UNITY_EDITOR
    [MenuItem("策划工具/生成天赋技能配置文件")]
    static void BuildMeridianConfig()
    {
        TalentSkillScriptableObject _config = CreateInstance<TalentSkillScriptableObject>();
        string _path = StringUtility.Contact("Assets/Resources/ScriptableObject/Config/",
                                      "TalentSkill_",
                                      ".asset");
        AssetDatabase.CreateAsset(_config, _path);
        AssetDatabase.Refresh();
        ProjectWindowUtil.ShowCreatedAsset(_config);
    }
#endif
}
System/Skill/TalentSkillScriptableObject.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: c1f6808b9ef29b446814b830489cc141
timeCreated: 1533016268
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/Skill/TalentWin.cs
New file
@@ -0,0 +1,340 @@
//--------------------------------------------------------
//    [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] TalentButtonBehaviour m_TalentAtkBehaviour;
        [SerializeField] TalentButtonBehaviour m_TalentDefBehaviour;
        [SerializeField] TalentButtonBehaviour m_TalentGeneralBehaviour;
        [SerializeField] TalentSkillScriptableObject m_TalentAtkConfig;
        [SerializeField] TalentSkillScriptableObject m_TalentDefConfig;
        [SerializeField] TalentSkillScriptableObject m_TalentGeneralConfig;
        [SerializeField] RectTransform m_ContainerSelect;
        [SerializeField] Button m_TalentSeriesSelect;
        [SerializeField] Text m_TalentSeries;
        [SerializeField] ScrollRect m_SkillScroller;
        [SerializeField] RectTransform m_SkillContent;
        [SerializeField] TalentSkillBehaviour[] m_SkillBehaviours;
        [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;
        TalentModel model { get { return ModelCenter.Instance.GetModel<TalentModel>(); } }
        #region Built-in
        protected override void BindController()
        {
        }
        protected override void AddListeners()
        {
            m_TalentSeriesSelect.onClick.AddListener(TalentSelectSeries);
            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;
            m_TalentAtkBehaviour.Dispose();
            m_TalentDefBehaviour.Dispose();
            m_TalentGeneralBehaviour.Dispose();
            for (int i = 0; i < m_SkillBehaviours.Length; i++)
            {
                m_SkillBehaviours[i].Dispose();
            }
        }
        protected override void OnAfterClose()
        {
        }
        #endregion
        void Display()
        {
            m_TalentAtkBehaviour.Display(model.selectSeries, 1);
            m_TalentDefBehaviour.Display(model.selectSeries, 2);
            m_TalentGeneralBehaviour.Display(model.selectSeries, 3);
            DisplaySkills();
            DisplaySeries();
            DisplaySelectSkill();
            DisplayTalentPoint();
        }
        void DisplaySkills()
        {
            var job = PlayerDatas.Instance.baseData.Job;
            List<int> talentSkills;
            model.TryGetTalents(job, model.selectSeries, model.selectTalentType, out talentSkills);
            var config = model.selectTalentType == 1 ? m_TalentAtkConfig : model.selectTalentType == 2 ?
                m_TalentDefConfig : m_TalentGeneralConfig;
            m_SkillScroller.verticalNormalizedPosition = 1;
            m_SkillContent.sizeDelta = m_SkillContent.sizeDelta.SetY(config == null ? 0 : config.contentHeight);
            for (int i = 0; i < m_SkillBehaviours.Length; i++)
            {
                if (talentSkills != null && i < talentSkills.Count)
                {
                    m_SkillBehaviours[i].gameObject.SetActive(true);
                    var position = config == null ? Vector3.zero : config.GetSkillPosition(i);
                    m_SkillBehaviours[i].transform.localPosition = position;
                    m_SkillBehaviours[i].Display(talentSkills[i]);
                }
                else
                {
                    m_SkillBehaviours[i].Dispose();
                    m_SkillBehaviours[i].gameObject.SetActive(false);
                }
            }
            model.selectSkill = talentSkills != null ? talentSkills[0] : 0;
        }
        void DisplaySeries()
        {
            var point = 0;
            point += model.GetTalentTypeTotalPoint(model.selectSeries, 1);
            point += model.GetTalentTypeTotalPoint(model.selectSeries, 2);
            point += model.GetTalentTypeTotalPoint(model.selectSeries, 3);
            m_TalentSeries.text = model.selectSeries == 1 ? string.Format("智力天赋({0})", point) : string.Format("力量天赋({0})", point);
        }
        void DisplaySelectSkill()
        {
            m_ContainerSelect.gameObject.SetActive(false);
            var job = PlayerDatas.Instance.baseData.Job;
            List<int> talentSkills;
            model.TryGetTalents(job, model.selectSeries, model.selectTalentType, out talentSkills);
            if (talentSkills != null)
            {
                var index = talentSkills.FindIndex((x) =>
                {
                    return x == model.selectSkill;
                });
                if (index != -1)
                {
                    if (index < m_SkillBehaviours.Length)
                    {
                        m_ContainerSelect.gameObject.SetActive(true);
                        m_ContainerSelect.SetParent(m_SkillBehaviours[index].transform);
                        m_ContainerSelect.localPosition = Vector3.zero;
                    }
                }
            }
            DisplaySkillInfo();
            DisplayConditions();
            DisplaySkillEffect();
        }
        void DisplayConditions()
        {
            TalentSkill talent;
            var index = 0;
            if (model.TryGetTalent(model.selectSkill, out talent))
            {
                var talentConfig = ConfigManager.Instance.GetTemplate<TalentConfig>(talent.skillId + talent.level);
                var skillConfig = ConfigManager.Instance.GetTemplate<SkillConfig>(talent.skillId + talent.level);
                if (talentConfig != null)
                {
                    if (talentConfig.property != 0 && index < m_SelectConditions.Length)
                    {
                        var propertyConfig = ConfigManager.Instance.GetTemplate<PlayerPropertyConfig>(talentConfig.property);
                        m_SelectConditions[index].gameObject.SetActive(true);
                        m_SelectConditions[index].text = StringUtility.Contact(
                            string.Format("需要{0}点:", propertyConfig.Name),
                            UIHelper.GetPropertyMapPlayerData((AttrEnum)talentConfig.property),
                            "/", talentConfig.propertyValue
                            );
                        index++;
                    }
                    if (talentConfig.seriesCondition != 0 && index < m_SelectConditions.Length)
                    {
                        m_SelectConditions[index].gameObject.SetActive(true);
                        m_SelectConditions[index].text = StringUtility.Contact(0, "/", talentConfig.point);
                        index++;
                    }
                }
                if (skillConfig != null && index < m_SelectConditions.Length)
                {
                    TalentSkill learnTalent;
                    if (skillConfig.LearnSkillReq != 0 && model.TryGetTalent(skillConfig.LearnSkillReq, out learnTalent))
                    {
                        var learnSkillConfig = ConfigManager.Instance.GetTemplate<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 = ConfigManager.Instance.GetTemplate<SkillConfig>(talent.skillId + talent.level);
                m_SelectSkillIcon.SetSprite(config.IconName);
                m_SelectSkillLevel.text = StringUtility.Contact(talent.level, "/", talent.max);
                m_SelectSkillName.text = config.SkillName;
            }
        }
        void DisplaySkillEffect()
        {
            TalentSkill talent;
            if (model.TryGetTalent(model.selectSkill, out talent))
            {
                var config = ConfigManager.Instance.GetTemplate<SkillConfig>(talent.skillId + talent.level);
                m_SelectSkillEffect.text = config.Description;
                m_ContainerNextEffect.gameObject.SetActive(talent.level < talent.max);
                if (talent.level < talent.max)
                {
                    var nextConfig = ConfigManager.Instance.GetTemplate<SkillConfig>(talent.skillId + talent.level + 1);
                    m_SelectNextEffect.text = nextConfig.Description;
                }
            }
        }
        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 TalentSelectSeries()
        {
            model.selectSeries = model.selectSeries == 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()
        {
        }
#if UNITY_EDITOR
        [SerializeField] TalentSkillScriptableObject viewConfig;
        [ContextMenu("预览配置")]
        void ViewPositionConfig()
        {
            if (viewConfig == null)
            {
                return;
            }
            for (int i = 0; i < m_SkillBehaviours.Length; i++)
            {
                m_SkillBehaviours[i].transform.localPosition = viewConfig.GetSkillPosition(i);
            }
        }
#endif
    }
}
System/Skill/TalentWin.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 0bfe355d392770544ad6c5a5d59852f1
timeCreated: 1533002943
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant: