using System.Collections; using System.Collections.Generic; using UnityEngine; using System; #if UNITY_EDITOR using UnityEditor; #endif namespace Snxxz.UI { public class TalentTreeScriptable : ScriptableObject { [SerializeField] TalentTree talentTrees; [SerializeField] Vector2 m_ContentSizeDelta; [SerializeField] List skillElements; [SerializeField] List arrowElements; public Vector2 contentSizeDelta { get { return m_ContentSizeDelta; } } public TalentElement GetTalentElement(int index) { 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) { return talentTrees.Belong(job, talentType, talentSeries); } [Serializable] public struct TalentTree { public int[] jobs; public int[] talentTypes; public int[] talentSeriess; public bool Belong(int job, int talentType, int 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 Vector3 position; } [Serializable] public struct ArrowElement { public Vector3 position; public Vector3 rotation; public Vector2 sizeDelta; } } #if UNITY_EDITOR public class TalentTreeScriptableEditor : Editor { [MenuItem("策划工具/生成天赋配置文件")] static void BuildConfig() { TalentTreeScriptable config = CreateInstance(); string _path = StringUtility.Contact("Assets/ResourcesOut/Refdata/ScriptableObject/SoTalentTree/", "SoTalentTree_", ".asset"); AssetDatabase.CreateAsset(config, _path); AssetDatabase.Refresh(); ProjectWindowUtil.ShowCreatedAsset(config); } } #endif }