using UnityEngine; using System.Collections; #if UNITY_EDITOR using UnityEditor; [CustomEditor (typeof(playerInputPanelSystem))] public class playerInputPanelSystemEditor : Editor { SerializedProperty screenActionPanelsEnabled; SerializedProperty screenActionInfoList; SerializedProperty touchPanelsInfoList; SerializedProperty touchPanelsSchemesInfoList; SerializedProperty screenActionParent; SerializedProperty playerInput; SerializedProperty inputPanelPrefab; SerializedProperty mainInputPanelUISystem; SerializedProperty instantiateInputPanelUIIfNotFound; SerializedProperty pauseManager; bool expandedScreenActionsList = false; playerInputPanelSystem manager; GUIStyle buttonStyle = new GUIStyle (); void OnEnable () { screenActionPanelsEnabled = serializedObject.FindProperty ("screenActionPanelsEnabled"); screenActionInfoList = serializedObject.FindProperty ("screenActionInfoList"); touchPanelsInfoList = serializedObject.FindProperty ("touchPanelsInfoList"); touchPanelsSchemesInfoList = serializedObject.FindProperty ("touchPanelsSchemesInfoList"); screenActionParent = serializedObject.FindProperty ("screenActionParent"); playerInput = serializedObject.FindProperty ("playerInput"); inputPanelPrefab = serializedObject.FindProperty ("inputPanelPrefab"); mainInputPanelUISystem = serializedObject.FindProperty ("mainInputPanelUISystem"); instantiateInputPanelUIIfNotFound = serializedObject.FindProperty ("instantiateInputPanelUIIfNotFound"); pauseManager = serializedObject.FindProperty ("pauseManager"); manager = (playerInputPanelSystem)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 (screenActionPanelsEnabled); EditorGUILayout.PropertyField (instantiateInputPanelUIIfNotFound); GUILayout.EndVertical (); EditorGUILayout.Space (); GUILayout.BeginVertical ("Screen Actions List", "window"); showScreenActionsList (screenActionInfoList); GUILayout.EndVertical (); EditorGUILayout.Space (); GUILayout.BeginVertical ("Touch Panels List", "window"); showTouchPanelsInfoList (touchPanelsInfoList); EditorGUILayout.Space (); showTouchPanelsSchemesInfoList (touchPanelsSchemesInfoList); GUILayout.EndVertical (); EditorGUILayout.Space (); GUILayout.BeginVertical ("Player Element Settings", "window"); EditorGUILayout.PropertyField (playerInput); EditorGUILayout.PropertyField (pauseManager); EditorGUILayout.PropertyField (inputPanelPrefab); EditorGUILayout.Space (); EditorGUILayout.PropertyField (screenActionParent); EditorGUILayout.PropertyField (mainInputPanelUISystem); EditorGUILayout.Space (); if (GUILayout.Button ("Add Player Input Panel To Scene")) { manager.instantiateInputPanelPrefab (); } GUILayout.EndVertical (); EditorGUILayout.Space (); GUILayout.EndVertical (); if (GUI.changed) { serializedObject.ApplyModifiedProperties (); } } void showScreenActionsList (SerializedProperty list) { GUILayout.BeginVertical (); EditorGUILayout.Space (); if (GUILayout.Button ("Show/Hide Screen Actions List", buttonStyle)) { list.isExpanded = !list.isExpanded; } EditorGUILayout.Space (); if (list.isExpanded) { GUILayout.Label ("Number Of Actions: \t" + list.arraySize); EditorGUILayout.Space (); GUILayout.BeginHorizontal (); if (GUILayout.Button ("Add Action")) { list.arraySize++; } if (GUILayout.Button ("Clear List")) { 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++) { expandedScreenActionsList = 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) { showScreenActionsListElementInfo (list.GetArrayElementAtIndex (i)); expandedScreenActionsList = true; } EditorGUILayout.Space (); GUILayout.EndVertical (); } GUILayout.EndHorizontal (); if (expandedScreenActionsList) { GUILayout.BeginVertical (); 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); } } GUILayout.EndVertical (); } 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); } } GUILayout.EndHorizontal (); } GUILayout.EndHorizontal (); } } GUILayout.EndVertical (); } void showScreenActionsListElementInfo (SerializedProperty list) { GUILayout.BeginVertical ("box"); EditorGUILayout.PropertyField (list.FindPropertyRelative ("screenActionName")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("screenActionsGameObject")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("isMainGameScreenActionPanel")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("mainGameScreenActionPanelActive")); EditorGUILayout.Space (); EditorGUILayout.PropertyField (list.FindPropertyRelative ("hasSecondaryActionPanel")); if (list.FindPropertyRelative ("hasSecondaryActionPanel").boolValue) { EditorGUILayout.PropertyField (list.FindPropertyRelative ("secondaryActionPanelGameObject")); } EditorGUILayout.Space (); EditorGUILayout.PropertyField (list.FindPropertyRelative ("screenActionsGamepadGameObject")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("secondaryActionPanelGamepadGameObject")); GUILayout.EndVertical (); } void showTouchPanelsInfoList (SerializedProperty list) { GUILayout.BeginVertical (); EditorGUILayout.Space (); if (GUILayout.Button ("Show/Hide Touch Panels Info List", buttonStyle)) { list.isExpanded = !list.isExpanded; } EditorGUILayout.Space (); if (list.isExpanded) { GUILayout.Label ("Number Of Panels: \t" + list.arraySize); EditorGUILayout.Space (); GUILayout.BeginHorizontal (); if (GUILayout.Button ("Add Panel")) { list.arraySize++; } if (GUILayout.Button ("Clear List")) { 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++) { expandedScreenActionsList = 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) { showTouchPanelsInfoListElement (list.GetArrayElementAtIndex (i)); expandedScreenActionsList = true; } EditorGUILayout.Space (); GUILayout.EndVertical (); } GUILayout.EndHorizontal (); if (expandedScreenActionsList) { GUILayout.BeginVertical (); 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); } } GUILayout.EndVertical (); } 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); } } GUILayout.EndHorizontal (); } GUILayout.EndHorizontal (); } } GUILayout.EndVertical (); } void showTouchPanelsInfoListElement (SerializedProperty list) { GUILayout.BeginVertical ("box"); EditorGUILayout.PropertyField (list.FindPropertyRelative ("Name")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("touchPanel")); GUILayout.EndVertical (); } void showTouchPanelsSchemesInfoList (SerializedProperty list) { GUILayout.BeginVertical (); EditorGUILayout.Space (); if (GUILayout.Button ("Show/Hide Touch Panel Schemes Info List", buttonStyle)) { list.isExpanded = !list.isExpanded; } EditorGUILayout.Space (); if (list.isExpanded) { GUILayout.Label ("Number Of Panels: \t" + list.arraySize); EditorGUILayout.Space (); GUILayout.BeginHorizontal (); if (GUILayout.Button ("Add Panel")) { list.arraySize++; } if (GUILayout.Button ("Clear List")) { 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++) { expandedScreenActionsList = 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) { showTouchPanelsSchemesInfoListElement (list.GetArrayElementAtIndex (i)); expandedScreenActionsList = true; } EditorGUILayout.Space (); GUILayout.EndVertical (); } GUILayout.EndHorizontal (); if (expandedScreenActionsList) { GUILayout.BeginVertical (); 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); } } GUILayout.EndVertical (); } 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); } } GUILayout.EndHorizontal (); } GUILayout.EndHorizontal (); } } GUILayout.EndVertical (); } void showTouchPanelsSchemesInfoListElement (SerializedProperty list) { GUILayout.BeginVertical ("box"); EditorGUILayout.PropertyField (list.FindPropertyRelative ("Name")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("currentTouchPanelScheme")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("isMainGameTouchPanel")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("mainGameTouchPanelActive")); EditorGUILayout.Space (); showSimpleList (list.FindPropertyRelative ("enabledPanels")); GUILayout.EndVertical (); } void showSimpleList (SerializedProperty list) { EditorGUILayout.Space (); if (GUILayout.Button ("Show/Hide Enabled Panels List", buttonStyle)) { list.isExpanded = !list.isExpanded; } EditorGUILayout.Space (); if (list.isExpanded) { GUILayout.BeginVertical ("box"); EditorGUILayout.Space (); GUILayout.Label ("Amount: \t" + list.arraySize); EditorGUILayout.Space (); GUILayout.BeginHorizontal (); if (GUILayout.Button ("Add")) { list.arraySize++; } if (GUILayout.Button ("Clear")) { list.arraySize = 0; } GUILayout.EndHorizontal (); EditorGUILayout.Space (); for (int i = 0; i < list.arraySize; i++) { GUILayout.BeginHorizontal (); if (i < list.arraySize && i >= 0) { EditorGUILayout.PropertyField (list.GetArrayElementAtIndex (i), new GUIContent ("", null, ""), false); } GUILayout.BeginHorizontal (); if (GUILayout.Button ("x")) { if (list.GetArrayElementAtIndex (i).objectReferenceValue) { list.DeleteArrayElementAtIndex (i); list.DeleteArrayElementAtIndex (i); } else { 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); } } GUILayout.EndHorizontal (); GUILayout.EndHorizontal (); EditorGUILayout.Space (); } GUILayout.EndVertical (); } } } #endif