private void ResetEditor(SerializedProperty property, JuicyFeedbackBase feedback) { int referenceCount = feedback.referenceCount; if (PrefabUtility.IsPartOfAnyPrefab(property.objectReferenceValue)) { PrefabUtility.RevertObjectOverride(feedback, InteractionMode.UserAction); feedback.referenceCount = referenceCount; return; } // Create a temporary feedback and copy the values JuicyFeedbackBase tmpFeedback = AddFeedback(feedback.GetType()); int index = feedbackListProp.arraySize - 1; tmpFeedback.referenceCount = referenceCount; SerializedProperty tmp = feedbackListProp .GetArrayElementAtIndex(index); JuicyEditorUtils.CopyFeedback(tmp, tmpFeedback); JuicyEditorUtils.PasteFeedback(property, feedback); FeedbackCopyHelper.ClearCache(); RemoveFeedback(tmp, tmpFeedback, index); serializedObject.ApplyModifiedProperties(); }
public static void Paste(SerializedProperty feedbacks, Action removeAll, Func <Type, JuicyFeedbackBase> addAction) { if (feedbacks == null) { return; } removeAll.Invoke(); foreach (FeedbackCopyData data in CopiedFeedbacks) { addAction.Invoke(data.type); } for (int i = 0; i < feedbacks.arraySize; i++) { SerializedProperty feedback = feedbacks.GetArrayElementAtIndex(i); JuicyFeedbackBase f = feedback.objectReferenceValue as JuicyFeedbackBase; FeedbackCopyData data = CopiedFeedbacks[i]; JuicyEditorUtils.PasteFeedback(feedback, f); foreach (var property in data.properties) { SerializedObject obj = new SerializedObject(f); obj.CopyFromSerializedProperty(property); obj.ApplyModifiedProperties(); } } CopiedFeedbacks.Clear(); }
private void ShowElementContextMenu(int index) { SerializedProperty property = feedbackListProp.GetArrayElementAtIndex(index); JuicyFeedbackBase feedback = property.objectReferenceValue as JuicyFeedbackBase; var itemMenu = new GenericMenu(); itemMenu.AddItem(JuicyEditorUtils.GetContent("Remove|Remove feedback from List"), false, () => Remove(property, feedback, index)); itemMenu.AddItem(JuicyEditorUtils.GetContent("Reset|Resets the feedback to default"), false, () => ResetEditor(property, feedback)); itemMenu.AddSeparator(string.Empty); itemMenu.AddItem(JuicyEditorUtils.GetContent("Copy|Copy feedback values"), false, () => { FeedbackCopyHelper.CopyReference(feedback); JuicyEditorUtils.CopyFeedback(property, feedback); }); if (FeedbackCopyHelper.HasCopy) { itemMenu.AddItem(JuicyEditorUtils.GetContent("Paste|Paste feedback values"), false, () => JuicyEditorUtils.PasteFeedback(property, feedback)); itemMenu.AddItem(JuicyEditorUtils.GetContent("Paste as new|Paste copied feedback values as a new feedback"), false, PasteAsNew); itemMenu.AddItem(JuicyEditorUtils.GetContent("Paste Reference|Paste feedback reference"), false, () => { FeedbackCopyHelper.PasteReference(juicyFeedbackList.feedbackList); }); } else { itemMenu.AddDisabledItem(JuicyEditorUtils.GetContent("Paste")); } Rect menuRect = new Rect(Event.current.mousePosition, Vector2.zero); menuRect.y -= 10; itemMenu.DropDown(menuRect); }