Files

343 lines
9.8 KiB
C#
Raw Permalink Normal View History

using UnityEngine;
using System.Collections;
#if UNITY_EDITOR
using UnityEditor;
[CustomEditor (typeof(vehicleInterface))]
public class vehicleInterfaceEditor : Editor
{
SerializedProperty interfaceCanBeEnabled;
SerializedProperty interfaceEnabled;
SerializedProperty vehicle;
SerializedProperty interfaceCanvas;
SerializedProperty interfaceElementList;
SerializedProperty useInterfacePanelInfoList;
SerializedProperty HUDManager;
SerializedProperty interfacePanelParent;
SerializedProperty movePanelSpeed;
SerializedProperty rotatePanelSpeed;
SerializedProperty interfacePanelInfoList;
vehicleInterface manager;
bool expanded;
GUIStyle buttonStyle = new GUIStyle ();
void OnEnable ()
{
interfaceCanBeEnabled = serializedObject.FindProperty ("interfaceCanBeEnabled");
interfaceEnabled = serializedObject.FindProperty ("interfaceEnabled");
vehicle = serializedObject.FindProperty ("vehicle");
interfaceCanvas = serializedObject.FindProperty ("interfaceCanvas");
interfaceElementList = serializedObject.FindProperty ("interfaceElementList");
useInterfacePanelInfoList = serializedObject.FindProperty ("useInterfacePanelInfoList");
HUDManager = serializedObject.FindProperty ("HUDManager");
interfacePanelParent = serializedObject.FindProperty ("interfacePanelParent");
movePanelSpeed = serializedObject.FindProperty ("movePanelSpeed");
rotatePanelSpeed = serializedObject.FindProperty ("rotatePanelSpeed");
interfacePanelInfoList = serializedObject.FindProperty ("interfacePanelInfoList");
manager = (vehicleInterface)target;
}
public override void OnInspectorGUI ()
{
GUILayout.BeginVertical (GUILayout.Height (30));
EditorGUILayout.Space ();
buttonStyle = new GUIStyle (GUI.skin.button);
buttonStyle.fontStyle = FontStyle.Bold;
buttonStyle.fontSize = 12;
GUILayout.BeginVertical ("Main Settings", "window");
EditorGUILayout.PropertyField (interfaceCanBeEnabled);
EditorGUILayout.PropertyField (interfaceEnabled);
EditorGUILayout.PropertyField (vehicle);
EditorGUILayout.PropertyField (interfaceCanvas);
GUILayout.EndVertical ();
EditorGUILayout.Space ();
GUILayout.BeginVertical ("Interface Elements List", "window");
showMainInterfaceElementList (interfaceElementList);
GUILayout.EndVertical ();
EditorGUILayout.Space ();
GUILayout.BeginVertical ("Interface Panel Info List", "window");
EditorGUILayout.PropertyField (useInterfacePanelInfoList);
if (useInterfacePanelInfoList.boolValue) {
EditorGUILayout.PropertyField (HUDManager);
EditorGUILayout.PropertyField (interfacePanelParent);
EditorGUILayout.PropertyField (movePanelSpeed);
EditorGUILayout.PropertyField (rotatePanelSpeed);
EditorGUILayout.Space ();
showInterfacePanelInfoList (interfacePanelInfoList);
}
GUILayout.EndVertical ();
EditorGUILayout.Space ();
GUILayout.EndVertical ();
if (GUI.changed) {
serializedObject.ApplyModifiedProperties ();
}
EditorGUILayout.Space ();
}
void showInterfacePanelInfoList (SerializedProperty list)
{
GUILayout.BeginVertical ();
EditorGUILayout.Space ();
if (GUILayout.Button ("Show/Hide " + list.displayName, buttonStyle)) {
list.isExpanded = !list.isExpanded;
}
EditorGUILayout.Space ();
if (list.isExpanded) {
EditorGUILayout.Space ();
GUILayout.Label ("Number of Elements: " + list.arraySize);
EditorGUILayout.Space ();
GUILayout.BeginHorizontal ();
if (GUILayout.Button ("Add Element")) {
manager.addInterfaceElement ();
}
if (GUILayout.Button ("Clear")) {
list.arraySize = 0;
}
GUILayout.EndHorizontal ();
EditorGUILayout.Space ();
GUILayout.BeginHorizontal ();
if (GUILayout.Button ("Expand All")) {
for (int i = 0; i < list.arraySize; i++) {
list.GetArrayElementAtIndex (i).isExpanded = true;
}
}
if (GUILayout.Button ("Collapse All")) {
for (int i = 0; i < list.arraySize; i++) {
list.GetArrayElementAtIndex (i).isExpanded = false;
}
}
GUILayout.EndHorizontal ();
EditorGUILayout.Space ();
for (int i = 0; i < list.arraySize; i++) {
expanded = false;
GUILayout.BeginHorizontal ();
GUILayout.BeginHorizontal ("box");
EditorGUILayout.Space ();
if (i < list.arraySize && i >= 0) {
EditorGUILayout.BeginVertical ();
EditorGUILayout.PropertyField (list.GetArrayElementAtIndex (i), false);
if (list.GetArrayElementAtIndex (i).isExpanded) {
showInterfacePanelInfoListElement (list.GetArrayElementAtIndex (i));
expanded = true;
}
EditorGUILayout.Space ();
GUILayout.EndVertical ();
}
GUILayout.EndHorizontal ();
if (expanded) {
GUILayout.BeginVertical ();
} else {
GUILayout.BeginHorizontal ();
}
if (GUILayout.Button ("x")) {
list.DeleteArrayElementAtIndex (i);
}
if (GUILayout.Button ("v")) {
if (i >= 0) {
list.MoveArrayElement (i, i + 1);
}
}
if (GUILayout.Button ("^")) {
if (i < list.arraySize) {
list.MoveArrayElement (i, i - 1);
}
}
if (expanded) {
GUILayout.EndVertical ();
} else {
GUILayout.EndHorizontal ();
}
GUILayout.EndHorizontal ();
}
}
GUILayout.EndVertical ();
}
void showInterfacePanelInfoListElement (SerializedProperty list)
{
GUILayout.BeginVertical ("box");
EditorGUILayout.PropertyField (list.FindPropertyRelative ("Name"));
EditorGUILayout.PropertyField (list.FindPropertyRelative ("uiRectTransform"));
EditorGUILayout.PropertyField (list.FindPropertyRelative ("panelParent"));
GUILayout.EndVertical ();
}
void showMainInterfaceElementList (SerializedProperty list)
{
GUILayout.BeginVertical ();
EditorGUILayout.Space ();
if (GUILayout.Button ("Show/Hide " + list.displayName, buttonStyle)) {
list.isExpanded = !list.isExpanded;
}
EditorGUILayout.Space ();
if (list.isExpanded) {
EditorGUILayout.Space ();
GUILayout.Label ("Number of Elements: " + list.arraySize);
EditorGUILayout.Space ();
GUILayout.BeginHorizontal ();
if (GUILayout.Button ("Add Element")) {
list.arraySize++;
}
if (GUILayout.Button ("Clear")) {
list.arraySize = 0;
}
GUILayout.EndHorizontal ();
EditorGUILayout.Space ();
GUILayout.BeginHorizontal ();
if (GUILayout.Button ("Expand All")) {
for (int i = 0; i < list.arraySize; i++) {
list.GetArrayElementAtIndex (i).isExpanded = true;
}
}
if (GUILayout.Button ("Collapse All")) {
for (int i = 0; i < list.arraySize; i++) {
list.GetArrayElementAtIndex (i).isExpanded = false;
}
}
GUILayout.EndHorizontal ();
EditorGUILayout.Space ();
for (int i = 0; i < list.arraySize; i++) {
expanded = false;
GUILayout.BeginHorizontal ();
GUILayout.BeginHorizontal ("box");
EditorGUILayout.Space ();
if (i < list.arraySize && i >= 0) {
EditorGUILayout.BeginVertical ();
EditorGUILayout.PropertyField (list.GetArrayElementAtIndex (i), false);
if (list.GetArrayElementAtIndex (i).isExpanded) {
showMainInterfaceElementListElement (list.GetArrayElementAtIndex (i));
expanded = true;
}
EditorGUILayout.Space ();
GUILayout.EndVertical ();
}
GUILayout.EndHorizontal ();
if (expanded) {
GUILayout.BeginVertical ();
} else {
GUILayout.BeginHorizontal ();
}
if (GUILayout.Button ("x")) {
list.DeleteArrayElementAtIndex (i);
}
if (GUILayout.Button ("v")) {
if (i >= 0) {
list.MoveArrayElement (i, i + 1);
}
}
if (GUILayout.Button ("^")) {
if (i < list.arraySize) {
list.MoveArrayElement (i, i - 1);
}
}
if (expanded) {
GUILayout.EndVertical ();
} else {
GUILayout.EndHorizontal ();
}
GUILayout.EndHorizontal ();
}
}
GUILayout.EndVertical ();
}
void showMainInterfaceElementListElement (SerializedProperty list)
{
GUILayout.BeginVertical ("box");
EditorGUILayout.PropertyField (list.FindPropertyRelative ("Name"));
EditorGUILayout.PropertyField (list.FindPropertyRelative ("uiElement"));
EditorGUILayout.PropertyField (list.FindPropertyRelative ("disableWhenVehicleOff"));
EditorGUILayout.PropertyField (list.FindPropertyRelative ("eventSendValues"));
if (list.FindPropertyRelative ("eventSendValues").boolValue) {
GUILayout.BeginVertical ("Send Amount Settings", "window");
EditorGUILayout.PropertyField (list.FindPropertyRelative ("containsAmount"));
if (list.FindPropertyRelative ("containsAmount").boolValue) {
EditorGUILayout.PropertyField (list.FindPropertyRelative ("containsRange"));
EditorGUILayout.PropertyField (list.FindPropertyRelative ("range"));
EditorGUILayout.PropertyField (list.FindPropertyRelative ("currentAmountValue"));
EditorGUILayout.PropertyField (list.FindPropertyRelative ("eventToCallAmount"));
}
GUILayout.EndVertical ();
EditorGUILayout.Space ();
GUILayout.BeginVertical ("Send Bool Settings", "window");
EditorGUILayout.PropertyField (list.FindPropertyRelative ("containsBool"));
if (list.FindPropertyRelative ("containsBool").boolValue) {
EditorGUILayout.PropertyField (list.FindPropertyRelative ("currentBoolValue"));
EditorGUILayout.PropertyField (list.FindPropertyRelative ("setValueOnText"));
if (list.FindPropertyRelative ("setValueOnText").boolValue) {
EditorGUILayout.PropertyField (list.FindPropertyRelative ("valuetText"));
}
EditorGUILayout.PropertyField (list.FindPropertyRelative ("useCustomValueOnText"));
if (list.FindPropertyRelative ("useCustomValueOnText").boolValue) {
EditorGUILayout.PropertyField (list.FindPropertyRelative ("boolActiveCustomText"));
EditorGUILayout.PropertyField (list.FindPropertyRelative ("boolNoActiveCustomText"));
}
EditorGUILayout.PropertyField (list.FindPropertyRelative ("eventToCallBool"));
}
GUILayout.EndVertical ();
EditorGUILayout.Space ();
} else {
EditorGUILayout.PropertyField (list.FindPropertyRelative ("eventToCall"));
}
GUILayout.EndVertical ();
}
}
#endif