Skip to content

Commit 96449e8

Browse files
committed
fix(dialogue editor): no longer fires an error when deleting list items
Action and condition lists were firing false positive errors due to a known Unity bug. The re-orderable list is trying to update the display before the asset database can refresh the assets. Thereby triggering a false positive error that the asset cannot be displayed.
1 parent f7fe75f commit 96449e8

File tree

5 files changed

+27
-22
lines changed

5 files changed

+27
-22
lines changed

Assets/com.fluid.dialogue/Editor/Inspectors/NodeDataBase/NodeDataBaseEditor.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,13 @@ public override void OnInspectorGUI () {
3131
base.OnInspectorGUI();
3232
SpellCheckText();
3333

34+
serializedObject.Update();
35+
3436
_conditions.Update();
3537
_enterActions?.Update();
3638
_exitActions?.Update();
39+
40+
serializedObject.ApplyModifiedProperties();
3741
}
3842

3943
private void SpellCheckText () {

Assets/com.fluid.dialogue/Editor/Inspectors/NodeDataBase/SortableLists/ActionsSortableList.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@ public class ActionsSortableList : SortableListBase {
1111
private readonly NestedDataCrud<ActionDataBase> _actionCrud;
1212

1313
private static TypesToMenu<ActionDataBase> ActionTypes =>
14-
_actionTypes ?? (_actionTypes = new TypesToMenu<ActionDataBase>());
14+
_actionTypes ??= new TypesToMenu<ActionDataBase>();
1515

1616
public ActionsSortableList (Editor editor, string property, NodeDataBase node, List<ActionDataBase> actions)
1717
: base(editor, property) {
18-
_soPrinter = new ScriptableObjectListPrinter(_serializedProp);
18+
_soPrinter = new ScriptableObjectListPrinter(editor.serializedObject.FindProperty(property));
1919
_actionCrud = new NestedDataCrud<ActionDataBase>(node, actions, ActionTypes);
2020

2121
_list.drawElementCallback = _soPrinter.DrawScriptableObject;

Assets/com.fluid.dialogue/Editor/Inspectors/NodeDataBase/SortableLists/ConditionSortableList.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@ public class ConditionSortableList : SortableListBase {
1111
private readonly NestedDataCrud<ConditionDataBase> _conditionCrud;
1212

1313
private static TypesToMenu<ConditionDataBase> ConditionTypes =>
14-
_conditionTypes ?? (_conditionTypes = new TypesToMenu<ConditionDataBase>());
14+
_conditionTypes ??= new TypesToMenu<ConditionDataBase>();
1515

1616
public ConditionSortableList (Editor editor, string property, NodeDataBase node, List<ConditionDataBase> conditions)
1717
: base(editor, property) {
18-
_soPrinter = new ScriptableObjectListPrinter(_serializedProp);
18+
_soPrinter = new ScriptableObjectListPrinter(editor.serializedObject.FindProperty(property));
1919
_conditionCrud = new NestedDataCrud<ConditionDataBase>(node, conditions, ConditionTypes);
2020

2121
_list.drawElementCallback = _soPrinter.DrawScriptableObject;

Assets/com.fluid.dialogue/Editor/Inspectors/NodeDataBase/SortableLists/NestedDataCrud.cs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ private void CreateItem (Type type) {
5454

5555
Undo.CollapseUndoOperations(Undo.GetCurrentGroup());
5656
AssetDatabase.SaveAssets();
57+
AssetDatabase.Refresh();
5758
}
5859

5960
public void DeleteItem (ReorderableList list) {
@@ -70,7 +71,15 @@ public void DeleteItem (ReorderableList list) {
7071
Undo.DestroyObjectImmediate(listItem);
7172

7273
Undo.CollapseUndoOperations(Undo.GetCurrentGroup());
73-
AssetDatabase.SaveAssets();
74+
75+
// Forcibly refresh the serialized object to prevent an immediate crash
76+
list.serializedProperty.serializedObject.Update();
77+
78+
// We must refresh instead of save. Otherwise the re-orderable list will crash due to an editor bug
79+
AssetDatabase.Refresh();
80+
81+
// Mark the asset dirty so the changes are saved
82+
EditorUtility.SetDirty(graph);
7483
}
7584
}
7685
}

Assets/com.fluid.dialogue/Editor/Inspectors/SortableListBase.cs

Lines changed: 9 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,42 +4,34 @@
44

55
namespace CleverCrow.Fluid.Dialogues.Editors.Inspectors {
66
public class SortableListBase {
7-
protected readonly Editor _editor;
8-
protected readonly ReorderableList _list;
9-
protected readonly SerializedObject _serializedObject;
10-
protected readonly SerializedProperty _serializedProp;
7+
protected ReorderableList _list;
8+
bool _skipFrame;
119

1210
public SortableListBase (Editor editor, string property) {
1311
if (editor == null) {
1412
Debug.LogError("Editor cannot be null");
1513
return;
1614
}
1715

18-
_editor = editor;
19-
_serializedProp = _editor.serializedObject.FindProperty(property);
20-
_serializedObject = _editor.serializedObject;
21-
22-
if (_serializedProp == null) {
16+
var prop = editor.serializedObject.FindProperty(property);
17+
if (prop == null) {
2318
Debug.LogErrorFormat("Could not find property {0}", property);
2419
return;
2520
}
2621

2722
_list = new ReorderableList(
28-
_serializedObject,
29-
_serializedProp,
23+
editor.serializedObject,
24+
prop,
3025
true, true, true, true);
3126

27+
var title = prop.displayName;
3228
_list.drawHeaderCallback = rect => {
33-
EditorGUI.LabelField(rect, _serializedProp.displayName);
29+
EditorGUI.LabelField(rect, title);
3430
};
3531
}
3632

3733
public void Update () {
38-
_serializedObject.Update();
39-
40-
_list?.DoLayoutList();
41-
42-
_serializedObject.ApplyModifiedProperties();
34+
if (_list != null) _list.DoLayoutList();
4335
}
4436
}
4537
}

0 commit comments

Comments
 (0)