using UnityEngine; using System.Collections; #if UNITY_EDITOR using UnityEditor; [CustomEditor (typeof (playerInputManager))] public class playerInputManagerEditor : Editor { SerializedProperty playerID; SerializedProperty playerIsNonLocalAvatar; SerializedProperty playerNonLocalAvatarID; SerializedProperty showDebugActions; SerializedProperty useOnlyKeyboard; SerializedProperty mouseSensitivity; SerializedProperty leftGamepadJoystickSensitivity; SerializedProperty rightGamepadJoystickSensitivity; SerializedProperty leftTouchSensitivity; SerializedProperty rightTouchSensitivity; SerializedProperty useVerticalAndHorizontalGamepadSensitivity; SerializedProperty leftGamepadJoystickHorizontalSensitivity; SerializedProperty leftGamepadJoystickVerticalSensitivity; SerializedProperty rightGamepadJoystickHorizontalSensitivity; SerializedProperty rightGamepadJoystickVerticalSensitivity; SerializedProperty useMovementOrientation; SerializedProperty horizontalMovementOrientation; SerializedProperty verticalMovementOrientation; SerializedProperty useCameraOrientation; SerializedProperty horizontalCameraOrientation; SerializedProperty verticalCameraOrientation; SerializedProperty touchMovementControl; SerializedProperty touchCameraControl; SerializedProperty touchPanel; SerializedProperty usingTouchMovementJoystick; SerializedProperty inputLerpSpeedTouchMovementButtons; SerializedProperty useHorizontaTouchMovementButtons; SerializedProperty useVerticalTouchMovementButtons; SerializedProperty horizontalTouchMovementButtons; SerializedProperty verticalTouchMovementButtons; SerializedProperty inputEnabled; SerializedProperty inputCurrentlyActive; SerializedProperty overrideInputValuesActive; SerializedProperty inputPaused; SerializedProperty ignoreAllActionsInput; SerializedProperty ignoreAllAxisInput; SerializedProperty movementAxis; SerializedProperty mouseAxis; SerializedProperty rawMovementAxis; SerializedProperty usingGamepad; SerializedProperty usingKeyBoard; SerializedProperty usingTouchControls; SerializedProperty usingPlayerMenu; SerializedProperty manualControlActive; SerializedProperty manualMovementHorizontalInput; SerializedProperty manualMovementVerticalInput; SerializedProperty manualMouseHorizontalInput; SerializedProperty manualMouseVerticalInput; SerializedProperty showSingleMultiAxes; SerializedProperty currentMultiAxesToShow; SerializedProperty multiAxesList; SerializedProperty hideSingleMultiAxes; SerializedProperty input; SerializedProperty playerControllerManager; SerializedProperty mainPlayerInputPanelSystem; SerializedProperty editInputPanelPrefab; SerializedProperty editInputMenu; SerializedProperty currentInputPanelListText; playerInputManager manager; Color defBackgroundColor; string [] currentStringList; string isEnabled; bool currentlyActive; string currentButtonMessage; bool expandedMultiAxesList = false; bool expandedAxesList = false; int currentMultiAxesToShowValue; SerializedProperty currentSingleMultiAxes; int multiAxesStringIndex; int axesStringIndex; playerInputManager.Axes currentAxes; playerInputManager.multiAxes currentMultiAxes; int currentAxesArraySize; int currentMultiAxesArraySize; GUIStyle buttonStyle = new GUIStyle (); GUIStyle mainInputListButtonStyle = new GUIStyle (); void OnEnable () { playerID = serializedObject.FindProperty ("playerID"); playerIsNonLocalAvatar = serializedObject.FindProperty ("playerIsNonLocalAvatar"); playerNonLocalAvatarID = serializedObject.FindProperty ("playerNonLocalAvatarID"); showDebugActions = serializedObject.FindProperty ("showDebugActions"); useOnlyKeyboard = serializedObject.FindProperty ("useOnlyKeyboard"); mouseSensitivity = serializedObject.FindProperty ("mouseSensitivity"); leftGamepadJoystickSensitivity = serializedObject.FindProperty ("leftGamepadJoystickSensitivity"); rightGamepadJoystickSensitivity = serializedObject.FindProperty ("rightGamepadJoystickSensitivity"); leftTouchSensitivity = serializedObject.FindProperty ("leftTouchSensitivity"); rightTouchSensitivity = serializedObject.FindProperty ("rightTouchSensitivity"); useVerticalAndHorizontalGamepadSensitivity = serializedObject.FindProperty ("useVerticalAndHorizontalGamepadSensitivity"); leftGamepadJoystickHorizontalSensitivity = serializedObject.FindProperty ("leftGamepadJoystickHorizontalSensitivity"); leftGamepadJoystickVerticalSensitivity = serializedObject.FindProperty ("leftGamepadJoystickVerticalSensitivity"); rightGamepadJoystickHorizontalSensitivity = serializedObject.FindProperty ("rightGamepadJoystickHorizontalSensitivity"); rightGamepadJoystickVerticalSensitivity = serializedObject.FindProperty ("rightGamepadJoystickVerticalSensitivity"); useMovementOrientation = serializedObject.FindProperty ("useMovementOrientation"); horizontalMovementOrientation = serializedObject.FindProperty ("horizontalMovementOrientation"); verticalMovementOrientation = serializedObject.FindProperty ("verticalMovementOrientation"); useCameraOrientation = serializedObject.FindProperty ("useCameraOrientation"); horizontalCameraOrientation = serializedObject.FindProperty ("horizontalCameraOrientation"); verticalCameraOrientation = serializedObject.FindProperty ("verticalCameraOrientation"); touchMovementControl = serializedObject.FindProperty ("touchMovementControl"); touchCameraControl = serializedObject.FindProperty ("touchCameraControl"); touchPanel = serializedObject.FindProperty ("touchPanel"); usingTouchMovementJoystick = serializedObject.FindProperty ("usingTouchMovementJoystick"); inputLerpSpeedTouchMovementButtons = serializedObject.FindProperty ("inputLerpSpeedTouchMovementButtons"); useHorizontaTouchMovementButtons = serializedObject.FindProperty ("useHorizontaTouchMovementButtons"); useVerticalTouchMovementButtons = serializedObject.FindProperty ("useVerticalTouchMovementButtons"); horizontalTouchMovementButtons = serializedObject.FindProperty ("horizontalTouchMovementButtons"); verticalTouchMovementButtons = serializedObject.FindProperty ("verticalTouchMovementButtons"); inputEnabled = serializedObject.FindProperty ("inputEnabled"); inputCurrentlyActive = serializedObject.FindProperty ("inputCurrentlyActive"); overrideInputValuesActive = serializedObject.FindProperty ("overrideInputValuesActive"); inputPaused = serializedObject.FindProperty ("inputPaused"); ignoreAllActionsInput = serializedObject.FindProperty ("ignoreAllActionsInput"); ignoreAllAxisInput = serializedObject.FindProperty ("ignoreAllAxisInput"); movementAxis = serializedObject.FindProperty ("movementAxis"); mouseAxis = serializedObject.FindProperty ("mouseAxis"); rawMovementAxis = serializedObject.FindProperty ("rawMovementAxis"); usingGamepad = serializedObject.FindProperty ("usingGamepad"); usingKeyBoard = serializedObject.FindProperty ("usingKeyBoard"); usingTouchControls = serializedObject.FindProperty ("usingTouchControls"); usingPlayerMenu = serializedObject.FindProperty ("usingPlayerMenu"); manualControlActive = serializedObject.FindProperty ("manualControlActive"); manualMovementHorizontalInput = serializedObject.FindProperty ("manualMovementHorizontalInput"); manualMovementVerticalInput = serializedObject.FindProperty ("manualMovementVerticalInput"); manualMouseHorizontalInput = serializedObject.FindProperty ("manualMouseHorizontalInput"); manualMouseVerticalInput = serializedObject.FindProperty ("manualMouseVerticalInput"); showSingleMultiAxes = serializedObject.FindProperty ("showSingleMultiAxes"); currentMultiAxesToShow = serializedObject.FindProperty ("currentMultiAxesToShow"); multiAxesList = serializedObject.FindProperty ("multiAxesList"); hideSingleMultiAxes = serializedObject.FindProperty ("hideSingleMultiAxes"); input = serializedObject.FindProperty ("input"); playerControllerManager = serializedObject.FindProperty ("playerControllerManager"); mainPlayerInputPanelSystem = serializedObject.FindProperty ("mainPlayerInputPanelSystem"); editInputPanelPrefab = serializedObject.FindProperty ("editInputPanelPrefab"); editInputMenu = serializedObject.FindProperty ("editInputMenu"); currentInputPanelListText = serializedObject.FindProperty ("currentInputPanelListText"); manager = (playerInputManager)target; } public override void OnInspectorGUI () { EditorGUI.BeginChangeCheck (); EditorGUILayout.Space (); buttonStyle = new GUIStyle (GUI.skin.button); buttonStyle.fontStyle = FontStyle.Bold; buttonStyle.fontSize = 12; GUILayout.BeginVertical ("Main Settings", "window"); EditorGUILayout.PropertyField (playerID); EditorGUILayout.PropertyField (showDebugActions); EditorGUILayout.PropertyField (useOnlyKeyboard); GUILayout.EndVertical (); EditorGUILayout.Space (); GUILayout.BeginVertical ("Sensitivity Settings", "window"); EditorGUILayout.PropertyField (mouseSensitivity); EditorGUILayout.Space (); EditorGUILayout.PropertyField (useVerticalAndHorizontalGamepadSensitivity); if (useVerticalAndHorizontalGamepadSensitivity.boolValue) { EditorGUILayout.PropertyField (leftGamepadJoystickHorizontalSensitivity); EditorGUILayout.PropertyField (leftGamepadJoystickVerticalSensitivity); EditorGUILayout.PropertyField (rightGamepadJoystickHorizontalSensitivity); EditorGUILayout.PropertyField (rightGamepadJoystickVerticalSensitivity); } else { EditorGUILayout.PropertyField (leftGamepadJoystickSensitivity); EditorGUILayout.PropertyField (rightGamepadJoystickSensitivity); } EditorGUILayout.Space (); EditorGUILayout.PropertyField (leftTouchSensitivity); EditorGUILayout.PropertyField (rightTouchSensitivity); GUILayout.EndVertical (); EditorGUILayout.Space (); GUILayout.BeginVertical ("Control Orientation Settings", "window"); EditorGUILayout.PropertyField (useMovementOrientation); if (useMovementOrientation.boolValue) { EditorGUILayout.PropertyField (horizontalMovementOrientation); EditorGUILayout.PropertyField (verticalMovementOrientation); } EditorGUILayout.PropertyField (useCameraOrientation); if (useCameraOrientation.boolValue) { EditorGUILayout.PropertyField (horizontalCameraOrientation); EditorGUILayout.PropertyField (verticalCameraOrientation); } GUILayout.EndVertical (); EditorGUILayout.Space (); GUILayout.BeginVertical ("Touch Controls Settings", "window"); EditorGUILayout.PropertyField (touchMovementControl); EditorGUILayout.PropertyField (touchCameraControl); EditorGUILayout.PropertyField (touchPanel); EditorGUILayout.PropertyField (usingTouchMovementJoystick); EditorGUILayout.PropertyField (inputLerpSpeedTouchMovementButtons); EditorGUILayout.PropertyField (useHorizontaTouchMovementButtons); EditorGUILayout.PropertyField (useVerticalTouchMovementButtons); EditorGUILayout.PropertyField (horizontalTouchMovementButtons); EditorGUILayout.PropertyField (verticalTouchMovementButtons); GUILayout.EndVertical (); EditorGUILayout.Space (); GUILayout.BeginVertical ("Input State", "window"); EditorGUILayout.PropertyField (inputEnabled); GUILayout.Label ("Input Active\t\t" + inputCurrentlyActive.boolValue); GUILayout.Label ("Override Input Active\t\t" + overrideInputValuesActive.boolValue); GUILayout.Label ("Input Paused\t\t" + inputPaused.boolValue); EditorGUILayout.PropertyField (playerIsNonLocalAvatar); EditorGUILayout.PropertyField (playerNonLocalAvatarID); EditorGUILayout.Space (); EditorGUILayout.PropertyField (movementAxis); EditorGUILayout.PropertyField (mouseAxis); EditorGUILayout.PropertyField (rawMovementAxis); EditorGUILayout.Space (); GUILayout.Label ("Using Gamepad\t\t" + usingGamepad.boolValue); GUILayout.Label ("Using Keyboard\t\t" + usingKeyBoard.boolValue); GUILayout.Label ("Using Touch\t\t" + usingTouchControls.boolValue); GUILayout.Label ("Using Player Menu\t\t" + usingPlayerMenu.boolValue); EditorGUILayout.Space (); EditorGUILayout.PropertyField (ignoreAllActionsInput); EditorGUILayout.PropertyField (ignoreAllAxisInput); GUILayout.EndVertical (); EditorGUILayout.Space (); GUILayout.BeginVertical ("Manual Control Settings", "window"); EditorGUILayout.PropertyField (manualControlActive); if (manualControlActive.boolValue) { EditorGUILayout.PropertyField (manualMovementHorizontalInput); EditorGUILayout.PropertyField (manualMovementVerticalInput); EditorGUILayout.PropertyField (manualMouseHorizontalInput); EditorGUILayout.PropertyField (manualMouseVerticalInput); } GUILayout.EndVertical (); EditorGUILayout.Space (); GUILayout.BeginVertical ("Multi Axes List", "window"); EditorGUILayout.Space (); defBackgroundColor = GUI.backgroundColor; EditorGUILayout.BeginHorizontal (); if (showSingleMultiAxes.boolValue) { GUI.backgroundColor = Color.gray; currentButtonMessage = "\n Hide Single Multi Axes \n"; } else { GUI.backgroundColor = defBackgroundColor; currentButtonMessage = "\n Show Single Multi Axes \n"; } if (GUILayout.Button (currentButtonMessage)) { showSingleMultiAxes.boolValue = !showSingleMultiAxes.boolValue; if (showSingleMultiAxes.boolValue) { currentMultiAxesToShowValue = currentMultiAxesToShow.intValue; currentSingleMultiAxes = multiAxesList.GetArrayElementAtIndex (currentMultiAxesToShowValue); hideSingleMultiAxes.boolValue = true; } } GUI.backgroundColor = defBackgroundColor; EditorGUILayout.EndHorizontal (); EditorGUILayout.Space (); EditorGUILayout.Space (); if (showSingleMultiAxes.boolValue) { defBackgroundColor = GUI.backgroundColor; EditorGUILayout.BeginHorizontal (); if (hideSingleMultiAxes.boolValue) { GUI.backgroundColor = Color.gray; currentButtonMessage = "Hide Single Axes"; } else { GUI.backgroundColor = defBackgroundColor; currentButtonMessage = "Show Single Axes"; } if (GUILayout.Button (currentButtonMessage)) { hideSingleMultiAxes.boolValue = !hideSingleMultiAxes.boolValue; } GUI.backgroundColor = defBackgroundColor; EditorGUILayout.EndHorizontal (); if (hideSingleMultiAxes.boolValue) { EditorGUILayout.Space (); GUILayout.BeginHorizontal (); currentMultiAxesToShowValue = currentMultiAxesToShow.intValue; if (currentMultiAxesToShowValue == 0) { if (GUILayout.Button ("Next List")) { currentMultiAxesToShowValue++; currentSingleMultiAxes = multiAxesList.GetArrayElementAtIndex (currentMultiAxesToShowValue); } if (GUILayout.Button (">>")) { currentMultiAxesToShowValue = multiAxesList.arraySize - 1; currentSingleMultiAxes = multiAxesList.GetArrayElementAtIndex (currentMultiAxesToShowValue); } } else if (currentMultiAxesToShowValue > 0 && currentMultiAxesToShowValue < manager.multiAxesList.Count - 1) { if (GUILayout.Button ("<<")) { currentMultiAxesToShowValue = 0; currentSingleMultiAxes = multiAxesList.GetArrayElementAtIndex (currentMultiAxesToShowValue); } if (GUILayout.Button ("Previous List")) { currentMultiAxesToShowValue--; currentSingleMultiAxes = multiAxesList.GetArrayElementAtIndex (currentMultiAxesToShowValue); } if (GUILayout.Button ("Next List")) { currentMultiAxesToShowValue++; currentSingleMultiAxes = multiAxesList.GetArrayElementAtIndex (currentMultiAxesToShowValue); } if (GUILayout.Button (">>")) { currentMultiAxesToShowValue = multiAxesList.arraySize - 1; currentSingleMultiAxes = multiAxesList.GetArrayElementAtIndex (currentMultiAxesToShowValue); } } else if (currentMultiAxesToShowValue == manager.multiAxesList.Count - 1) { if (GUILayout.Button ("<<")) { currentMultiAxesToShowValue = 0; currentSingleMultiAxes = multiAxesList.GetArrayElementAtIndex (currentMultiAxesToShowValue); } if (GUILayout.Button ("Previous List")) { currentMultiAxesToShowValue--; currentSingleMultiAxes = multiAxesList.GetArrayElementAtIndex (currentMultiAxesToShowValue); } } currentMultiAxesToShow.intValue = currentMultiAxesToShowValue; GUILayout.EndHorizontal (); EditorGUILayout.Space (); EditorGUILayout.Space (); GUILayout.BeginHorizontal (); if (GUILayout.Button ("Update Input List")) { if (!Application.isPlaying) { manager.updateMultiAxesList (); } } GUILayout.EndHorizontal (); EditorGUILayout.Space (); GUILayout.BeginHorizontal (); if (GUILayout.Button ("\nUpdate Current Values (PRESS AFTER CHANGE ANYTHING)\n", buttonStyle)) { if (!Application.isPlaying) { manager.updateCurrentInputValues (); } } GUILayout.EndHorizontal (); EditorGUILayout.Space (); if (currentSingleMultiAxes == null) { currentMultiAxesToShowValue = currentMultiAxesToShow.intValue; currentSingleMultiAxes = multiAxesList.GetArrayElementAtIndex (currentMultiAxesToShowValue); } GUILayout.BeginHorizontal (); if (GUILayout.Button ("Expand All")) { for (int i = 0; i < multiAxesList.arraySize; i++) { multiAxesList.GetArrayElementAtIndex (i).isExpanded = true; } } if (GUILayout.Button ("Collapse All")) { for (int i = 0; i < multiAxesList.arraySize; i++) { multiAxesList.GetArrayElementAtIndex (i).isExpanded = false; } } GUILayout.EndHorizontal (); EditorGUILayout.Space (); GUILayout.BeginHorizontal ("box"); EditorGUILayout.Space (); EditorGUILayout.BeginVertical (); currentlyActive = currentSingleMultiAxes.FindPropertyRelative ("currentlyActive").boolValue; if (currentlyActive) { isEnabled = " +"; } else { isEnabled = " -"; } isEnabled += " (" + (currentMultiAxesToShowValue + 1) + "/" + multiAxesList.arraySize + ")"; EditorGUILayout.PropertyField (currentSingleMultiAxes, new GUIContent (currentSingleMultiAxes.displayName + isEnabled), false); if (currentSingleMultiAxes.isExpanded) { showSingleMultiAxesListElementInfo (currentSingleMultiAxes, currentMultiAxesToShowValue); } EditorGUILayout.Space (); GUILayout.EndVertical (); GUILayout.EndHorizontal (); } } else { showMultiAxesList (multiAxesList); } GUILayout.EndVertical (); EditorGUILayout.Space (); GUILayout.BeginVertical ("Player Element Settings", "window"); EditorGUILayout.PropertyField (input); EditorGUILayout.PropertyField (playerControllerManager); EditorGUILayout.PropertyField (mainPlayerInputPanelSystem); EditorGUILayout.PropertyField (editInputPanelPrefab); EditorGUILayout.PropertyField (editInputMenu); EditorGUILayout.PropertyField (currentInputPanelListText); GUILayout.EndVertical (); EditorGUILayout.Space (); if (EditorGUI.EndChangeCheck ()) { serializedObject.ApplyModifiedProperties (); Repaint (); } } void showSingleMultiAxesListElementInfo (SerializedProperty list, int index) { GUILayout.BeginVertical ("box"); EditorGUILayout.PropertyField (list.FindPropertyRelative ("currentlyActive")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("canUseInputOnPlayerPaused")); EditorGUILayout.Space (); GUILayout.BeginVertical ("Axes List", "window"); showAxesList (list.FindPropertyRelative ("axes"), index); GUILayout.EndVertical (); GUILayout.EndVertical (); } void showMultiAxesListElementInfo (SerializedProperty list, int index) { GUILayout.BeginVertical ("box"); currentMultiAxes = manager.multiAxesList [index]; currentStringList = currentMultiAxes.multiAxesStringList; if (currentStringList.Length > 0) { multiAxesStringIndex = currentMultiAxes.multiAxesStringIndex; multiAxesStringIndex = EditorGUILayout.Popup ("Axe ", multiAxesStringIndex, currentStringList); currentMultiAxes.multiAxesStringIndex = multiAxesStringIndex; if (multiAxesStringIndex >= 0) { currentMultiAxes.axesName = currentStringList [multiAxesStringIndex]; } else { currentMultiAxes.axesName = "MULTI AXES NAME NO FOUND"; } } EditorGUILayout.Space (); EditorGUILayout.PropertyField (list.FindPropertyRelative ("currentlyActive")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("canUseInputOnPlayerPaused")); EditorGUILayout.Space (); GUILayout.BeginVertical ("Axes List", "window"); showAxesList (list.FindPropertyRelative ("axes"), index); GUILayout.EndVertical (); GUILayout.EndVertical (); } void showMultiAxesList (SerializedProperty list) { GUILayout.BeginVertical (); EditorGUILayout.Space (); mainInputListButtonStyle = new GUIStyle (GUI.skin.button); mainInputListButtonStyle.fontStyle = FontStyle.Bold; mainInputListButtonStyle.fontSize = 20; if (GUILayout.Button ("Show/Hide Multi Axes List", mainInputListButtonStyle)) { list.isExpanded = !list.isExpanded; } EditorGUILayout.Space (); if (list.isExpanded) { currentMultiAxesArraySize = list.arraySize; GUILayout.Label ("Number Of Axes: \t" + currentMultiAxesArraySize); EditorGUILayout.Space (); GUILayout.BeginHorizontal (); if (GUILayout.Button ("Add Axes")) { if (!Application.isPlaying) { manager.addNewAxes (); currentMultiAxesArraySize = list.arraySize; } } if (GUILayout.Button ("Clear List")) { if (!Application.isPlaying) { list.arraySize = 0; currentMultiAxesArraySize = list.arraySize; } } GUILayout.EndHorizontal (); EditorGUILayout.Space (); GUILayout.BeginHorizontal (); if (GUILayout.Button ("Enable All Axes")) { if (!Application.isPlaying) { manager.setMultiAxesEnabledState (true); } } if (GUILayout.Button ("Disable All Axes")) { if (!Application.isPlaying) { manager.setMultiAxesEnabledState (false); } } GUILayout.EndHorizontal (); EditorGUILayout.Space (); GUILayout.BeginHorizontal (); if (GUILayout.Button ("Expand All")) { for (int i = 0; i < currentMultiAxesArraySize; i++) { list.GetArrayElementAtIndex (i).isExpanded = true; } } if (GUILayout.Button ("Collapse All")) { for (int i = 0; i < currentMultiAxesArraySize; i++) { list.GetArrayElementAtIndex (i).isExpanded = false; } } GUILayout.EndHorizontal (); EditorGUILayout.Space (); GUILayout.BeginHorizontal (); if (GUILayout.Button ("Update Input List", buttonStyle)) { if (!Application.isPlaying) { manager.updateMultiAxesList (); } } GUILayout.EndHorizontal (); EditorGUILayout.Space (); GUILayout.BeginHorizontal (); if (GUILayout.Button ("\nUpdate Current Values (PRESS AFTER CHANGE ANYTHING)\n", buttonStyle)) { if (!Application.isPlaying) { manager.updateCurrentInputValues (); } } GUILayout.EndHorizontal (); EditorGUILayout.Space (); for (int i = 0; i < currentMultiAxesArraySize; i++) { expandedMultiAxesList = false; GUILayout.BeginHorizontal (); GUILayout.BeginHorizontal ("box"); EditorGUILayout.Space (); if (i < currentMultiAxesArraySize && i >= 0) { EditorGUILayout.BeginVertical (); SerializedProperty currentArrayElement = list.GetArrayElementAtIndex (i); currentlyActive = currentArrayElement.FindPropertyRelative ("currentlyActive").boolValue; if (currentlyActive) { isEnabled = " +"; } else { isEnabled = " -"; } EditorGUILayout.PropertyField (currentArrayElement, new GUIContent (currentArrayElement.displayName + isEnabled), false); if (currentArrayElement.isExpanded) { showMultiAxesListElementInfo (currentArrayElement, i); expandedMultiAxesList = true; } EditorGUILayout.Space (); GUILayout.EndVertical (); } GUILayout.EndHorizontal (); if (expandedMultiAxesList) { GUILayout.BeginVertical (); if (GUILayout.Button ("x")) { if (!Application.isPlaying) { list.DeleteArrayElementAtIndex (i); currentMultiAxesArraySize = list.arraySize; } } if (GUILayout.Button ("v")) { if (i >= 0) { list.MoveArrayElement (i, i + 1); } } if (GUILayout.Button ("^")) { if (i < currentMultiAxesArraySize) { list.MoveArrayElement (i, i - 1); } } GUILayout.EndVertical (); } else { GUILayout.BeginHorizontal (); if (GUILayout.Button ("x")) { if (!Application.isPlaying) { list.DeleteArrayElementAtIndex (i); currentMultiAxesArraySize = list.arraySize; } } if (GUILayout.Button ("v")) { if (i >= 0) { list.MoveArrayElement (i, i + 1); } } if (GUILayout.Button ("^")) { if (i < currentMultiAxesArraySize) { list.MoveArrayElement (i, i - 1); } } GUILayout.EndHorizontal (); } GUILayout.EndHorizontal (); } EditorGUILayout.Space (); if (GUILayout.Button ("\nUpdate Current Values (PRESS AFTER CHANGE ANYTHING)\n", buttonStyle)) { if (!Application.isPlaying) { manager.updateCurrentInputValues (); } } } GUILayout.EndVertical (); } void showAxesListElementInfo (SerializedProperty list, int multiAxesIndex, int axesIndex) { GUILayout.BeginVertical ("box"); EditorGUILayout.PropertyField (list.FindPropertyRelative ("actionName")); currentMultiAxes = manager.multiAxesList [multiAxesIndex]; currentAxes = currentMultiAxes.axes [axesIndex]; currentStringList = currentAxes.axesStringList; if (currentStringList.Length > 0) { currentAxes.axesStringIndex = EditorGUILayout.Popup ("Axe ", currentAxes.axesStringIndex, currentStringList); axesStringIndex = currentAxes.axesStringIndex; if (axesStringIndex >= 0 && axesIndex < currentMultiAxes.axes.Count && axesStringIndex < currentStringList.Length) { currentAxes.Name = currentStringList [axesStringIndex]; } else { currentAxes.Name = "AXES NAME NO FOUND"; } } EditorGUILayout.PropertyField (list.FindPropertyRelative ("actionEnabled")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("buttonPressType")); EditorGUILayout.Space (); EditorGUILayout.Space (); EditorGUILayout.PropertyField (list.FindPropertyRelative ("canBeUsedOnPausedGame")); EditorGUILayout.Space (); EditorGUILayout.Space (); EditorGUILayout.PropertyField (list.FindPropertyRelative ("buttonEvent")); EditorGUILayout.Space (); if (GUILayout.Button ("Set Axes Action Name")) { if (!Application.isPlaying) { manager.setAxesActionName (multiAxesIndex, axesIndex); } } GUILayout.EndVertical (); } void showAxesList (SerializedProperty list, int multiAxesIndex) { GUILayout.BeginVertical (); EditorGUILayout.Space (); if (GUILayout.Button ("Show/Hide Axes List", buttonStyle)) { list.isExpanded = !list.isExpanded; } EditorGUILayout.Space (); if (list.isExpanded) { currentAxesArraySize = list.arraySize; GUILayout.Label ("Number Of Actions: \t" + currentAxesArraySize); EditorGUILayout.Space (); GUILayout.BeginHorizontal (); if (GUILayout.Button ("Add Action")) { if (!Application.isPlaying) { manager.addNewAction (multiAxesIndex); currentAxesArraySize = list.arraySize; } } if (GUILayout.Button ("Clear List")) { if (!Application.isPlaying) { list.arraySize = 0; currentAxesArraySize = list.arraySize; } } GUILayout.EndHorizontal (); EditorGUILayout.Space (); GUILayout.BeginHorizontal (); if (GUILayout.Button ("Expand All")) { for (int i = 0; i < currentAxesArraySize; i++) { list.GetArrayElementAtIndex (i).isExpanded = true; } } if (GUILayout.Button ("Collapse All")) { for (int i = 0; i < currentAxesArraySize; i++) { list.GetArrayElementAtIndex (i).isExpanded = false; } } GUILayout.EndHorizontal (); EditorGUILayout.Space (); GUILayout.BeginHorizontal (); if (GUILayout.Button ("Enable All Actions")) { if (!Application.isPlaying) { manager.setAllActionsEnabledState (multiAxesIndex, true); } } if (GUILayout.Button ("Disable All Actions")) { if (!Application.isPlaying) { manager.setAllActionsEnabledState (multiAxesIndex, false); } } GUILayout.EndHorizontal (); EditorGUILayout.Space (); GUILayout.BeginHorizontal (); if (GUILayout.Button ("Update Input List")) { if (!Application.isPlaying) { manager.updateAxesList (multiAxesIndex); } } if (currentAxesArraySize == 0) { if (GUILayout.Button ("Set All Actions")) { if (!Application.isPlaying) { manager.setAllAxesList (multiAxesIndex); } } } GUILayout.EndHorizontal (); EditorGUILayout.Space (); for (int i = 0; i < currentAxesArraySize; i++) { expandedAxesList = false; GUILayout.BeginHorizontal (); GUILayout.BeginHorizontal ("box"); EditorGUILayout.Space (); if (i < currentAxesArraySize && i >= 0) { EditorGUILayout.BeginVertical (); SerializedProperty currentArrayElement = list.GetArrayElementAtIndex (i); EditorGUILayout.PropertyField (currentArrayElement, false); if (currentArrayElement.isExpanded) { showAxesListElementInfo (currentArrayElement, multiAxesIndex, i); expandedAxesList = true; } EditorGUILayout.Space (); GUILayout.EndVertical (); } GUILayout.EndHorizontal (); if (expandedAxesList) { GUILayout.BeginVertical (); if (GUILayout.Button ("x")) { if (!Application.isPlaying) { list.DeleteArrayElementAtIndex (i); currentAxesArraySize = list.arraySize; } } if (GUILayout.Button ("v")) { if (i >= 0) { list.MoveArrayElement (i, i + 1); } } if (GUILayout.Button ("^")) { if (i < currentAxesArraySize) { list.MoveArrayElement (i, i - 1); } } GUILayout.EndVertical (); } else { GUILayout.BeginHorizontal (); if (GUILayout.Button ("x")) { if (!Application.isPlaying) { list.DeleteArrayElementAtIndex (i); currentAxesArraySize = list.arraySize; } } if (GUILayout.Button ("v")) { if (i >= 0) { list.MoveArrayElement (i, i + 1); } } if (GUILayout.Button ("^")) { if (i < currentAxesArraySize) { list.MoveArrayElement (i, i - 1); } } GUILayout.EndHorizontal (); } GUILayout.EndHorizontal (); } } GUILayout.EndVertical (); } } #endif