少年修仙传客户端代码仓库
client_linchunjie
2019-03-04 2a86bfa84ad4ed870703022ea765e29f16d25a08
System/Skill/TalentTreeScriptable.cs
@@ -9,40 +9,175 @@
{
    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;
        }
    }