private void PaintAdvancedSettings() { GUIStyle style = (this.foldoutAdvancedSettings ? CoreGUIStyles.GetToggleButtonNormalOn() : CoreGUIStyles.GetToggleButtonNormalOff() ); EditorGUILayout.BeginVertical(CoreGUIStyles.GetBoxExpanded()); if (GUILayout.Button("Advanced Options", style)) { this.foldoutAdvancedSettings = !this.foldoutAdvancedSettings; } if (this.foldoutAdvancedSettings) { EditorGUILayout.PropertyField(this.spMinDistance); EditorGUI.BeginDisabledGroup(!this.spMinDistance.boolValue); EditorGUI.indentLevel++; EditorGUILayout.PropertyField(this.spMinDistanceToPlayer); EditorGUI.indentLevel--; EditorGUI.EndDisabledGroup(); } EditorGUILayout.EndVertical(); if (this.trigger.gameObject.GetComponent <Hotspot>() == null) { if (GUILayout.Button("Create Hotspot")) { Undo.AddComponent <Hotspot>(this.trigger.gameObject); } } }
private void PaintContent(SerializedProperty property, AnimBool state, bool requiresCollider) { using (var group = new EditorGUILayout.FadeGroupScope(state.faded)) { if (group.visible) { EditorGUILayout.BeginVertical(CoreGUIStyles.GetBoxExpanded()); EditorGUILayout.PropertyField(property); if (requiresCollider && this.hotspot.gameObject.GetComponent <Collider>() == null) { EditorGUILayout.HelpBox(MSG_REQUIRE_COLLIDER, MessageType.Warning); } EditorGUILayout.EndVertical(); } } }
// INSPECTOR: ----------------------------------------------------------------------------- public override void OnInspectorGUI() { if (target == null || serializedObject == null) { return; } serializedObject.Update(); this.UpdateSubEditors(this.instance.conditions); int removConditionIndex = -1; int duplicateConditionIndex = -1; int copyConditionIndex = -1; bool forceRepaint = false; bool conditionsCollapsed = true; int spConditionsSize = this.spConditions.arraySize; for (int i = 0; i < spConditionsSize; ++i) { bool forceSortRepaint = this.editorSortableList.CaptureSortEvents(this.handleRect[i], i); forceRepaint = forceSortRepaint || forceRepaint; GUILayout.BeginVertical(); ItemReturnOperation returnOperation = this.PaintConditionsHeader(i); if (returnOperation.removeIndex) { removConditionIndex = i; } if (returnOperation.duplicateIndex) { duplicateConditionIndex = i; } if (returnOperation.copyIndex) { copyConditionIndex = i; } conditionsCollapsed &= this.isExpanded[i].target; using (var group = new EditorGUILayout.FadeGroupScope(this.isExpanded[i].faded)) { if (group.visible) { EditorGUILayout.BeginVertical(CoreGUIStyles.GetBoxExpanded()); if (this.subEditors[i] != null) { this.subEditors[i].OnInspectorGUI(); } else { EditorGUILayout.HelpBox(MSG_UNDEF_CONDITION_1, MessageType.Warning); EditorGUILayout.HelpBox(MSG_UNDEF_CONDITION_2, MessageType.None); } EditorGUILayout.EndVertical(); } } GUILayout.EndVertical(); if (UnityEngine.Event.current.type == EventType.Repaint) { this.objectRect[i] = GUILayoutUtility.GetLastRect(); } this.editorSortableList.PaintDropPoints(this.objectRect[i], i, spConditionsSize); } Rect rectControls = GUILayoutUtility.GetRect(GUIContent.none, CoreGUIStyles.GetToggleButtonNormalOn()); Rect rectAddConditions = new Rect( rectControls.x, rectControls.y, SelectTypePanel.WINDOW_WIDTH, rectControls.height ); Rect rectPaste = new Rect( rectAddConditions.x + rectAddConditions.width, rectControls.y, 25f, rectControls.height ); Rect rectPlay = new Rect( rectControls.x + rectControls.width - 25f, rectControls.y, 25f, rectControls.height ); Rect rectCollapse = new Rect( rectPlay.x - 25f, rectPlay.y, 25f, rectPlay.height ); Rect rectUnused = new Rect( rectPaste.x + rectPaste.width, rectControls.y, rectControls.width - ((rectPaste.x + rectPaste.width) - rectControls.x) - rectPlay.width - rectCollapse.width, rectControls.height ); if (GUI.Button(rectAddConditions, "Add Condition", CoreGUIStyles.GetToggleButtonLeftAdd())) { SelectTypePanel selectTypePanel = new SelectTypePanel(this.AddNewCondition, "Conditions", typeof(ICondition)); PopupWindow.Show(this.addConditionsButtonRect, selectTypePanel); } if (UnityEngine.Event.current.type == EventType.Repaint) { this.addConditionsButtonRect = rectAddConditions; } GUIContent gcPaste = ClausesUtilities.Get(ClausesUtilities.Icon.Paste); EditorGUI.BeginDisabledGroup(CLIPBOARD_ICONDITION == null); if (GUI.Button(rectPaste, gcPaste, CoreGUIStyles.GetButtonMid())) { ICondition conditionCreated = (ICondition)this.instance.gameObject.AddComponent(CLIPBOARD_ICONDITION.GetType()); EditorUtility.CopySerialized(CLIPBOARD_ICONDITION, conditionCreated); this.spConditions.AddToObjectArray(conditionCreated); this.AddSubEditorElement(conditionCreated, -1, true); DestroyImmediate(CLIPBOARD_ICONDITION.gameObject, true); if (!Application.isPlaying) { EditorSceneManager.MarkSceneDirty(this.instance.gameObject.scene); } CLIPBOARD_ICONDITION = null; } EditorGUI.EndDisabledGroup(); GUI.Label(rectUnused, "", CoreGUIStyles.GetToggleButtonMidOn()); GUIContent gcToggle = (conditionsCollapsed ? ClausesUtilities.Get(ClausesUtilities.Icon.Collapse) : ClausesUtilities.Get(ClausesUtilities.Icon.Expand) ); EditorGUI.BeginDisabledGroup(this.instance.conditions.Length == 0); if (GUI.Button(rectCollapse, gcToggle, CoreGUIStyles.GetButtonMid())) { for (int i = 0; i < this.subEditors.Length; ++i) { this.SetExpand(i, !conditionsCollapsed); } } EditorGUI.EndDisabledGroup(); GUIContent gcPlay = ClausesUtilities.Get(ClausesUtilities.Icon.Play); EditorGUI.BeginDisabledGroup(!EditorApplication.isPlaying); if (GUI.Button(rectPlay, gcPlay, CoreGUIStyles.GetButtonRight())) { Debug.LogFormat("<b>Conditions Evaluation:</b> {0}", this.instance.Check(null)); } EditorGUI.EndDisabledGroup(); if (removConditionIndex >= 0) { ICondition source = (ICondition)this.spConditions.GetArrayElementAtIndex(removConditionIndex).objectReferenceValue; this.spConditions.RemoveFromObjectArrayAt(removConditionIndex); this.RemoveSubEditorsElement(removConditionIndex); DestroyImmediate(source, true); if (!Application.isPlaying) { EditorSceneManager.MarkSceneDirty(this.instance.gameObject.scene); } } if (duplicateConditionIndex >= 0) { int srcIndex = duplicateConditionIndex; int dstIndex = duplicateConditionIndex + 1; ICondition source = (ICondition)this.subEditors[srcIndex].target; ICondition copy = (ICondition)this.instance.gameObject.AddComponent(source.GetType()); this.spConditions.InsertArrayElementAtIndex(dstIndex); this.spConditions.GetArrayElementAtIndex(dstIndex).objectReferenceValue = copy; EditorUtility.CopySerialized(source, copy); this.AddSubEditorElement(copy, dstIndex, true); if (!Application.isPlaying) { EditorSceneManager.MarkSceneDirty(this.instance.gameObject.scene); } } if (copyConditionIndex >= 0) { ICondition source = (ICondition)this.subEditors[copyConditionIndex].target; GameObject conditionInstance = new GameObject(); conditionInstance.hideFlags = HideFlags.HideAndDontSave; CLIPBOARD_ICONDITION = (ICondition)conditionInstance.AddComponent(source.GetType()); EditorUtility.CopySerialized(source, CLIPBOARD_ICONDITION); } EditorSortableList.SwapIndexes swapIndexes = this.editorSortableList.GetSortIndexes(); if (swapIndexes != null) { this.spConditions.MoveArrayElement(swapIndexes.src, swapIndexes.dst); this.MoveSubEditorsElement(swapIndexes.src, swapIndexes.dst); if (!Application.isPlaying) { EditorSceneManager.MarkSceneDirty(this.instance.gameObject.scene); } } if (EditorApplication.isPlaying) { forceRepaint = true; } if (forceRepaint) { this.Repaint(); } serializedObject.ApplyModifiedProperties(); }
private void PaintInteractions() { int removeInteractionIndex = -1; int duplicateInteractionIndex = -1; int copyInteractionIndex = -1; bool forceRepaint = false; int interactionsSize = this.spInteractions.arraySize; for (int i = 0; i < interactionsSize; ++i) { if (this.subEditors == null || i >= this.subEditors.Length || this.subEditors[i] == null) { continue; } bool repaint = this.editorSortableList.CaptureSortEvents(this.subEditors[i].handleDragRect, i); forceRepaint = repaint || forceRepaint; EditorGUILayout.BeginVertical(); Rect rectHeader = GUILayoutUtility.GetRect(GUIContent.none, CoreGUIStyles.GetToggleButtonNormalOn()); this.PaintDragHandle(i, rectHeader); EditorGUIUtility.AddCursorRect(this.subEditors[i].handleDragRect, MouseCursor.Pan); string name = (this.isExpanded[i].target ? "▾ " : "▸ ") + this.instance.interactions[i].description; GUIStyle style = (this.isExpanded[i].target ? CoreGUIStyles.GetToggleButtonMidOn() : CoreGUIStyles.GetToggleButtonMidOff() ); Rect rectDelete = new Rect( rectHeader.x + rectHeader.width - 25f, rectHeader.y, 25f, rectHeader.height ); Rect rectDuplicate = new Rect( rectDelete.x - 25f, rectHeader.y, 25f, rectHeader.height ); Rect rectCopy = new Rect( rectDuplicate.x - 25f, rectHeader.y, 25f, rectHeader.height ); Rect rectMain = new Rect( rectHeader.x + 25f, rectHeader.y, rectHeader.width - (25f * 4f), rectHeader.height ); if (GUI.Button(rectMain, name, style)) { this.ToggleExpand(i); } GUIContent gcCopy = InteractionUtilities.Get(InteractionUtilities.Icon.Copy); GUIContent gcDuplicate = InteractionUtilities.Get(InteractionUtilities.Icon.Duplicate); GUIContent gcDelete = InteractionUtilities.Get(InteractionUtilities.Icon.Delete); if (GUI.Button(rectCopy, gcCopy, CoreGUIStyles.GetButtonMid())) { copyInteractionIndex = i; } if (GUI.Button(rectDuplicate, gcDuplicate, CoreGUIStyles.GetButtonMid())) { duplicateInteractionIndex = i; } if (GUI.Button(rectDelete, gcDelete, CoreGUIStyles.GetButtonRight())) { if (EditorUtility.DisplayDialog(MSG_REMOVE_TITLE, MSG_REMOVE_DESCR, "Yes", "Cancel")) { removeInteractionIndex = i; } } using (var group = new EditorGUILayout.FadeGroupScope(this.isExpanded[i].faded)) { if (group.visible) { EditorGUILayout.BeginVertical(CoreGUIStyles.GetBoxExpanded()); this.subEditors[i].OnInteractionGUI(); EditorGUILayout.EndVertical(); } } EditorGUILayout.EndVertical(); if (UnityEngine.Event.current.type == EventType.Repaint) { this.subEditors[i].interactionRect = GUILayoutUtility.GetLastRect(); } this.editorSortableList.PaintDropPoints(this.subEditors[i].interactionRect, i, interactionsSize); } if (copyInteractionIndex >= 0) { Interaction source = (Interaction)this.subEditors[copyInteractionIndex].target; GameObject copyInstance = EditorUtility.CreateGameObjectWithHideFlags( "Interaction (Copy)", HideFlags.HideAndDontSave ); CLIPBOARD_INTERACTION = (Interaction)copyInstance.AddComponent(source.GetType()); EditorUtility.CopySerialized(source, CLIPBOARD_INTERACTION); if (CLIPBOARD_INTERACTION.conditionsList != null) { IConditionsList conditionsListSource = CLIPBOARD_INTERACTION.conditionsList; IConditionsList conditionsListCopy = this.instance.gameObject.AddComponent <IConditionsList>(); EditorUtility.CopySerialized(conditionsListSource, conditionsListCopy); EventEditor.DuplicateIConditionList(conditionsListSource, conditionsListCopy); SerializedObject soCopy = new SerializedObject(CLIPBOARD_INTERACTION); soCopy.FindProperty(InteractionEditor.PROP_CONDITIONSLIST).objectReferenceValue = conditionsListCopy; soCopy.ApplyModifiedProperties(); soCopy.Update(); } } if (duplicateInteractionIndex >= 0) { int srcIndex = duplicateInteractionIndex; int dstIndex = duplicateInteractionIndex + 1; Interaction source = (Interaction)this.subEditors[srcIndex].target; Interaction copy = (Interaction)this.instance.gameObject.AddComponent(source.GetType()); EditorUtility.CopySerialized(source, copy); if (copy.conditionsList != null) { IConditionsList conditionsListSource = copy.conditionsList; IConditionsList conditionsListCopy = this.instance.gameObject.AddComponent <IConditionsList>(); EditorUtility.CopySerialized(conditionsListSource, conditionsListCopy); EventEditor.DuplicateIConditionList(conditionsListSource, conditionsListCopy); SerializedObject soCopy = new SerializedObject(copy); soCopy.FindProperty(InteractionEditor.PROP_CONDITIONSLIST).objectReferenceValue = conditionsListCopy; soCopy.ApplyModifiedProperties(); soCopy.Update(); } this.spInteractions.InsertArrayElementAtIndex(dstIndex); this.spInteractions.GetArrayElementAtIndex(dstIndex).objectReferenceValue = copy; this.spInteractions.serializedObject.ApplyModifiedProperties(); this.spInteractions.serializedObject.Update(); this.AddSubEditorElement(copy, dstIndex, true); } if (removeInteractionIndex >= 0) { this.subEditors[removeInteractionIndex].OnDestroyInteraction(); Interaction rmInteraction = (Interaction)this.spInteractions .GetArrayElementAtIndex(removeInteractionIndex).objectReferenceValue; this.spInteractions.DeleteArrayElementAtIndex(removeInteractionIndex); this.spInteractions.RemoveFromObjectArrayAt(removeInteractionIndex); DestroyImmediate(rmInteraction, true); } EditorSortableList.SwapIndexes swapIndexes = this.editorSortableList.GetSortIndexes(); if (swapIndexes != null) { this.spInteractions.MoveArrayElement(swapIndexes.src, swapIndexes.dst); this.MoveSubEditorsElement(swapIndexes.src, swapIndexes.dst); } if (forceRepaint) { this.Repaint(); } }