From baf64aaa98f80a1838850f65f7d7688a1c09d549 Mon Sep 17 00:00:00 2001 From: desktop-maesty/steve Date: Mon, 16 Sep 2019 20:02:37 +1000 Subject: [PATCH] FlowchartWindow force clears filteredBlocks during target Flowchart change - better handles switching scenes and to and from play mode - warns user when nulls are found --- .../Fungus/Scripts/Editor/FlowchartWindow.cs | 40 ++++++++++++++++--- 1 file changed, 35 insertions(+), 5 deletions(-) diff --git a/Assets/Fungus/Scripts/Editor/FlowchartWindow.cs b/Assets/Fungus/Scripts/Editor/FlowchartWindow.cs index 6988869f..270496c6 100644 --- a/Assets/Fungus/Scripts/Editor/FlowchartWindow.cs +++ b/Assets/Fungus/Scripts/Editor/FlowchartWindow.cs @@ -336,6 +336,7 @@ namespace Fungus.EditorUtils if (flowchart == null) { blocks = new Block[0]; + filteredBlocks = new Block[0]; } else { @@ -347,6 +348,8 @@ namespace Fungus.EditorUtils protected virtual void OnInspectorUpdate() { + if (HandleFlowchartSelectionChange()) return; + // Ensure the Block Inspector is always showing the currently selected block var flowchart = GetFlowchart(); if (flowchart == null || AnyNullBLocks()) @@ -450,13 +453,22 @@ namespace Fungus.EditorUtils { filterStale = false; //reset all - foreach (var item in filteredBlocks) + for (int i = 0; filteredBlocks != null && i < filteredBlocks.Length; i++) + { + if(filteredBlocks[i] != null) + { + filteredBlocks[i].IsFiltered = false; + } + } + + var nullCount = filteredBlocks.Count(x => x == null); + if (nullCount > 0 && nullCount != filteredBlocks.Length) { - item.IsFiltered = false; + Debug.LogWarning("Null block found in filteredBlocks. May be a symptom of an underlying issue"); } //gather new - filteredBlocks = blocks.Where(block => block.BlockName.ToLower().Contains(searchString.ToLower())).ToArray(); + filteredBlocks = blocks.Where(block => block.BlockName.IndexOf(searchString, StringComparison.OrdinalIgnoreCase) >= 0).ToArray(); //update filteredness foreach (var item in filteredBlocks) @@ -573,9 +585,16 @@ namespace Fungus.EditorUtils { mouseDownSelectionState.AddRange(flowchart.SelectedBlocks); flowchart.ClearSelectedBlocks(); - foreach (var item in mouseDownSelectionState) + for (int i = 0; i < mouseDownSelectionState.Count; i++) { - item.IsControlSelected = true; + if (mouseDownSelectionState[i] != null) + { + mouseDownSelectionState[i].IsControlSelected = true; + } + else + { + Debug.LogWarning("Null block found in mouseDownSelectionState. May be a symptom of an underlying issue"); + } } } @@ -633,6 +652,17 @@ namespace Fungus.EditorUtils blockInspector = null; prevFlowchart = flowchart; executingBlocks.ClearAll(); + + //attempt to defilter previous, if due to scene change these will be null + // the regular filter updates will still occur within UpdateBlockCollection + for (int i = 0; i < filteredBlocks.Length; i++) + { + if (filteredBlocks[i] != null) + { + filteredBlocks[i].IsFiltered = false; + } + } + UpdateBlockCollection(); Repaint(); return true;