using UnityEngine; using System.Collections; #if UNITY_EDITOR using UnityEditor; [CustomEditor (typeof(usingDevicesSystem))] [CanEditMultipleObjects] public class usingDevicesSystemEditor : Editor { SerializedProperty canUseDevices; SerializedProperty touchButtonRawImage; SerializedProperty originalTouchButtonRawImage; SerializedProperty touchButton; SerializedProperty touchButtonIcon; SerializedProperty iconButton; SerializedProperty iconButtonRectTransform; SerializedProperty actionText; SerializedProperty keyText; SerializedProperty objectNameText; SerializedProperty objectImage; SerializedProperty objectDescriptionText; SerializedProperty useDeviceFunctionName; SerializedProperty setCurrentUserOnDeviceFunctionName; SerializedProperty useDevicesActionName; SerializedProperty usePickUpAmountIfEqualToOne; SerializedProperty useOnlyDeviceIfVisibleOnCamera; SerializedProperty showUseDeviceIconEnabled; SerializedProperty useFixedDeviceIconPosition; SerializedProperty deviceOnScreenIfUseFixedIconPosition; SerializedProperty useFixedDeviceIconPositionOnFBA; SerializedProperty followDeviceIconPositionOnFBAIfObjectOnScreen; SerializedProperty showInteractionPanelIfObjectNotOnScreen; SerializedProperty useDeviceButtonEnabled; SerializedProperty getClosestDeviceToCameraCenter; SerializedProperty useMaxDistanceToCameraCenter; SerializedProperty maxDistanceToCameraCenter; SerializedProperty defaultDeviceNameFontSize; SerializedProperty extraTextStartActionKey; SerializedProperty extraTextEndActionKey; SerializedProperty showCurrentDeviceAmount; SerializedProperty currentDeviceAmountTextPanel; SerializedProperty currentDeviceAmountText; SerializedProperty showDetectedDevicesIconOnScreen; SerializedProperty detectedDevicesIconPrefab; SerializedProperty detectedDevicesIconParent; SerializedProperty useMinDistanceToUseDevices; SerializedProperty minDistanceToUseDevices; SerializedProperty disableInteractionTouchButtonIfNotDevicesDetected; SerializedProperty keepInteractionTouchButtonAlwaysActive; SerializedProperty layer; SerializedProperty raycastDistance; SerializedProperty mainCollider; SerializedProperty ignoreCheckIfObstacleBetweenDeviceAndPlayer; SerializedProperty tagsForDevices; SerializedProperty interactionMessageGameObject; SerializedProperty interactionMessageText; SerializedProperty useDeviceFoundShader; SerializedProperty deviceFoundShader; SerializedProperty shaderOutlineWidth; SerializedProperty shaderOutlineColor; SerializedProperty holdButtonToTakePickupsAround; SerializedProperty holdButtonTime; SerializedProperty useInteractionActions; SerializedProperty interactionActionInfoList; SerializedProperty multipleInteractionInfoList; SerializedProperty useIconButtonInfoList; SerializedProperty defaultIconButtonName; SerializedProperty iconButtonInfoList; SerializedProperty iconButtonCanBeShown; SerializedProperty currentVehicle; SerializedProperty driving; SerializedProperty objectToUse; SerializedProperty currenDeviceActionName; SerializedProperty currentDeviceIsPickup; SerializedProperty examiningObject; SerializedProperty deviceGameObjectList; SerializedProperty playerControllerManager; SerializedProperty grabObjectsManager; SerializedProperty playerInput; SerializedProperty mainCamera; SerializedProperty playerCameraManager; SerializedProperty mainCameraTransform; SerializedProperty examineObjectRenderTexturePanel; SerializedProperty examineObjectBlurPanelParent; SerializedProperty examineObjectRenderCamera; SerializedProperty examinateDevicesCamera; SerializedProperty usedByAI; SerializedProperty useGameObjectListToIgnore; SerializedProperty gameObjectListToIgnore; SerializedProperty holdInteractionButtonEnabled; SerializedProperty holdingInteractionButtonActive; SerializedProperty checkIfDevicesGameObjectDetectedNotActive; SerializedProperty ignoreIfPlayerMenuActiveState; SerializedProperty ignoreIfUsingDeviceActiveState; SerializedProperty checkIfPlayerColliderInsideBoundOfDeviceOnExit; string currentVehicleText; string usingDevices; string currentDeviceFound; Color buttonColor; string buttonText; bool expanded; SerializedProperty showIntereactionSettings; SerializedProperty showOutlineShaderSettings; SerializedProperty showEventsSettings; SerializedProperty showOtherSettings; SerializedProperty showDebugSettings; SerializedProperty showAllSettings; SerializedProperty showComponents; SerializedProperty showUISettings; GUIStyle style = new GUIStyle (); GUIStyle buttonStyle = new GUIStyle (); void OnEnable () { canUseDevices = serializedObject.FindProperty ("canUseDevices"); touchButtonRawImage = serializedObject.FindProperty ("touchButtonRawImage"); originalTouchButtonRawImage = serializedObject.FindProperty ("originalTouchButtonRawImage"); touchButton = serializedObject.FindProperty ("touchButton"); touchButtonIcon = serializedObject.FindProperty ("touchButtonIcon"); iconButton = serializedObject.FindProperty ("iconButton"); iconButtonRectTransform = serializedObject.FindProperty ("iconButtonRectTransform"); actionText = serializedObject.FindProperty ("actionText"); keyText = serializedObject.FindProperty ("keyText"); objectNameText = serializedObject.FindProperty ("objectNameText"); objectImage = serializedObject.FindProperty ("objectImage"); objectDescriptionText = serializedObject.FindProperty ("objectDescriptionText"); useDeviceFunctionName = serializedObject.FindProperty ("useDeviceFunctionName"); setCurrentUserOnDeviceFunctionName = serializedObject.FindProperty ("setCurrentUserOnDeviceFunctionName"); useDevicesActionName = serializedObject.FindProperty ("useDevicesActionName"); usePickUpAmountIfEqualToOne = serializedObject.FindProperty ("usePickUpAmountIfEqualToOne"); useOnlyDeviceIfVisibleOnCamera = serializedObject.FindProperty ("useOnlyDeviceIfVisibleOnCamera"); showUseDeviceIconEnabled = serializedObject.FindProperty ("showUseDeviceIconEnabled"); useFixedDeviceIconPosition = serializedObject.FindProperty ("useFixedDeviceIconPosition"); deviceOnScreenIfUseFixedIconPosition = serializedObject.FindProperty ("deviceOnScreenIfUseFixedIconPosition"); useFixedDeviceIconPositionOnFBA = serializedObject.FindProperty ("useFixedDeviceIconPositionOnFBA"); followDeviceIconPositionOnFBAIfObjectOnScreen = serializedObject.FindProperty ("followDeviceIconPositionOnFBAIfObjectOnScreen"); showInteractionPanelIfObjectNotOnScreen = serializedObject.FindProperty ("showInteractionPanelIfObjectNotOnScreen"); useDeviceButtonEnabled = serializedObject.FindProperty ("useDeviceButtonEnabled"); getClosestDeviceToCameraCenter = serializedObject.FindProperty ("getClosestDeviceToCameraCenter"); useMaxDistanceToCameraCenter = serializedObject.FindProperty ("useMaxDistanceToCameraCenter"); maxDistanceToCameraCenter = serializedObject.FindProperty ("maxDistanceToCameraCenter"); defaultDeviceNameFontSize = serializedObject.FindProperty ("defaultDeviceNameFontSize"); extraTextStartActionKey = serializedObject.FindProperty ("extraTextStartActionKey"); extraTextEndActionKey = serializedObject.FindProperty ("extraTextEndActionKey"); showCurrentDeviceAmount = serializedObject.FindProperty ("showCurrentDeviceAmount"); currentDeviceAmountTextPanel = serializedObject.FindProperty ("currentDeviceAmountTextPanel"); currentDeviceAmountText = serializedObject.FindProperty ("currentDeviceAmountText"); showDetectedDevicesIconOnScreen = serializedObject.FindProperty ("showDetectedDevicesIconOnScreen"); detectedDevicesIconPrefab = serializedObject.FindProperty ("detectedDevicesIconPrefab"); detectedDevicesIconParent = serializedObject.FindProperty ("detectedDevicesIconParent"); useMinDistanceToUseDevices = serializedObject.FindProperty ("useMinDistanceToUseDevices"); minDistanceToUseDevices = serializedObject.FindProperty ("minDistanceToUseDevices"); disableInteractionTouchButtonIfNotDevicesDetected = serializedObject.FindProperty ("disableInteractionTouchButtonIfNotDevicesDetected"); keepInteractionTouchButtonAlwaysActive = serializedObject.FindProperty ("keepInteractionTouchButtonAlwaysActive"); layer = serializedObject.FindProperty ("layer"); raycastDistance = serializedObject.FindProperty ("raycastDistance"); mainCollider = serializedObject.FindProperty ("mainCollider"); ignoreCheckIfObstacleBetweenDeviceAndPlayer = serializedObject.FindProperty ("ignoreCheckIfObstacleBetweenDeviceAndPlayer"); tagsForDevices = serializedObject.FindProperty ("tagsForDevices"); interactionMessageGameObject = serializedObject.FindProperty ("interactionMessageGameObject"); interactionMessageText = serializedObject.FindProperty ("interactionMessageText"); useDeviceFoundShader = serializedObject.FindProperty ("useDeviceFoundShader"); deviceFoundShader = serializedObject.FindProperty ("deviceFoundShader"); shaderOutlineWidth = serializedObject.FindProperty ("shaderOutlineWidth"); shaderOutlineColor = serializedObject.FindProperty ("shaderOutlineColor"); holdButtonToTakePickupsAround = serializedObject.FindProperty ("holdButtonToTakePickupsAround"); holdButtonTime = serializedObject.FindProperty ("holdButtonTime"); useInteractionActions = serializedObject.FindProperty ("useInteractionActions"); interactionActionInfoList = serializedObject.FindProperty ("interactionActionInfoList"); multipleInteractionInfoList = serializedObject.FindProperty ("multipleInteractionInfoList"); useIconButtonInfoList = serializedObject.FindProperty ("useIconButtonInfoList"); defaultIconButtonName = serializedObject.FindProperty ("defaultIconButtonName"); iconButtonInfoList = serializedObject.FindProperty ("iconButtonInfoList"); iconButtonCanBeShown = serializedObject.FindProperty ("iconButtonCanBeShown"); currentVehicle = serializedObject.FindProperty ("currentVehicle"); driving = serializedObject.FindProperty ("driving"); objectToUse = serializedObject.FindProperty ("objectToUse"); currenDeviceActionName = serializedObject.FindProperty ("currenDeviceActionName"); currentDeviceIsPickup = serializedObject.FindProperty ("currentDeviceIsPickup"); examiningObject = serializedObject.FindProperty ("examiningObject"); deviceGameObjectList = serializedObject.FindProperty ("deviceGameObjectList"); playerControllerManager = serializedObject.FindProperty ("playerControllerManager"); grabObjectsManager = serializedObject.FindProperty ("grabObjectsManager"); playerInput = serializedObject.FindProperty ("playerInput"); mainCamera = serializedObject.FindProperty ("mainCamera"); playerCameraManager = serializedObject.FindProperty ("playerCameraManager"); mainCameraTransform = serializedObject.FindProperty ("mainCameraTransform"); examineObjectRenderTexturePanel = serializedObject.FindProperty ("examineObjectRenderTexturePanel"); examineObjectBlurPanelParent = serializedObject.FindProperty ("examineObjectBlurPanelParent"); examineObjectRenderCamera = serializedObject.FindProperty ("examineObjectRenderCamera"); examinateDevicesCamera = serializedObject.FindProperty ("examinateDevicesCamera"); usedByAI = serializedObject.FindProperty ("usedByAI"); useGameObjectListToIgnore = serializedObject.FindProperty ("useGameObjectListToIgnore"); gameObjectListToIgnore = serializedObject.FindProperty ("gameObjectListToIgnore"); holdInteractionButtonEnabled = serializedObject.FindProperty ("holdInteractionButtonEnabled"); holdingInteractionButtonActive = serializedObject.FindProperty ("holdingInteractionButtonActive"); checkIfDevicesGameObjectDetectedNotActive = serializedObject.FindProperty ("checkIfDevicesGameObjectDetectedNotActive"); ignoreIfPlayerMenuActiveState = serializedObject.FindProperty ("ignoreIfPlayerMenuActiveState"); ignoreIfUsingDeviceActiveState = serializedObject.FindProperty ("ignoreIfUsingDeviceActiveState"); checkIfPlayerColliderInsideBoundOfDeviceOnExit = serializedObject.FindProperty ("checkIfPlayerColliderInsideBoundOfDeviceOnExit"); showIntereactionSettings = serializedObject.FindProperty ("showIntereactionSettings"); showOutlineShaderSettings = serializedObject.FindProperty ("showOutlineShaderSettings"); showEventsSettings = serializedObject.FindProperty ("showEventsSettings"); showOtherSettings = serializedObject.FindProperty ("showOtherSettings"); showDebugSettings = serializedObject.FindProperty ("showDebugSettings"); showAllSettings = serializedObject.FindProperty ("showAllSettings"); showComponents = serializedObject.FindProperty ("showComponents"); showUISettings = serializedObject.FindProperty ("showUISettings"); } public override void OnInspectorGUI () { EditorGUILayout.Space (); buttonStyle = new GUIStyle (GUI.skin.button); buttonStyle.fontStyle = FontStyle.Bold; buttonStyle.fontSize = 12; GUILayout.BeginVertical ("Main Settings", "window"); EditorGUILayout.PropertyField (canUseDevices); EditorGUILayout.PropertyField (useDeviceFunctionName); EditorGUILayout.PropertyField (setCurrentUserOnDeviceFunctionName); EditorGUILayout.PropertyField (useDevicesActionName); EditorGUILayout.PropertyField (usePickUpAmountIfEqualToOne); EditorGUILayout.PropertyField (useOnlyDeviceIfVisibleOnCamera); EditorGUILayout.PropertyField (useDeviceButtonEnabled); EditorGUILayout.Space (); EditorGUILayout.PropertyField (holdInteractionButtonEnabled); EditorGUILayout.PropertyField (checkIfDevicesGameObjectDetectedNotActive); EditorGUILayout.PropertyField (checkIfPlayerColliderInsideBoundOfDeviceOnExit); GUILayout.EndVertical (); EditorGUILayout.Space (); GUILayout.BeginVertical ("Raycast Settings", "window"); EditorGUILayout.PropertyField (layer); EditorGUILayout.PropertyField (raycastDistance); EditorGUILayout.PropertyField (ignoreCheckIfObstacleBetweenDeviceAndPlayer); GUILayout.EndVertical (); EditorGUILayout.Space (); GUILayout.BeginVertical ("Ignore GameObject List Settings", "window"); EditorGUILayout.PropertyField (useGameObjectListToIgnore); if (useGameObjectListToIgnore.boolValue) { showSimpleList (gameObjectListToIgnore); } GUILayout.EndVertical (); EditorGUILayout.Space (); buttonColor = GUI.backgroundColor; EditorGUILayout.BeginVertical (); EditorGUILayout.BeginHorizontal (); if (showIntereactionSettings.boolValue) { GUI.backgroundColor = Color.gray; } else { GUI.backgroundColor = buttonColor; } if (GUILayout.Button ("Interaction")) { showIntereactionSettings.boolValue = !showIntereactionSettings.boolValue; } if (showOutlineShaderSettings.boolValue) { GUI.backgroundColor = Color.gray; } else { GUI.backgroundColor = buttonColor; } if (GUILayout.Button ("Outline")) { showOutlineShaderSettings.boolValue = !showOutlineShaderSettings.boolValue; } if (showEventsSettings.boolValue) { GUI.backgroundColor = Color.gray; } else { GUI.backgroundColor = buttonColor; } if (GUILayout.Button ("Events")) { showEventsSettings.boolValue = !showEventsSettings.boolValue; } EditorGUILayout.EndHorizontal (); EditorGUILayout.BeginHorizontal (); if (showOtherSettings.boolValue) { GUI.backgroundColor = Color.gray; } else { GUI.backgroundColor = buttonColor; } if (GUILayout.Button ("Others")) { showOtherSettings.boolValue = !showOtherSettings.boolValue; } if (showUISettings.boolValue) { GUI.backgroundColor = Color.gray; } else { GUI.backgroundColor = buttonColor; } if (GUILayout.Button ("UI")) { showUISettings.boolValue = !showUISettings.boolValue; } if (showDebugSettings.boolValue) { GUI.backgroundColor = Color.gray; } else { GUI.backgroundColor = buttonColor; } if (GUILayout.Button ("Debug")) { showDebugSettings.boolValue = !showDebugSettings.boolValue; } EditorGUILayout.EndHorizontal (); EditorGUILayout.EndVertical (); if (showAllSettings.boolValue) { GUI.backgroundColor = Color.gray; buttonText = "Hide All Settings"; } else { GUI.backgroundColor = buttonColor; buttonText = "Show All Settings"; } if (GUILayout.Button (buttonText)) { showAllSettings.boolValue = !showAllSettings.boolValue; showIntereactionSettings.boolValue = showAllSettings.boolValue; showOutlineShaderSettings.boolValue = showAllSettings.boolValue; showEventsSettings.boolValue = showAllSettings.boolValue; showOtherSettings.boolValue = showAllSettings.boolValue; showUISettings.boolValue = showAllSettings.boolValue; showDebugSettings.boolValue = showAllSettings.boolValue; showComponents.boolValue = false; } if (showComponents.boolValue) { GUI.backgroundColor = Color.gray; buttonText = "Hide Player Components"; } else { GUI.backgroundColor = buttonColor; buttonText = "Show Player Components"; } if (GUILayout.Button (buttonText)) { showComponents.boolValue = !showComponents.boolValue; } GUI.backgroundColor = buttonColor; style.fontStyle = FontStyle.Bold; style.fontSize = 30; style.alignment = TextAnchor.MiddleCenter; if (showAllSettings.boolValue || showIntereactionSettings.boolValue) { EditorGUILayout.Space (); EditorGUILayout.Space (); EditorGUILayout.LabelField ("INTERACTION SETTINGS", style); EditorGUILayout.Space (); EditorGUILayout.Space (); GUILayout.BeginVertical ("Tag For Devices List", "window"); showTagsForDevicesList (tagsForDevices); GUILayout.EndVertical (); EditorGUILayout.Space (); GUILayout.BeginVertical ("Hold Button To Pick Around Settings", "window"); EditorGUILayout.PropertyField (holdButtonToTakePickupsAround); if (holdButtonToTakePickupsAround.boolValue) { EditorGUILayout.PropertyField (holdButtonTime); } GUILayout.EndVertical (); EditorGUILayout.Space (); } if (showAllSettings.boolValue || showUISettings.boolValue) { EditorGUILayout.Space (); EditorGUILayout.Space (); EditorGUILayout.LabelField ("UI SETTINGS", style); EditorGUILayout.Space (); EditorGUILayout.Space (); GUILayout.BeginVertical ("Device Icon Settings", "window"); EditorGUILayout.PropertyField (showUseDeviceIconEnabled); if (showUseDeviceIconEnabled.boolValue) { EditorGUILayout.PropertyField (useFixedDeviceIconPosition); EditorGUILayout.PropertyField (deviceOnScreenIfUseFixedIconPosition); EditorGUILayout.PropertyField (useFixedDeviceIconPositionOnFBA); EditorGUILayout.PropertyField (followDeviceIconPositionOnFBAIfObjectOnScreen); } EditorGUILayout.Space (); EditorGUILayout.PropertyField (getClosestDeviceToCameraCenter); if (getClosestDeviceToCameraCenter.boolValue) { EditorGUILayout.PropertyField (useMaxDistanceToCameraCenter); if (useMaxDistanceToCameraCenter.boolValue) { EditorGUILayout.PropertyField (maxDistanceToCameraCenter); } } EditorGUILayout.Space (); EditorGUILayout.PropertyField (defaultDeviceNameFontSize); EditorGUILayout.PropertyField (extraTextStartActionKey); EditorGUILayout.PropertyField (extraTextEndActionKey); EditorGUILayout.PropertyField (showCurrentDeviceAmount); EditorGUILayout.PropertyField (currentDeviceAmountTextPanel); EditorGUILayout.PropertyField (currentDeviceAmountText); EditorGUILayout.Space (); EditorGUILayout.PropertyField (showDetectedDevicesIconOnScreen); EditorGUILayout.PropertyField (detectedDevicesIconPrefab); EditorGUILayout.PropertyField (detectedDevicesIconParent); EditorGUILayout.Space (); EditorGUILayout.PropertyField (useMinDistanceToUseDevices); if (useMinDistanceToUseDevices.boolValue) { EditorGUILayout.PropertyField (minDistanceToUseDevices); } EditorGUILayout.Space (); EditorGUILayout.PropertyField (disableInteractionTouchButtonIfNotDevicesDetected); EditorGUILayout.PropertyField (keepInteractionTouchButtonAlwaysActive); EditorGUILayout.PropertyField (showInteractionPanelIfObjectNotOnScreen); GUILayout.EndVertical (); EditorGUILayout.Space (); GUILayout.BeginVertical ("Icon Button List Settings", "window"); EditorGUILayout.PropertyField (useIconButtonInfoList); if (useIconButtonInfoList.boolValue) { EditorGUILayout.PropertyField (defaultIconButtonName); EditorGUILayout.Space (); GUILayout.BeginVertical ("Icon Button Info List", "window"); showIconButtonInfoList (iconButtonInfoList); GUILayout.EndVertical (); } GUILayout.EndVertical (); EditorGUILayout.Space (); } if (showAllSettings.boolValue || showEventsSettings.boolValue) { EditorGUILayout.Space (); EditorGUILayout.Space (); EditorGUILayout.LabelField ("EVENTS SETTINGS", style); EditorGUILayout.Space (); EditorGUILayout.Space (); GUILayout.BeginVertical ("Interaction Message Settings", "window"); EditorGUILayout.PropertyField (interactionMessageGameObject); EditorGUILayout.PropertyField (interactionMessageText); GUILayout.EndVertical (); EditorGUILayout.Space (); GUILayout.BeginVertical ("Interaction Actions Settings", "window"); EditorGUILayout.PropertyField (useInteractionActions); if (useInteractionActions.boolValue) { EditorGUILayout.Space (); GUILayout.BeginVertical ("Interaction Action Info List", "window"); showInteractionActionInfoList (interactionActionInfoList); GUILayout.EndVertical (); } GUILayout.EndVertical (); EditorGUILayout.Space (); GUILayout.BeginVertical ("Multiple Interaction Info Settings", "window"); showMultipleInteractionInfoList (multipleInteractionInfoList); GUILayout.EndVertical (); EditorGUILayout.Space (); } if (showAllSettings.boolValue || showOutlineShaderSettings.boolValue) { EditorGUILayout.Space (); EditorGUILayout.Space (); EditorGUILayout.LabelField ("OUTLINE SETTINGS", style); EditorGUILayout.Space (); EditorGUILayout.Space (); GUILayout.BeginVertical ("Outline Shader Device Found Settings", "window"); EditorGUILayout.PropertyField (useDeviceFoundShader); if (useDeviceFoundShader.boolValue) { EditorGUILayout.PropertyField (deviceFoundShader); EditorGUILayout.PropertyField (shaderOutlineWidth); EditorGUILayout.PropertyField (shaderOutlineColor); } GUILayout.EndVertical (); EditorGUILayout.Space (); } if (showAllSettings.boolValue || showDebugSettings.boolValue) { EditorGUILayout.Space (); EditorGUILayout.Space (); EditorGUILayout.LabelField ("DEBUG SETTINGS", style); EditorGUILayout.Space (); EditorGUILayout.Space (); GUILayout.BeginVertical ("Devices State", "window"); GUILayout.Label ("Icon Can Be Shown\t\t" + iconButtonCanBeShown.boolValue); currentVehicleText = "NONE"; if (currentVehicle.objectReferenceValue) { currentVehicleText = currentVehicle.objectReferenceValue.name; } GUILayout.Label ("Current Vehicle\t\t\t" + currentVehicleText); GUILayout.Label ("Driving\t\t\t\t" + driving.boolValue); usingDevices = "NO"; if (objectToUse.objectReferenceValue) { usingDevices = "YES"; } GUILayout.Label ("Device Detected\t\t" + usingDevices); currentDeviceFound = "None"; if (objectToUse.objectReferenceValue) { currentDeviceFound = currenDeviceActionName.stringValue; } GUILayout.Label ("Device Name\t\t\t" + currentDeviceFound); GUILayout.Label ("Device Is Pickup\t\t" + currentDeviceIsPickup.boolValue); GUILayout.Label ("Examining Object\t\t" + examiningObject.boolValue); GUILayout.Label ("Ignore Menu Active\t\t" + ignoreIfPlayerMenuActiveState.boolValue); GUILayout.Label ("Ignore Using Device\t\t" + ignoreIfUsingDeviceActiveState.boolValue); GUILayout.Label ("Hold Interact Active\t\t" + holdingInteractionButtonActive.boolValue); EditorGUILayout.Space (); GUILayout.BeginVertical ("Devices List", "window"); showDeviceList (deviceGameObjectList); GUILayout.EndVertical (); EditorGUILayout.Space (); GUILayout.EndVertical (); } if (showAllSettings.boolValue || showOtherSettings.boolValue) { EditorGUILayout.Space (); EditorGUILayout.Space (); EditorGUILayout.LabelField ("OTHERS SETTINGS", style); EditorGUILayout.Space (); EditorGUILayout.Space (); GUILayout.BeginVertical ("AI Settings", "window"); EditorGUILayout.PropertyField (usedByAI); GUILayout.EndVertical (); EditorGUILayout.Space (); } if (showComponents.boolValue) { EditorGUILayout.Space (); EditorGUILayout.Space (); EditorGUILayout.LabelField ("COMPONENTS SETTINGS", style); EditorGUILayout.Space (); EditorGUILayout.Space (); GUILayout.BeginVertical ("Player Elements", "window"); EditorGUILayout.PropertyField (playerControllerManager); EditorGUILayout.PropertyField (grabObjectsManager); EditorGUILayout.PropertyField (playerInput); EditorGUILayout.PropertyField (mainCamera); EditorGUILayout.PropertyField (playerCameraManager); EditorGUILayout.PropertyField (mainCameraTransform); EditorGUILayout.PropertyField (mainCollider); GUILayout.EndVertical (); EditorGUILayout.Space (); GUILayout.BeginVertical ("Examine Object Elements", "window"); EditorGUILayout.PropertyField (examineObjectRenderTexturePanel); EditorGUILayout.PropertyField (examineObjectBlurPanelParent); EditorGUILayout.PropertyField (examineObjectRenderCamera); EditorGUILayout.PropertyField (examinateDevicesCamera); GUILayout.EndVertical (); EditorGUILayout.Space (); GUILayout.BeginVertical ("Interaction Elements", "window"); EditorGUILayout.PropertyField (touchButton); EditorGUILayout.PropertyField (touchButtonRawImage); EditorGUILayout.PropertyField (originalTouchButtonRawImage); EditorGUILayout.PropertyField (touchButtonIcon); EditorGUILayout.PropertyField (iconButton); EditorGUILayout.PropertyField (iconButtonRectTransform); EditorGUILayout.PropertyField (actionText); EditorGUILayout.PropertyField (keyText); EditorGUILayout.PropertyField (objectNameText); EditorGUILayout.PropertyField (objectImage); EditorGUILayout.PropertyField (objectDescriptionText); GUILayout.EndVertical (); EditorGUILayout.Space (); } EditorGUILayout.Space (); if (GUI.changed) { serializedObject.ApplyModifiedProperties (); } } void showTagsForDevicesList (SerializedProperty list) { EditorGUILayout.Space (); if (GUILayout.Button ("Show/Hide " + list.displayName, buttonStyle)) { list.isExpanded = !list.isExpanded; } EditorGUILayout.Space (); if (list.isExpanded) { EditorGUILayout.Space (); GUILayout.BeginHorizontal (); GUILayout.Label ("Number Of Tags: \t" + list.arraySize); EditorGUILayout.Space (); GUILayout.BeginHorizontal (); if (GUILayout.Button ("Add Tag")) { list.arraySize++; } if (GUILayout.Button ("Clear")) { list.arraySize = 0; } GUILayout.EndHorizontal (); GUILayout.EndHorizontal (); EditorGUILayout.Space (); for (int i = 0; i < list.arraySize; i++) { GUILayout.BeginHorizontal (); GUILayout.BeginHorizontal ("box"); EditorGUILayout.Space (); if (i < list.arraySize && i >= 0) { EditorGUILayout.BeginVertical (); EditorGUILayout.PropertyField (list.GetArrayElementAtIndex (i), false); EditorGUILayout.Space (); GUILayout.EndVertical (); } GUILayout.EndHorizontal (); 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 (); } } } void showDeviceList (SerializedProperty list) { 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 Devices: \t" + list.arraySize); EditorGUILayout.Space (); for (int i = 0; i < list.arraySize; i++) { GUILayout.BeginHorizontal (); GUILayout.BeginHorizontal ("box"); EditorGUILayout.Space (); if (i < list.arraySize && i >= 0) { EditorGUILayout.BeginVertical (); EditorGUILayout.PropertyField (list.GetArrayElementAtIndex (i), false); EditorGUILayout.Space (); GUILayout.EndVertical (); } GUILayout.EndHorizontal (); GUILayout.EndHorizontal (); } } } void showInteractionActionInfoList (SerializedProperty list) { 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 Actions: \t" + list.arraySize); EditorGUILayout.Space (); GUILayout.BeginHorizontal (); if (GUILayout.Button ("Add Action")) { 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) { expanded = true; showInteractionActionInfoListElement (list.GetArrayElementAtIndex (i)); } 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 (); } } } void showInteractionActionInfoListElement (SerializedProperty list) { GUILayout.BeginVertical ("box"); EditorGUILayout.PropertyField (list.FindPropertyRelative ("Name")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("canBeUsedOnGamePaused")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("eventOnInteraction")); GUILayout.EndVertical (); } void showMultipleInteractionInfoList (SerializedProperty list) { 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 Actions: \t" + list.arraySize); EditorGUILayout.Space (); GUILayout.BeginHorizontal (); if (GUILayout.Button ("Add Action")) { 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) { expanded = true; showMultipleInteractionInfoListElement (list.GetArrayElementAtIndex (i)); } 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 (); } } } void showMultipleInteractionInfoListElement (SerializedProperty list) { GUILayout.BeginVertical ("box"); EditorGUILayout.PropertyField (list.FindPropertyRelative ("inputName")); EditorGUILayout.Space (); showSimpleList (list.FindPropertyRelative ("multipleInteractionNameList")); GUILayout.EndVertical (); } void showIconButtonInfoList (SerializedProperty list) { 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 Icons: \t" + list.arraySize); EditorGUILayout.Space (); GUILayout.BeginHorizontal (); if (GUILayout.Button ("Add Icon")) { 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) { expanded = true; showIconButtonInfoListElement (list.GetArrayElementAtIndex (i)); } 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 (); } } } void showIconButtonInfoListElement (SerializedProperty list) { GUILayout.BeginVertical ("box"); EditorGUILayout.PropertyField (list.FindPropertyRelative ("Name")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("iconButtonPanel")); EditorGUILayout.Space (); EditorGUILayout.PropertyField (list.FindPropertyRelative ("keyText")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("actionText")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("objectNameText")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("objectImage")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("objectDescriptionText")); EditorGUILayout.Space (); EditorGUILayout.PropertyField (list.FindPropertyRelative ("holdInteractionSlider")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("showHoldInteractionTimer")); if (list.FindPropertyRelative ("showHoldInteractionTimer").boolValue) { EditorGUILayout.PropertyField (list.FindPropertyRelative ("holdInteractionTimerText")); } EditorGUILayout.Space (); EditorGUILayout.PropertyField (list.FindPropertyRelative ("touchButtonIcon")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("extraTextStartActionKey")); EditorGUILayout.PropertyField (list.FindPropertyRelative ("extraTextEndActionKey")); EditorGUILayout.Space (); EditorGUILayout.PropertyField (list.FindPropertyRelative ("useFixedPosition")); if (list.FindPropertyRelative ("useFixedPosition").boolValue) { EditorGUILayout.PropertyField (list.FindPropertyRelative ("fixedPositionTransform")); } EditorGUILayout.Space (); EditorGUILayout.PropertyField (list.FindPropertyRelative ("setNewTouchButtonRawImageIcon")); if (list.FindPropertyRelative ("setNewTouchButtonRawImageIcon").boolValue) { EditorGUILayout.PropertyField (list.FindPropertyRelative ("newTouchButtonRawImageIcon")); } EditorGUILayout.Space (); EditorGUILayout.PropertyField (list.FindPropertyRelative ("useMultipleInteractionInfo")); if (list.FindPropertyRelative ("useMultipleInteractionInfo").boolValue) { EditorGUILayout.Space (); EditorGUILayout.PropertyField (list.FindPropertyRelative ("useMultipleTouchButtonIcon")); if (list.FindPropertyRelative ("useMultipleTouchButtonIcon").boolValue) { showSimpleList (list.FindPropertyRelative ("multipleTouchButtonIconList")); } EditorGUILayout.Space (); showSimpleList (list.FindPropertyRelative ("keyTextList")); EditorGUILayout.Space (); showSimpleList (list.FindPropertyRelative ("actionTextList")); } EditorGUILayout.Space (); GUILayout.EndVertical (); } void showSimpleList (SerializedProperty list) { 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: \t" + list.arraySize); EditorGUILayout.Space (); GUILayout.BeginHorizontal (); if (GUILayout.Button ("Add Element")) { list.arraySize++; } if (GUILayout.Button ("Clear")) { list.arraySize = 0; } GUILayout.EndHorizontal (); EditorGUILayout.Space (); for (int i = 0; i < list.arraySize; i++) { GUILayout.BeginHorizontal (); GUILayout.BeginHorizontal ("box"); if (i < list.arraySize && i >= 0) { EditorGUILayout.BeginVertical (); EditorGUILayout.PropertyField (list.GetArrayElementAtIndex (i), false); GUILayout.EndVertical (); } GUILayout.EndHorizontal (); if (GUILayout.Button ("x")) { list.DeleteArrayElementAtIndex (i); } GUILayout.EndHorizontal (); } } } } #endif