using System.Collections; 
 | 
using System.Collections.Generic; 
 | 
using UnityEngine; 
 | 
using System.IO; 
 | 
using System; 
 | 
#if UNITY_EDITOR 
 | 
using UnityEditor; 
 | 
#endif 
 | 
public class TreasureMeridianConfig : ScriptableObject 
 | 
{ 
 | 
    [SerializeField] int m_TreasureId = 0; 
 | 
    [SerializeField] int m_StagePointCount = 0; 
 | 
    [SerializeField] List<StagePoint> m_StagePoints = new List<StagePoint>(); 
 | 
  
 | 
    public StagePoint this[int _index] 
 | 
    { 
 | 
        get 
 | 
        { 
 | 
            if (_index < m_StagePoints.Count) 
 | 
            { 
 | 
                return m_StagePoints[_index]; 
 | 
            } 
 | 
            return null; 
 | 
        } 
 | 
    } 
 | 
  
 | 
    public int treasureId 
 | 
    { 
 | 
        get { return m_TreasureId; } 
 | 
        set { m_TreasureId = value; } 
 | 
    } 
 | 
  
 | 
    public int stagePointNum 
 | 
    { 
 | 
        get 
 | 
        { 
 | 
            return m_StagePointCount; 
 | 
        } 
 | 
        set 
 | 
        { 
 | 
            m_StagePointCount = value; 
 | 
            if (m_StagePointCount != m_StagePoints.Count) 
 | 
            { 
 | 
                if (m_StagePointCount > m_StagePoints.Count) 
 | 
                { 
 | 
                    for (int i = m_StagePoints.Count; i < m_StagePointCount; i++) 
 | 
                    { 
 | 
                        m_StagePoints.Add(new StagePoint()); 
 | 
                    } 
 | 
                } 
 | 
                else 
 | 
                { 
 | 
                    for (int i = m_StagePoints.Count - 1; i >= m_StagePointCount; i--) 
 | 
                    { 
 | 
                        StagePoint _point = m_StagePoints[i]; 
 | 
                        m_StagePoints.RemoveAt(i); 
 | 
                        _point = null; 
 | 
                    } 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
    [Serializable] 
 | 
    public class StagePoint 
 | 
    { 
 | 
        public Vector2 position = Vector2.zero; 
 | 
        public float scale = 1f; 
 | 
        public int effect = 0; 
 | 
        public float scaleTweenDelay = 0f; 
 | 
        public float scaleTweenTo = 0.5f; 
 | 
    } 
 | 
  
 | 
#if UNITY_EDITOR 
 | 
    public List<RectTransform> m_Meridians = new List<RectTransform>(); 
 | 
#endif 
 | 
} 
 | 
  
 | 
#if UNITY_EDITOR 
 | 
[CustomEditor(typeof(TreasureMeridianConfig))] 
 | 
public class TreasureMeridianConfigEditor : Editor 
 | 
{ 
 | 
    public override void OnInspectorGUI() 
 | 
    { 
 | 
        var _target = target as TreasureMeridianConfig; 
 | 
        GUILayout.BeginHorizontal(); 
 | 
        GUILayout.Label("法宝id"); 
 | 
        _target.treasureId = EditorGUILayout.IntField(_target.treasureId); 
 | 
        GUILayout.FlexibleSpace(); 
 | 
        GUILayout.EndHorizontal(); 
 | 
  
 | 
        GUILayout.BeginHorizontal(); 
 | 
        GUILayout.Label("经络个数"); 
 | 
        _target.stagePointNum = EditorGUILayout.IntField(_target.stagePointNum); 
 | 
        GUILayout.FlexibleSpace(); 
 | 
        GUILayout.EndHorizontal(); 
 | 
  
 | 
        for (int i = 0; i < _target.stagePointNum; i++) 
 | 
        { 
 | 
            _target[i].position = EditorGUILayout.Vector2Field(StringUtility.Contact("经络", i), _target[i].position); 
 | 
            _target[i].scale = EditorGUILayout.FloatField("缩放比例", _target[i].scale); 
 | 
            _target[i].effect = EditorGUILayout.IntField("特效ID", _target[i].effect); 
 | 
            _target[i].scaleTweenDelay = EditorGUILayout.FloatField("缩放延迟", _target[i].scaleTweenDelay); 
 | 
            _target[i].scaleTweenTo = EditorGUILayout.FloatField("缩放大小", _target[i].scaleTweenTo); 
 | 
            GUILayout.Space(15); 
 | 
        } 
 | 
  
 | 
        if (GUILayout.Button("在界面上生成")) 
 | 
        { 
 | 
            _target.m_Meridians.Clear(); 
 | 
            GameObject parent = GameObject.Find("TreasureLevelUpWin/Container_Default/Container_Display/Container_Level/Container_Meridian"); 
 | 
            if (parent != null) 
 | 
            { 
 | 
                for (int i = 0; i < _target.stagePointNum; i++) 
 | 
                { 
 | 
                    GameObject go = new GameObject(i.ToString()); 
 | 
                    _target.m_Meridians.Add(go.AddMissingComponent<RectTransform>()); 
 | 
                    _target.m_Meridians[i].SetParentEx(parent.transform, Vector3.zero, Quaternion.identity, Vector3.one); 
 | 
                    _target.m_Meridians[i].localPosition = _target[i].position; 
 | 
                    _target.m_Meridians[i].localScale = _target[i].scale * Vector3.one; 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
  
 | 
        if (_target.m_Meridians.Count > 0  
 | 
            && _target.m_Meridians[0] == null) 
 | 
        { 
 | 
            _target.m_Meridians.Clear(); 
 | 
        } 
 | 
        for (int i = 0; i < _target.m_Meridians.Count; i++) 
 | 
        { 
 | 
            if (i < _target.stagePointNum) 
 | 
            { 
 | 
                _target[i].position = _target.m_Meridians[i].localPosition; 
 | 
                _target[i].scale = _target.m_Meridians[i].localScale.x; 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
    [MenuItem("策划工具/生成法宝经络配置文件")] 
 | 
    static void BuildMeridianConfig() 
 | 
    { 
 | 
        TreasureMeridianConfig _config = CreateInstance<TreasureMeridianConfig>(); 
 | 
        string _path = StringUtility.Contact("Assets/ResourcesOut/Refdata/ScriptableObject/SoTreasureMeridian/", 
 | 
                                      "SoTreasureMeridian_", 
 | 
                                      ".asset"); 
 | 
        AssetDatabase.CreateAsset(_config, _path); 
 | 
        AssetDatabase.Refresh(); 
 | 
        ProjectWindowUtil.ShowCreatedAsset(_config); 
 | 
    } 
 | 
} 
 | 
#endif 
 |