From 0ced6b94425308d2a672fb93e9d245906d1d4879 Mon Sep 17 00:00:00 2001
From: client_linchunjie <461730578@qq.com>
Date: 星期三, 26 九月 2018 13:46:46 +0800
Subject: [PATCH] 3687 天赋功能
---
Core/GameEngine/Model/ConfigManager.cs | 1
System/Skill/TalentSkillBehaviour.cs | 9 +
System/Skill/TalentSeriesBehaviour.cs | 20 +--
System/Skill/TalentModel.cs | 46 ++++++++-
System/WindowBase/ModelCenter.cs | 1
System/Skill/TalentWin.cs | 108 +++++++++++++++++----
System/Skill/TalentTreeScriptable.cs | 80 ++++++++++++---
7 files changed, 211 insertions(+), 54 deletions(-)
diff --git a/Core/GameEngine/Model/ConfigManager.cs b/Core/GameEngine/Model/ConfigManager.cs
index 8358d24..55dd512 100644
--- a/Core/GameEngine/Model/ConfigManager.cs
+++ b/Core/GameEngine/Model/ConfigManager.cs
@@ -192,6 +192,7 @@
AddAsyncTask<DungeonSpecialStateTimeConfig>();
AddAsyncTask<DailyQuestSpecialOpenTimeConfig>();
AddAsyncTask<WHYJRewardConfig>();
+ AddAsyncTask<TalentConfig>();
while (!AllCompleted())
{
var completedCount = 0;
diff --git a/System/Skill/TalentModel.cs b/System/Skill/TalentModel.cs
index 98b552e..e2f68b3 100644
--- a/System/Skill/TalentModel.cs
+++ b/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
diff --git a/System/Skill/TalentSeriesBehaviour.cs b/System/Skill/TalentSeriesBehaviour.cs
index 043dd46..c01548f 100644
--- a/System/Skill/TalentSeriesBehaviour.cs
+++ b/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");
}
}
}
diff --git a/System/Skill/TalentSkillBehaviour.cs b/System/Skill/TalentSkillBehaviour.cs
index ca98738..ac7eb12 100644
--- a/System/Skill/TalentSkillBehaviour.cs
+++ b/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()
diff --git a/System/Skill/TalentTreeScriptable.cs b/System/Skill/TalentTreeScriptable.cs
index 72b11e7..ccdf9b3 100644
--- a/System/Skill/TalentTreeScriptable.cs
+++ b/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;
}
}
diff --git a/System/Skill/TalentWin.cs b/System/Skill/TalentWin.cs
index 4e1972a..6402953 100644
--- a/System/Skill/TalentWin.cs
+++ b/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
}
}
diff --git a/System/WindowBase/ModelCenter.cs b/System/WindowBase/ModelCenter.cs
index e555f65..8999745 100644
--- a/System/WindowBase/ModelCenter.cs
+++ b/System/WindowBase/ModelCenter.cs
@@ -195,6 +195,7 @@
RegisterModel<PrayForDurgModel>();
RegisterModel<FeatureNoticeModel>();
RegisterModel<AwardExchangeModel>();
+ RegisterModel<TalentModel>();
inited = true;
}
--
Gitblit v1.8.0