public void DeleteTransitionAtIndex(int index) { if (index < 0 || index >= TransitionsProp.arraySize) { return; } SerializedTransition currentTrans = GetTransitionAtIndex(index); Undo.SetCurrentGroupName("Delete Transition"); int currentGroup = Undo.GetCurrentGroup(); Undo.RegisterCompleteObjectUndo(SerializedObject.targetObject, "Scene Data"); for (int i = 0; i < currentTrans.ConditionsProp.arraySize; i++) { SerializedProperty currentCond = currentTrans.ConditionsProp.GetArrayElementAtIndex(i); Undo.DestroyObjectImmediate(currentCond.objectReferenceValue); } TransitionsProp.DeleteArrayElementAtIndex(index); Undo.CollapseUndoOperations(currentGroup); SerializedObject.ApplyModifiedProperties(); AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(SerializedObject.targetObject)); }
public void SetSelectedTransition(int destId) { for (int i = 0; i < serializedScene.TransitionsProp.arraySize; i++) { SerializedTransition serializedTrans = serializedScene.GetTransitionAtIndex(i); if (serializedTrans.DestSceneIdProp.intValue == destId) { transitionListDisplay.index = i; selectedTransitionProp = serializedTrans.TransitionProperty; break; } } }
private void RenderSelectedTransition() { SerializedTransition transitionProps = new SerializedTransition(selectedTransitionProp); selectedTransitionProp.serializedObject.Update(); EditorGUILayout.BeginVertical(GUI.skin.box); EditorGUILayout.BeginVertical(GUI.skin.box); EditorGUILayout.LabelField("Selected Transition: "); EditorGUI.indentLevel++; EditorGUILayout.LabelField(GetTransitionDisplayName(transitionProps)); EditorGUI.indentLevel--; EditorGUILayout.BeginHorizontal(); EditorGUI.BeginChangeCheck(); transitionProps.TransitionLabelProp.stringValue = EditorGUILayout.TextField(transitionProps.TransitionLabelProp.stringValue, SceneManagerResources.TransitionNameStyle); GUI.SetNextControlName("ClearButton"); if (GUILayout.Button("Clear", GUILayout.Width(50f))) { transitionProps.TransitionLabelProp.stringValue = string.Empty; // Steal focus from the text field to force it to update GUI.FocusControl("ClearButton"); } if (EditorGUI.EndChangeCheck()) { transitionProps.TransitionLabelProp.serializedObject.ApplyModifiedProperties(); } EditorGUILayout.EndHorizontal(); EditorGUILayout.EndVertical(); EditorGUILayout.Space(); if (conditionsEditor != null) { conditionsEditor.OnInspectorGUI(); } EditorGUILayout.EndVertical(); }
/// <summary> /// Get the display name for the transition /// </summary> /// <param name="transition">The extracted serialized properties</param> /// <returns>The text to display as the transition identifier</returns> private string GetTransitionDisplayName(SerializedTransition transition, bool forceArrowFormat = false) { SceneModel destinationScene = SerializedSceneManager.TargetManager. GetSceneById(transition.DestSceneIdProp.intValue); string displayName = transition.TransitionLabelProp.stringValue; if (string.IsNullOrEmpty(displayName) || forceArrowFormat) { displayName = serializedScene.SceneNameProp.stringValue + " -> " + destinationScene.SceneName; } return(displayName); }
public void DeleteTransitionsInvolving(int sceneId) { Undo.SetCurrentGroupName("Delete Transitions"); int currentGroup = Undo.GetCurrentGroup(); for (int t = TransitionsProp.arraySize - 1; t >= 0; t--) { SerializedTransition currentTrans = GetTransitionAtIndex(t); if (currentTrans.DestSceneIdProp.intValue == sceneId || SceneIdProp.intValue == sceneId) { DeleteTransitionAtIndex(t); } } Undo.CollapseUndoOperations(currentGroup); }
/// <summary> /// Draws a scene variable element of the lsit /// </summary> /// <param name="rect">The rectangle to render the variable in</param> /// <param name="index">The index of the property</param> /// <param name="isActive">True if the element is active, false if not</param> /// <param name="isSelected">True if the element is selected, false if not</param> private void DrawElement(Rect rect, int index, bool isActive, bool isSelected) { SerializedTransition transitionProps = serializedScene.GetTransitionAtIndex(index); Rect muteToggleRect = new Rect(rect); muteToggleRect.xMin = rect.width - 10f; Rect nameRect = new Rect(rect); nameRect.xMax = muteToggleRect.xMin; GUI.Label(nameRect, GetTransitionDisplayName(transitionProps)); EditorGUI.BeginChangeCheck(); transitionProps.IsMutedProp.boolValue = GUI.Toggle(muteToggleRect, transitionProps.IsMutedProp.boolValue, GUIContent.none); if (EditorGUI.EndChangeCheck()) { serializedScene.SerializedObject.ApplyModifiedProperties(); } }