private float CalculateBackgroundHeight(GenericGamepadProfileSelector.Profile profile) { int constraintCount = profile.Constraints.Count; int fieldCount = 2; float fieldHeight = 18.0f; float constraintHeight = 18.0f; if (constraintCount > 0) { return(fieldCount * fieldHeight + Math.Max(constraintCount - 1, 0) * constraintHeight + 37.0f); } else { return(fieldCount * fieldHeight + 45.0f); } }
private CollectionAction DisplayEntry(int index) { GenericGamepadProfileSelector.Profile profile = m_selector.GetProfile(index); SerializedProperty profileSP = m_profiles.GetArrayElementAtIndex(index); SerializedProperty isExpanded = profileSP.FindPropertyRelative("IsExpanded"); SerializedProperty gamepadProfile = profileSP.FindPropertyRelative("GamepadProfile"); SerializedProperty constraints = profileSP.FindPropertyRelative("Constraints"); CollectionAction entryAction = CollectionAction.None; string label = "Profile " + (index + 1); if (isExpanded.boolValue) { label += " (Click to collapse)"; } else { label += " (Click to expand)"; } if (GUILayout.Button(label, m_headerStyle, GUILayout.ExpandWidth(true))) { isExpanded.boolValue = !isExpanded.boolValue; } if (isExpanded.boolValue) { Rect bgRect = GUILayoutUtility.GetLastRect(); bgRect.y += 18; bgRect.height = CalculateBackgroundHeight(profile); GUI.Box(bgRect, "", (GUIStyle)"RL Background"); EditorGUILayout.BeginHorizontal(); GUILayout.Space(4.0f); EditorGUILayout.BeginVertical(); EditorGUILayout.PropertyField(gamepadProfile); GUILayout.Space(4.0f); EditorGUILayout.LabelField("Constraints", EditorStyles.boldLabel); if (constraints.arraySize > 0) { GUILayout.BeginHorizontal(); GUILayout.Space(14.0f); GUILayout.BeginVertical(); for (int i = 0; i < constraints.arraySize; i++) { SerializedProperty constraint = constraints.GetArrayElementAtIndex(i); SerializedProperty type = constraint.FindPropertyRelative("Type"); SerializedProperty content = constraint.FindPropertyRelative("Content"); GUILayout.BeginHorizontal(); EditorGUILayout.PropertyField(type, GUIContent.none); EditorGUILayout.PropertyField(content, GUIContent.none); GUILayout.Space(40.0f); EditorGUILayout.EndHorizontal(); Rect constraintRect = GUILayoutUtility.GetLastRect(); Rect plusRect = new Rect(constraintRect.xMax - 36, constraintRect.y, 16, constraintRect.height); Rect minusRect = new Rect(constraintRect.xMax - 16, constraintRect.y, 16, constraintRect.height); if (GUI.Button(plusRect, m_constraintPlusButtonContent, m_footerButtonStyle)) { constraints.InsertArrayElementAtIndex(i); break; } if (GUI.Button(minusRect, m_constraintMinusButtonContent, m_footerButtonStyle)) { constraints.DeleteArrayElementAtIndex(i--); } } EditorGUILayout.EndVertical(); GUILayout.Space(14.0f); EditorGUILayout.EndHorizontal(); } else { GUILayout.BeginHorizontal(); GUILayout.Space(8.0f); GUILayout.BeginVertical(); if (GUILayout.Button("Add Constraint", GUILayout.Height(24.0f))) { constraints.InsertArrayElementAtIndex(0); } EditorGUILayout.EndVertical(); GUILayout.Space(8.0f); EditorGUILayout.EndHorizontal(); } GUILayout.Space(5.0f); EditorGUILayout.EndVertical(); GUILayout.Space(4.0f); EditorGUILayout.EndHorizontal(); GUILayout.Space(2.0f); } else { GUILayout.Box("", (GUIStyle)"RL Background", GUILayout.ExpandWidth(true), GUILayout.Height(10)); GUILayout.Space(-3.0f); } EditorGUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); GUILayout.Label("", (GUIStyle)"RL Background", GUILayout.Width(60.0f), GUILayout.Height(20)); Rect lastRect = GUILayoutUtility.GetLastRect(); if (GUI.Button(new Rect(lastRect.x, lastRect.y, lastRect.width / 2, lastRect.height), m_profilePlusButtonContent, m_footerButtonStyle)) { entryAction = CollectionAction.Add; } if (GUI.Button(new Rect(lastRect.center.x, lastRect.y, lastRect.width / 2, lastRect.height), m_profileMinusButtonContent, m_footerButtonStyle)) { entryAction = CollectionAction.Remove; } EditorGUILayout.EndHorizontal(); GUILayout.Space(5); return(entryAction); }