Fist Sub
based on aimbot multi seane
This commit is contained in:
@@ -0,0 +1,320 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
using XCharts.Runtime;
|
||||
|
||||
namespace XCharts.Editor
|
||||
{
|
||||
[CustomEditor(typeof(BaseChart), true)]
|
||||
public class BaseChartEditor : UnityEditor.Editor
|
||||
{
|
||||
class Styles
|
||||
{
|
||||
public static readonly GUIContent btnAddSerie = new GUIContent("Add Serie", "");
|
||||
public static readonly GUIContent btnAddComponent = new GUIContent("Add Main Component", "");
|
||||
public static readonly GUIContent btnCovertXYAxis = new GUIContent("Covert XY Axis", "");
|
||||
public static readonly GUIContent btnRebuildChartObject = new GUIContent("Rebuild Chart Object", "");
|
||||
public static readonly GUIContent btnCheckWarning = new GUIContent("Check Warning", "");
|
||||
public static readonly GUIContent btnHideWarning = new GUIContent("Hide Warning", "");
|
||||
}
|
||||
protected BaseChart m_Chart;
|
||||
protected SerializedProperty m_Script;
|
||||
protected SerializedProperty m_EnableTextMeshPro;
|
||||
protected SerializedProperty m_Settings;
|
||||
protected SerializedProperty m_Theme;
|
||||
protected SerializedProperty m_ChartName;
|
||||
protected SerializedProperty m_DebugInfo;
|
||||
protected SerializedProperty m_RaycastTarget;
|
||||
|
||||
protected List<SerializedProperty> m_Components = new List<SerializedProperty>();
|
||||
protected List<SerializedProperty> m_Series = new List<SerializedProperty>();
|
||||
|
||||
private bool m_BaseFoldout;
|
||||
|
||||
private bool m_CheckWarning = false;
|
||||
private int m_LastComponentCount = 0;
|
||||
private int m_LastSerieCount = 0;
|
||||
private string m_VersionString = "";
|
||||
private StringBuilder sb = new StringBuilder();
|
||||
MainComponentListEditor m_ComponentList;
|
||||
SerieListEditor m_SerieList;
|
||||
|
||||
protected virtual void OnEnable()
|
||||
{
|
||||
if (target == null) return;
|
||||
m_Chart = (BaseChart) target;
|
||||
m_Script = serializedObject.FindProperty("m_Script");
|
||||
m_EnableTextMeshPro = serializedObject.FindProperty("m_EnableTextMeshPro");
|
||||
m_ChartName = serializedObject.FindProperty("m_ChartName");
|
||||
m_Theme = serializedObject.FindProperty("m_Theme");
|
||||
m_Settings = serializedObject.FindProperty("m_Settings");
|
||||
m_DebugInfo = serializedObject.FindProperty("m_DebugInfo");
|
||||
m_RaycastTarget = serializedObject.FindProperty("m_RaycastTarget");
|
||||
|
||||
RefreshComponent();
|
||||
m_ComponentList = new MainComponentListEditor(this);
|
||||
m_ComponentList.Init(m_Chart, serializedObject, m_Components);
|
||||
|
||||
RefreshSeries();
|
||||
m_SerieList = new SerieListEditor(this);
|
||||
m_SerieList.Init(m_Chart, serializedObject, m_Series);
|
||||
|
||||
m_VersionString = "v" + XChartsMgr.fullVersion;
|
||||
if (m_EnableTextMeshPro.boolValue)
|
||||
m_VersionString += "-tmp";
|
||||
}
|
||||
|
||||
public List<SerializedProperty> RefreshComponent()
|
||||
{
|
||||
m_Components.Clear();
|
||||
serializedObject.UpdateIfRequiredOrScript();
|
||||
foreach (var kv in m_Chart.typeListForComponent)
|
||||
{
|
||||
InitComponent(kv.Value.Name);
|
||||
}
|
||||
return m_Components;
|
||||
}
|
||||
|
||||
public List<SerializedProperty> RefreshSeries()
|
||||
{
|
||||
m_Series.Clear();
|
||||
serializedObject.UpdateIfRequiredOrScript();
|
||||
foreach (var kv in m_Chart.typeListForSerie)
|
||||
{
|
||||
InitSerie(kv.Value.Name);
|
||||
}
|
||||
return m_Series;
|
||||
}
|
||||
|
||||
public override void OnInspectorGUI()
|
||||
{
|
||||
if (m_Chart == null && target == null)
|
||||
{
|
||||
base.OnInspectorGUI();
|
||||
return;
|
||||
}
|
||||
serializedObject.UpdateIfRequiredOrScript();
|
||||
if (m_LastComponentCount != m_Chart.components.Count)
|
||||
{
|
||||
m_LastComponentCount = m_Chart.components.Count;
|
||||
RefreshComponent();
|
||||
m_ComponentList.UpdateComponentsProperty(m_Components);
|
||||
|
||||
}
|
||||
if (m_LastSerieCount != m_Chart.series.Count)
|
||||
{
|
||||
m_LastSerieCount = m_Chart.series.Count;
|
||||
RefreshSeries();
|
||||
m_SerieList.UpdateSeriesProperty(m_Series);
|
||||
}
|
||||
OnStartInspectorGUI();
|
||||
OnDebugInspectorGUI();
|
||||
EditorGUILayout.Space();
|
||||
serializedObject.ApplyModifiedProperties();
|
||||
}
|
||||
|
||||
protected virtual void OnStartInspectorGUI()
|
||||
{
|
||||
ShowVersion();
|
||||
m_BaseFoldout = ChartEditorHelper.DrawHeader("Base", m_BaseFoldout, false, null, null);
|
||||
if (m_BaseFoldout)
|
||||
{
|
||||
EditorGUILayout.PropertyField(m_Script);
|
||||
EditorGUILayout.PropertyField(m_ChartName);
|
||||
EditorGUILayout.PropertyField(m_RaycastTarget);
|
||||
if (XChartsMgr.IsRepeatChartName(m_Chart, m_ChartName.stringValue))
|
||||
{
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
EditorGUILayout.HelpBox("chart name is repeated: " + m_ChartName.stringValue, MessageType.Error);
|
||||
EditorGUILayout.EndHorizontal();
|
||||
}
|
||||
}
|
||||
EditorGUILayout.PropertyField(m_Theme);
|
||||
EditorGUILayout.PropertyField(m_Settings);
|
||||
m_ComponentList.OnGUI();
|
||||
m_SerieList.OnGUI();
|
||||
}
|
||||
|
||||
protected virtual void OnDebugInspectorGUI()
|
||||
{
|
||||
EditorGUILayout.PropertyField(m_DebugInfo, true);
|
||||
EditorGUILayout.Space();
|
||||
AddSerie();
|
||||
AddComponent();
|
||||
CheckWarning();
|
||||
}
|
||||
|
||||
protected void PropertyComponnetList(SerializedProperty prop)
|
||||
{
|
||||
for (int i = 0; i < prop.arraySize; i++)
|
||||
{
|
||||
EditorGUILayout.PropertyField(prop.GetArrayElementAtIndex(i), true);
|
||||
}
|
||||
}
|
||||
|
||||
private void InitComponent(string propName)
|
||||
{
|
||||
var prop = serializedObject.FindProperty(propName);
|
||||
for (int i = 0; i < prop.arraySize; i++)
|
||||
{
|
||||
m_Components.Add(prop.GetArrayElementAtIndex(i));
|
||||
}
|
||||
m_Components.Sort((a, b) => { return a.propertyPath.CompareTo(b.propertyPath); });
|
||||
}
|
||||
|
||||
private void InitSerie(string propName)
|
||||
{
|
||||
var prop = serializedObject.FindProperty(propName);
|
||||
for (int i = 0; i < prop.arraySize; i++)
|
||||
{
|
||||
m_Series.Add(prop.GetArrayElementAtIndex(i));
|
||||
}
|
||||
m_Series.Sort(delegate(SerializedProperty a, SerializedProperty b)
|
||||
{
|
||||
var index1 = a.FindPropertyRelative("m_Index").intValue;
|
||||
var index2 = b.FindPropertyRelative("m_Index").intValue;
|
||||
return index1.CompareTo(index2);
|
||||
});
|
||||
}
|
||||
|
||||
private void ShowVersion()
|
||||
{
|
||||
EditorGUILayout.HelpBox(m_VersionString, MessageType.None);
|
||||
}
|
||||
|
||||
private void AddComponent()
|
||||
{
|
||||
if (GUILayout.Button(Styles.btnAddComponent))
|
||||
{
|
||||
var menu = new GenericMenu();
|
||||
foreach (var type in GetMainComponentTypeNames())
|
||||
{
|
||||
var title = ChartEditorHelper.GetContent(type.Name);
|
||||
bool exists = !m_Chart.CanAddChartComponent(type);
|
||||
if (!exists)
|
||||
menu.AddItem(title, false, () =>
|
||||
{
|
||||
m_ComponentList.AddChartComponent(type);
|
||||
});
|
||||
else
|
||||
{
|
||||
menu.AddDisabledItem(title);
|
||||
}
|
||||
}
|
||||
|
||||
menu.ShowAsContext();
|
||||
}
|
||||
}
|
||||
private void AddSerie()
|
||||
{
|
||||
if (GUILayout.Button(Styles.btnAddSerie))
|
||||
{
|
||||
var menu = new GenericMenu();
|
||||
foreach (var type in GetSerieTypeNames())
|
||||
{
|
||||
var title = ChartEditorHelper.GetContent(type.Name);
|
||||
if (m_Chart.CanAddSerie(type))
|
||||
{
|
||||
menu.AddItem(title, false, () =>
|
||||
{
|
||||
m_SerieList.AddSerie(type);
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
menu.AddDisabledItem(title);
|
||||
}
|
||||
}
|
||||
menu.ShowAsContext();
|
||||
}
|
||||
}
|
||||
|
||||
private List<Type> GetMainComponentTypeNames()
|
||||
{
|
||||
var list = new List<Type>();
|
||||
var typeMap = RuntimeUtil.GetAllTypesDerivedFrom<MainComponent>();
|
||||
foreach (var kvp in typeMap)
|
||||
{
|
||||
var type = kvp;
|
||||
if (RuntimeUtil.HasSubclass(type)) continue;
|
||||
|
||||
if (type.IsDefined(typeof(ComponentHandlerAttribute), false))
|
||||
{
|
||||
var attribute = type.GetAttribute<ComponentHandlerAttribute>();
|
||||
if (attribute != null && attribute.handler != null)
|
||||
list.Add(type);
|
||||
}
|
||||
else
|
||||
{
|
||||
list.Add(type);
|
||||
}
|
||||
}
|
||||
list.Sort((a, b) => { return a.Name.CompareTo(b.Name); });
|
||||
return list;
|
||||
}
|
||||
private List<Type> GetSerieTypeNames()
|
||||
{
|
||||
var list = new List<Type>();
|
||||
var typeMap = RuntimeUtil.GetAllTypesDerivedFrom<Serie>();
|
||||
foreach (var kvp in typeMap)
|
||||
{
|
||||
var type = kvp;
|
||||
if (type.IsDefined(typeof(SerieHandlerAttribute), false))
|
||||
list.Add(type);
|
||||
}
|
||||
list.Sort((a, b) => { return a.Name.CompareTo(b.Name); });
|
||||
return list;
|
||||
}
|
||||
|
||||
private void CheckWarning()
|
||||
{
|
||||
if (m_Chart.HasChartComponent<XAxis>() && m_Chart.HasChartComponent<YAxis>())
|
||||
{
|
||||
if (GUILayout.Button(Styles.btnCovertXYAxis))
|
||||
m_Chart.CovertXYAxis(0);
|
||||
}
|
||||
if (GUILayout.Button(Styles.btnRebuildChartObject))
|
||||
{
|
||||
m_Chart.RebuildChartObject();
|
||||
}
|
||||
if (m_CheckWarning)
|
||||
{
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
if (GUILayout.Button(Styles.btnCheckWarning))
|
||||
{
|
||||
m_CheckWarning = true;
|
||||
m_Chart.CheckWarning();
|
||||
}
|
||||
if (GUILayout.Button(Styles.btnHideWarning))
|
||||
{
|
||||
m_CheckWarning = false;
|
||||
}
|
||||
EditorGUILayout.EndHorizontal();
|
||||
sb.Length = 0;
|
||||
sb.AppendFormat("v{0}", XChartsMgr.fullVersion);
|
||||
if (!string.IsNullOrEmpty(m_Chart.warningInfo))
|
||||
{
|
||||
sb.AppendLine();
|
||||
sb.Append(m_Chart.warningInfo);
|
||||
}
|
||||
else
|
||||
{
|
||||
sb.AppendLine();
|
||||
sb.Append("Perfect! No warning!");
|
||||
}
|
||||
EditorGUILayout.HelpBox(sb.ToString(), MessageType.Warning);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (GUILayout.Button(Styles.btnCheckWarning))
|
||||
{
|
||||
m_CheckWarning = true;
|
||||
m_Chart.CheckWarning();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d7f1cff1e5bae244a872040086b1cfa8
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Reference in New Issue
Block a user