mergemilitary/Assets/ThirdPlugins/EasyTouchBundle/EasyTouchControls/Plugins/Editor/ETCButtonInspector.cs

283 lines
9.7 KiB
C#

using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using UnityEditor;
#if UNITY_5_3
using UnityEditor.SceneManagement;
#endif
[CustomEditor(typeof(ETCButton))]
public class ETCButtonInspector : Editor {
public string[] unityAxes;
void OnEnable(){
var inputManager = AssetDatabase.LoadAllAssetsAtPath("ProjectSettings/InputManager.asset")[0];
SerializedObject obj = new SerializedObject(inputManager);
SerializedProperty axisArray = obj.FindProperty("m_Axes");
if (axisArray.arraySize > 0){
unityAxes = new string[axisArray.arraySize];
for( int i = 0; i < axisArray.arraySize; ++i ){
var axis = axisArray.GetArrayElementAtIndex(i);
unityAxes[i] = axis.FindPropertyRelative("m_Name").stringValue;
}
}
}
public override void OnInspectorGUI(){
ETCButton t = (ETCButton)target;
EditorGUILayout.Space();
t.gameObject.name = EditorGUILayout.TextField("Button name",t.gameObject.name);
t.axis.name = t.gameObject.name;
t.activated = ETCGuiTools.Toggle("Activated",t.activated,true);
t.visible = ETCGuiTools.Toggle("Visible",t.visible,true);
EditorGUILayout.Space();
t.useFixedUpdate = ETCGuiTools.Toggle("Use Fixed Update",t.useFixedUpdate,true);
t.isUnregisterAtDisable = ETCGuiTools.Toggle("Unregister at disabling time",t.isUnregisterAtDisable,true);
#region Position & Size
t.showPSInspector = ETCGuiTools.BeginFoldOut( "Position & Size",t.showPSInspector);
if (t.showPSInspector){
ETCGuiTools.BeginGroup();{
// Anchor
t.anchor = (ETCBase.RectAnchor)EditorGUILayout.EnumPopup( "Anchor",t.anchor);
if (t.anchor != ETCBase.RectAnchor.UserDefined){
t.anchorOffet = EditorGUILayout.Vector2Field("Offset",t.anchorOffet);
}
EditorGUILayout.Space();
// Area sprite ratio
if (t.GetComponent<Image>().sprite != null){
Rect rect = t.GetComponent<Image>().sprite.rect;
float ratio = rect.width / rect.height;
// Area Size
if (ratio>=1){
float s = EditorGUILayout.FloatField("Size", t.rectTransform().rect.width);
t.rectTransform().SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal,s);
t.rectTransform().SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical,s/ratio);
}
else{
float s = EditorGUILayout.FloatField("Size", t.rectTransform().rect.height);
t.rectTransform().SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical,s);
t.rectTransform().SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal,s*ratio);
}
}
}ETCGuiTools.EndGroup();
}
#endregion
#region Behaviour
t.showBehaviourInspector = ETCGuiTools.BeginFoldOut( "Behaviour",t.showBehaviourInspector);
if (t.showBehaviourInspector){
ETCGuiTools.BeginGroup();{
EditorGUILayout.Space();
ETCGuiTools.BeginGroup(5);{
t.enableKeySimulation = ETCGuiTools.Toggle("Enable Unity axes",t.enableKeySimulation,true);
if (t.enableKeySimulation){
t.allowSimulationStandalone = ETCGuiTools.Toggle("Allow Unity axes on standalone",t.allowSimulationStandalone,true);
t.visibleOnStandalone = ETCGuiTools.Toggle("Force visible",t.visibleOnStandalone,true);
}
}ETCGuiTools.EndGroup();
#region General propertie
EditorGUI.indentLevel++;
t.axis.showGeneralInspector = EditorGUILayout.Foldout(t.axis.showGeneralInspector,"General setting");
if (t.axis.showGeneralInspector){
ETCGuiTools.BeginGroup(20);{
EditorGUI.indentLevel--;
t.isSwipeIn = ETCGuiTools.Toggle("Swipe in",t.isSwipeIn,true);
t.isSwipeOut = ETCGuiTools.Toggle("Swipe out",t.isSwipeOut,true);
t.axis.isValueOverTime = ETCGuiTools.Toggle("Value over the time",t.axis.isValueOverTime,true);
if (t.axis.isValueOverTime){
ETCGuiTools.BeginGroup(5);{
t.axis.overTimeStep = EditorGUILayout.FloatField("Step",t.axis.overTimeStep);
t.axis.maxOverTimeValue = EditorGUILayout.FloatField("Max value",t.axis.maxOverTimeValue);
}ETCGuiTools.EndGroup();
}
t.axis.speed = EditorGUILayout.FloatField("Value",t.axis.speed);
EditorGUI.indentLevel++;
}ETCGuiTools.EndGroup();
}
EditorGUI.indentLevel--;
#endregion
#region Direct Action
EditorGUI.indentLevel++;
t.axis.showDirectInspector = EditorGUILayout.Foldout(t.axis.showDirectInspector,"Direction ation");
if (t.axis.showDirectInspector){
ETCGuiTools.BeginGroup(20);{
EditorGUI.indentLevel--;
t.axis.autoLinkTagPlayer = EditorGUILayout.ToggleLeft("Auto link on tag",t.axis.autoLinkTagPlayer, GUILayout.Width(200));
if (t.axis.autoLinkTagPlayer){
t.axis.autoTag = EditorGUILayout.TagField("",t.axis.autoTag);
}
else{
t.axis.directTransform = (Transform)EditorGUILayout.ObjectField("Direct action to",t.axis.directTransform,typeof(Transform),true);
}
EditorGUILayout.Space();
t.axis.actionOn = (ETCAxis.ActionOn)EditorGUILayout.EnumPopup("Action on",t.axis.actionOn);
t.axis.directAction = (ETCAxis.DirectAction ) EditorGUILayout.EnumPopup( "Action",t.axis.directAction);
if (t.axis.directAction != ETCAxis.DirectAction.Jump){
t.axis.axisInfluenced = (ETCAxis.AxisInfluenced) EditorGUILayout.EnumPopup("Affected axis",t.axis.axisInfluenced);
}
else{
EditorGUILayout.HelpBox("Required character controller", MessageType.Info);
t.axis.gravity = EditorGUILayout.FloatField("Gravity",t.axis.gravity);
}
EditorGUI.indentLevel++;
}ETCGuiTools.EndGroup();
}
EditorGUI.indentLevel--;
#endregion
#region Unity axis
EditorGUI.indentLevel++;
t.axis.showSimulatinInspector = EditorGUILayout.Foldout(t.axis.showSimulatinInspector,"Unity axes");
if (t.axis.showSimulatinInspector){
ETCGuiTools.BeginGroup(20);{
EditorGUI.indentLevel--;
int index = System.Array.IndexOf(unityAxes,t.axis.unityAxis );
int tmpIndex = EditorGUILayout.Popup(index,unityAxes);
if (tmpIndex != index){
t.axis.unityAxis = unityAxes[tmpIndex];
}
EditorGUI.indentLevel++;
}ETCGuiTools.EndGroup();
}
EditorGUI.indentLevel--;
#endregion
}ETCGuiTools.EndGroup();
}
#endregion
#region Sprite
t.showSpriteInspector = ETCGuiTools.BeginFoldOut( "Sprites",t.showSpriteInspector);
if (t.showSpriteInspector){
ETCGuiTools.BeginGroup();{
// Normal state
EditorGUILayout.BeginHorizontal();
EditorGUI.BeginChangeCheck ();
t.normalSprite = (Sprite)EditorGUILayout.ObjectField("Normal",t.normalSprite,typeof(Sprite),true,GUILayout.MinWidth(100));
t.normalColor = EditorGUILayout.ColorField("",t.normalColor,GUILayout.Width(50));
if (EditorGUI.EndChangeCheck ()) {
t.GetComponent<Image>().sprite = t.normalSprite;
t.GetComponent<Image>().color = t.normalColor;
}
EditorGUILayout.EndHorizontal();
EditorGUILayout.Space();
if ( t.normalSprite){
Rect spriteRect = new Rect( t.normalSprite.rect.x/ t.normalSprite.texture.width,
t.normalSprite.rect.y/ t.normalSprite.texture.height,
t.normalSprite.rect.width/ t.normalSprite.texture.width,
t.normalSprite.rect.height/ t.normalSprite.texture.height);
GUILayout.Space(8);
Rect lastRect = GUILayoutUtility.GetLastRect();
lastRect.x = 20;
lastRect.width = 100;
lastRect.height = 100;
GUILayout.Space(100);
ETCGuiTools.DrawTextureRectPreview( lastRect,spriteRect,t.normalSprite.texture,Color.white);
}
// Press state
EditorGUILayout.BeginHorizontal();
t.pressedSprite = (Sprite)EditorGUILayout.ObjectField("Pressed",t.pressedSprite,typeof(Sprite),true,GUILayout.MinWidth(100));
t.pressedColor = EditorGUILayout.ColorField("",t.pressedColor,GUILayout.Width(50));
EditorGUILayout.EndHorizontal();
EditorGUILayout.Space();
if (t.pressedSprite){
Rect spriteRect = new Rect( t.pressedSprite.rect.x/ t.pressedSprite.texture.width,
t.pressedSprite.rect.y/ t.pressedSprite.texture.height,
t.pressedSprite.rect.width/ t.pressedSprite.texture.width,
t.pressedSprite.rect.height/ t.pressedSprite.texture.height);
GUILayout.Space(8);
Rect lastRect = GUILayoutUtility.GetLastRect();
lastRect.x = 20;
lastRect.width = 100;
lastRect.height = 100;
GUILayout.Space(100);
ETCGuiTools.DrawTextureRectPreview( lastRect,spriteRect,t.pressedSprite.texture,Color.white);
}
}ETCGuiTools.EndGroup();
}
#endregion
#region Events
t.showEventInspector = ETCGuiTools.BeginFoldOut( "Events",t.showEventInspector);
if (t.showEventInspector){
ETCGuiTools.BeginGroup();{
serializedObject.Update();
SerializedProperty down = serializedObject.FindProperty("onDown");
EditorGUILayout.PropertyField(down, true, null);
serializedObject.ApplyModifiedProperties();
serializedObject.Update();
SerializedProperty press = serializedObject.FindProperty("onPressed");
EditorGUILayout.PropertyField(press, true, null);
serializedObject.ApplyModifiedProperties();
serializedObject.Update();
SerializedProperty pressTime = serializedObject.FindProperty("onPressedValue");
EditorGUILayout.PropertyField(pressTime, true, null);
serializedObject.ApplyModifiedProperties();
serializedObject.Update();
SerializedProperty up = serializedObject.FindProperty("onUp");
EditorGUILayout.PropertyField(up, true, null);
serializedObject.ApplyModifiedProperties();
}ETCGuiTools.EndGroup();
}
#endregion
if (t.anchor != ETCBase.RectAnchor.UserDefined){
t.SetAnchorPosition();
}
if (GUI.changed){
EditorUtility.SetDirty(t);
#if UNITY_5_3
EditorSceneManager.MarkSceneDirty( EditorSceneManager.GetActiveScene());
#endif
}
}
}