| Core/GameEngine/Model/ConfigManager.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| System/Skill/TalentModel.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| System/Skill/TalentSeriesBehaviour.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| System/Skill/TalentSkillBehaviour.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| System/Skill/TalentTreeScriptable.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| System/Skill/TalentWin.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| System/WindowBase/ModelCenter.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
Core/GameEngine/Model/ConfigManager.cs
@@ -192,6 +192,7 @@ AddAsyncTask<DungeonSpecialStateTimeConfig>(); AddAsyncTask<DailyQuestSpecialOpenTimeConfig>(); AddAsyncTask<WHYJRewardConfig>(); AddAsyncTask<TalentConfig>(); while (!AllCompleted()) { var completedCount = 0; System/Skill/TalentModel.cs
@@ -62,7 +62,7 @@ public override void Init() { //ParseConfig(); ParseConfig(); FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent; } @@ -134,12 +134,22 @@ return talentSkills.TryGetValue(talentId, out talent); } public int GetTalentTypeTotalPoint(int series, int talentType) public int GetTalentTypePoint(int talentType) { var point = 0; for (int i = 1; i <= 3; i++) { point += GetSeriesPoint(talentType, i); } return point; } public int GetSeriesPoint(int talentType,int talentSeries) { var job = (int)Math.Pow(PlayerDatas.Instance.baseData.Job, 2); List<int> list; var point = 0; if (TryGetTalents(job, series, talentType, out list)) if (TryGetTalents(job, talentType, talentSeries, out list)) { for (int i = 0; i < list.Count; i++) { @@ -169,16 +179,16 @@ error = 2; return false; } var talentConfig = Config.Instance.Get<TalentConfig>(talent.skillId + talent.level); var talentConfig = talent.GetTalentConfig(talent.level + 1); if (talentConfig.requireSeriesPoint != 0) { if (GetTalentTypeTotalPoint(talentConfig.requireSeries, talentConfig.type) < talentConfig.requireSeriesPoint) if (GetSeriesPoint(talentConfig.type, talentConfig.requireSeries) < talentConfig.requireSeriesPoint) { error = 4; return false; } } var skillConfig = Config.Instance.Get<SkillConfig>(talent.skillId + talent.level); var skillConfig = talent.GetSkillConfig(talent.level + 1); if (skillConfig.LearnSkillReq != 0) { TalentSkill learnTalent; @@ -238,6 +248,30 @@ this.skillId = skillId; this.maxLevel = maxLevel; } public SkillConfig GetSkillConfig(int level = 0) { if (level > 0) { return Config.Instance.Get<SkillConfig>(skillId + level - 1); } else { return Config.Instance.Get<SkillConfig>(skillId + level); } } public TalentConfig GetTalentConfig(int level = 0) { if (level > 0) { return Config.Instance.Get<TalentConfig>(skillId + level - 1); } else { return Config.Instance.Get<TalentConfig>(skillId + level); } } } public class TalentSeries System/Skill/TalentSeriesBehaviour.cs
@@ -8,15 +8,13 @@ { public class TalentSeriesBehaviour : MonoBehaviour { [SerializeField] int talentSeries; [SerializeField] int talentSeries = 0; [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 series = 0; private void Awake() { @@ -31,22 +29,22 @@ } } public void Display(int _series) public void Display() { series = _series; OnSelectTalentTypeEvnet(); model.OnSelectTalentTypeEvnet -= OnSelectTalentTypeEvnet; model.OnSelectTalentTypeEvnet += OnSelectTalentTypeEvnet; m_Button.image.SetSprite(talentSeries == model.selectSeries ? "Title_TabRight" : "Title_TabDark"); model.OnSelectSeriesEvent -= OnSelectSeriesEvent; model.OnSelectSeriesEvent += OnSelectSeriesEvent; } public void Dispose() { model.OnSelectTalentTypeEvnet -= OnSelectTalentTypeEvnet; model.OnSelectSeriesEvent -= OnSelectSeriesEvent; } private void OnSelectTalentTypeEvnet() private void OnSelectSeriesEvent() { m_Button.image.SetSprite(talentSeries == model.selectTalentType ? "Title_TabRight" : "Title_TabDark"); m_Button.image.SetSprite(talentSeries == model.selectSeries ? "Title_TabRight" : "Title_TabDark"); } } } System/Skill/TalentSkillBehaviour.cs
@@ -28,6 +28,8 @@ skillId = _skillId; model.talentSkillUpdate -= TalentSkillUpdate; model.talentSkillUpdate += TalentSkillUpdate; model.OnSelectSkillEvent -= OnSelectSkillEvent; model.OnSelectSkillEvent += OnSelectSkillEvent; Display(); } @@ -43,6 +45,7 @@ } m_Level.text = StringUtility.Contact(talent.level, "/", talent.maxLevel); m_Icon.material = talent.level > 0 ? MaterialUtility.GetUIDefaultGraphicMaterial() : MaterialUtility.GetDefaultSpriteGrayMaterial(); m_ContainerSelect.gameObject.SetActive(skillId == model.selectSkill); } } @@ -54,9 +57,15 @@ } } private void OnSelectSkillEvent() { m_ContainerSelect.gameObject.SetActive(skillId == model.selectSkill); } public void Dispose() { model.talentSkillUpdate -= TalentSkillUpdate; model.OnSelectSkillEvent -= OnSelectSkillEvent; } private void SelectSkill() System/Skill/TalentTreeScriptable.cs
@@ -9,10 +9,10 @@ { public class TalentTreeScriptable : ScriptableObject { [SerializeField] TalentTree[] talentTrees; [SerializeField] TalentTree talentTrees; [SerializeField] Vector2 m_ContentSizeDelta; [SerializeField] TalentElement[] skillElements; [SerializeField] ArrowElement[] arrowElements; [SerializeField] List<TalentElement> skillElements; [SerializeField] List<ArrowElement> arrowElements; public Vector2 contentSizeDelta { @@ -21,35 +21,83 @@ public TalentElement GetTalentElement(int index) { if (index < skillElements.Length) if (skillElements != null && index < skillElements.Count) { return skillElements[index]; } return default(TalentElement); } #if UNITY_EDITOR public void ApplyTalentElement(int index,Vector3 _position) { if (index >= skillElements.Count) { skillElements.Add(new TalentElement() { position = _position, }); } else { skillElements[index] = new TalentElement() { position = _position, }; } } public void SyncElementsCount(int count) { if (count < skillElements.Count) { skillElements.RemoveRange(count, skillElements.Count - count); } } #endif public bool Belong(int job, int talentType, int talentSeries) { for (int i = 0; i < talentTrees.Length; i++) { if (talentTrees[i].Belong(job, talentType, talentSeries)) { return true; } } return false; return talentTrees.Belong(job, talentType, talentSeries); } [Serializable] public struct TalentTree { public int job; public int talentType; public int talentSeries; public int[] jobs; public int[] talentTypes; public int[] talentSeriess; public bool Belong(int job, int talentType, int talentSeries) { return this.job == job && this.talentType == talentType && this.talentSeries == talentSeries; bool sameJob = false; for (int i = 0; i < jobs.Length; i++) { if (jobs[i] == job) { sameJob = true; break; } } bool sameType = false; for (int i = 0; i < talentTypes.Length; i++) { if (talentTypes[i] == talentType) { sameType = true; break; } } bool sameSeries = false; for (int i = 0; i < talentSeriess.Length; i++) { if (talentSeriess[i] == talentSeries) { sameSeries = true; break; } } return sameJob && sameType && sameSeries; } } System/Skill/TalentWin.cs
@@ -28,10 +28,14 @@ [SerializeField] Image m_SelectSkillIcon; [SerializeField] Text m_SelectSkillLevel; [SerializeField] Text m_SelectSkillName; [SerializeField] RectTransform m_ContainerUnActive; [SerializeField] RectTransform m_ContainerActive; [SerializeField] RectTransform m_ContainerBetter; [SerializeField] RectTransform m_ContainerMax; [SerializeField] Text[] m_SelectConditions; [SerializeField] RectTransform m_ContainerSelectEffect; [SerializeField] Text m_SelectSkillEffect; [SerializeField] RectTransform m_ContainerNextEffect; [SerializeField] Text m_SelectNextEffect; @@ -42,6 +46,7 @@ #if UNITY_EDITOR [SerializeField] TalentTreeScriptable m_EditorScriptable; [SerializeField] bool m_EditorMode; #endif TalentModel model { get { return ModelCenter.Instance.GetModel<TalentModel>(); } } @@ -84,6 +89,10 @@ { m_TalentSeries[i].Dispose(); } for (int i = 0; i < m_TalentSkills.Length; i++) { m_TalentSkills[i].Dispose(); } #if UNITY_EDITOR if (m_EditorScriptable != null) @@ -102,7 +111,7 @@ { base.LateUpdate(); #if UNITY_EDITOR if (m_EditorScriptable != null) if (m_EditorMode && m_EditorScriptable != null) { DisplayTalentLayout(m_EditorScriptable); } @@ -113,27 +122,54 @@ { for (int i = 0; i < m_TalentSeries.Length; i++) { m_TalentSeries[i].Display(model.selectSeries); m_TalentSeries[i].Display(); } DisplaySkills(); DisplaySeries(); DisplayTalentType(); DisplaySelectSkill(); DisplayTalentPoint(); } void DisplaySkills() { var job = PlayerDatas.Instance.baseData.Job; List<int> talents = null; model.TryGetTalents(job, model.selectTalentType, model.selectSeries, out talents); for (int i = 0; i < m_TalentConfigs.Length; i++) { if (m_TalentConfigs[i].Belong(job, model.selectTalentType, model.selectSeries)) { DisplayTalentLayout(m_TalentConfigs[i]); break; } } if (talents != null && talents.Count > 0) { model.selectSkill = talents[0]; } m_Scroller.verticalNormalizedPosition = 1; for (int i = 0; i < m_TalentSkills.Length; i++) { if (talents != null && i < talents.Count) { m_TalentSkills[i].gameObject.SetActive(true); m_TalentSkills[i].Display(talents[i]); } else { m_TalentSkills[i].Dispose(); m_TalentSkills[i].gameObject.SetActive(false); } } } void DisplaySeries() void DisplayTalentType() { 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); var point = model.GetTalentTypePoint(model.selectTalentType); m_TalentType.text = model.selectTalentType == 1 ? string.Format("智力天赋({0})", point) : string.Format("力量天赋({0})", point); } void DisplaySelectSkill() @@ -151,8 +187,8 @@ 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); var talentConfig = talent.GetTalentConfig(talent.level + 1); var skillConfig = talent.GetSkillConfig(talent.level + 1); if (talentConfig != null) { if (talentConfig.requireSeriesPoint != 0 && index < m_SelectConditions.Length) @@ -190,7 +226,7 @@ if (model.TryGetTalent(model.selectSkill, out talent)) { m_ContainerSelectSkill.gameObject.SetActive(true); var config = Config.Instance.Get<SkillConfig>(talent.skillId + talent.level); var config = talent.GetSkillConfig(talent.level); m_SelectSkillIcon.SetSprite(config.IconName); m_SelectSkillLevel.text = StringUtility.Contact(talent.level, "/", talent.maxLevel); m_SelectSkillName.text = config.SkillName; @@ -202,12 +238,19 @@ 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); m_ContainerUnActive.gameObject.SetActive(talent.level == 0); m_ContainerActive.gameObject.SetActive(talent.level > 0); m_ContainerBetter.gameObject.SetActive(talent.level < talent.maxLevel); m_ContainerMax.gameObject.SetActive(talent.level >= talent.maxLevel); if (talent.level > 0) { var config = talent.GetSkillConfig(talent.level); m_SelectSkillEffect.text = config.Description; } if (talent.level < talent.maxLevel) { var nextConfig = Config.Instance.Get<SkillConfig>(talent.skillId + talent.level + 1); var nextConfig = talent.GetSkillConfig(talent.level + 1); m_SelectNextEffect.text = nextConfig.Description; } } @@ -249,13 +292,15 @@ private void OnSelectTalentTypeEvnet() { model.selectSeries = 1; DisplaySkills(); DisplaySelectSkill(); } private void OnSelectSeriesEvent() { model.selectTalentType = 1; Display(); DisplaySkills(); DisplaySelectSkill(); } private void OnSelectSkillEvent() @@ -296,6 +341,27 @@ m_TalentSkills[i].transform.localPosition = element.position; } } #if UNITY_EDITOR [ContextMenu("应用位置数据")] void ApplyPositionToScriptable() { if (m_EditorScriptable == null) { return; } var count = 0; for (int i = 0; i < m_TalentSkills.Length; i++) { if (m_TalentSkills[i].gameObject.activeSelf) { m_EditorScriptable.ApplyTalentElement(count, m_TalentSkills[i].transform.localPosition); count++; } } m_EditorScriptable.SyncElementsCount(count); } #endif } } System/WindowBase/ModelCenter.cs
@@ -195,6 +195,7 @@ RegisterModel<PrayForDurgModel>(); RegisterModel<FeatureNoticeModel>(); RegisterModel<AwardExchangeModel>(); RegisterModel<TalentModel>(); inited = true; }