Browse Source

FlowchartWindow force clears filteredBlocks during target Flowchart change

- better handles switching scenes and to and from play mode
- warns user when nulls are found
master
desktop-maesty/steve 5 years ago
parent
commit
baf64aaa98
  1. 40
      Assets/Fungus/Scripts/Editor/FlowchartWindow.cs

40
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;

Loading…
Cancel
Save