| | |
| | | {
|
| | | public class TalentTreeScriptable : ScriptableObject
|
| | | {
|
| | | [SerializeField] TalentTree[] talentTrees;
|
| | | [SerializeField] TalentElement[] talentElements;
|
| | | [SerializeField] TalentTree talentTrees;
|
| | | [SerializeField] Vector2 m_ContentSizeDelta;
|
| | | [SerializeField] List<TalentElement> skillElements;
|
| | | [SerializeField] List<ArrowElement> arrowElements;
|
| | |
|
| | | public Vector2 contentSizeDelta
|
| | | {
|
| | | get { return m_ContentSizeDelta; }
|
| | | }
|
| | |
|
| | | public int arrowCount
|
| | | {
|
| | | get { return arrowElements == null ? 0 : arrowElements.Count; }
|
| | | }
|
| | |
|
| | | public int skillCount
|
| | | {
|
| | | get { return skillElements == null ? 0 : skillElements.Count; }
|
| | | }
|
| | |
|
| | | public TalentElement GetTalentElement(int index)
|
| | | {
|
| | | if (skillElements != null && index < skillElements.Count)
|
| | | {
|
| | | return skillElements[index];
|
| | | }
|
| | | return default(TalentElement);
|
| | | }
|
| | |
|
| | | public ArrowElement GetArrowElement(int index)
|
| | | {
|
| | | if (arrowElements != null && index < arrowElements.Count)
|
| | | {
|
| | | return arrowElements[index];
|
| | | }
|
| | | return default(ArrowElement);
|
| | | }
|
| | |
|
| | | public float GetPercentBySkillElement(int index, float viewHeight, float offset)
|
| | | {
|
| | | if (skillElements != null && index < skillElements.Count)
|
| | | {
|
| | | var element = skillElements[index];
|
| | | var height = contentSizeDelta.y - Mathf.Abs(element.position.y);
|
| | | var percent = Mathf.Clamp01((height - viewHeight) / (contentSizeDelta.y - viewHeight));
|
| | | return Mathf.Clamp01(percent + (offset / (contentSizeDelta.y - viewHeight)));//偏移
|
| | | }
|
| | | return 1;
|
| | | }
|
| | |
|
| | | #if UNITY_EDITOR
|
| | | public void ApplyTalentElement(int index,Vector3 _position)
|
| | | {
|
| | | if (skillElements == null)
|
| | | {
|
| | | skillElements = new List<TalentElement>();
|
| | | }
|
| | | var element = new TalentElement()
|
| | | {
|
| | | position = _position,
|
| | | };
|
| | | if (index >= skillElements.Count)
|
| | | {
|
| | | skillElements.Add(element);
|
| | | }
|
| | | else
|
| | | {
|
| | | skillElements[index] = element;
|
| | | }
|
| | | }
|
| | |
|
| | | public void SyncTalentElementsCount(int count)
|
| | | {
|
| | | if (count < skillElements.Count)
|
| | | {
|
| | | skillElements.RemoveRange(count, skillElements.Count - count);
|
| | | }
|
| | | }
|
| | |
|
| | | public void ApplyArrowElement(int index, Vector3 _position, Vector2 _sizeDelta, Vector3 _rotation, string _iconKey)
|
| | | {
|
| | | if (arrowElements == null)
|
| | | {
|
| | | arrowElements = new List<ArrowElement>();
|
| | | }
|
| | | var element = new ArrowElement()
|
| | | {
|
| | | position = _position,
|
| | | sizeDelta = _sizeDelta,
|
| | | rotation = _rotation,
|
| | | iconKey = _iconKey,
|
| | | };
|
| | | if (index >= arrowElements.Count)
|
| | | {
|
| | | arrowElements.Add(element);
|
| | | }
|
| | | else
|
| | | {
|
| | | arrowElements[index] = element;
|
| | | }
|
| | | }
|
| | |
|
| | | public void SyncArrowElementsCount(int count)
|
| | | {
|
| | | if (count < arrowElements.Count)
|
| | | {
|
| | | arrowElements.RemoveRange(count, arrowElements.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;
|
| | | }
|
| | | }
|
| | |
|
| | | [Serializable]
|
| | | public struct TalentElement
|
| | | {
|
| | | public int type;
|
| | | public Vector3 position;
|
| | | }
|
| | |
|
| | | [Serializable]
|
| | | public struct ArrowElement
|
| | | {
|
| | | public string iconKey;
|
| | | public Vector3 position;
|
| | | public Vector3 rotation;
|
| | | public Vector2 sizeDelta;
|
| | | }
|
| | | }
|
| | |
|