Browse Source

Merge pull request #759 from stevehalliwell/FilterBlocksSceneChange

FlowchartWindow force clears filteredBlocks during target Flowchart change
master
Steve Halliwell 5 years ago committed by GitHub
parent
commit
ae1ec9e332
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 13
      Assets/Fungus/Scripts/Components/Flowchart.cs
  2. 6
      Assets/Fungus/Scripts/Editor/BlockInspector.cs
  3. 61
      Assets/Fungus/Scripts/Editor/FlowchartWindow.cs

13
Assets/Fungus/Scripts/Components/Flowchart.cs

@ -1186,7 +1186,18 @@ namespace Fungus
var res = gameObject.GetComponents<Block>(); var res = gameObject.GetComponents<Block>();
selectedBlocks = res.Where(x => x.IsSelected).ToList(); selectedBlocks = res.Where(x => x.IsSelected).ToList();
} }
public void ReverseUpdateSelectedCache()
{
for (int i = 0; i < selectedBlocks.Count; i++)
{
if(selectedBlocks[i] != null)
{
selectedBlocks[i].IsSelected = true;
}
}
}
/// <summary> /// <summary>
/// Reset the commands and variables in the Flowchart. /// Reset the commands and variables in the Flowchart.
/// </summary> /// </summary>

6
Assets/Fungus/Scripts/Editor/BlockInspector.cs

@ -93,6 +93,12 @@ namespace Fungus.EditorUtils
return; return;
} }
//if there is no selection but we are drawing, fix that
if (flowchart.SelectedBlocks.Count == 0)
{
flowchart.AddSelectedBlock(block);
}
if (activeBlockEditor == null || if (activeBlockEditor == null ||
!block.Equals(activeBlockEditor.target)) !block.Equals(activeBlockEditor.target))
{ {

61
Assets/Fungus/Scripts/Editor/FlowchartWindow.cs

@ -264,13 +264,30 @@ namespace Fungus.EditorUtils
EditorApplication.update += OnEditorUpdate; EditorApplication.update += OnEditorUpdate;
Undo.undoRedoPerformed += Undo_ForceRepaint; Undo.undoRedoPerformed += Undo_ForceRepaint;
#if UNITY_2017_4_OR_NEWER
EditorApplication.playModeStateChanged += EditorApplication_playModeStateChanged;
#endif
} }
protected virtual void OnDisable() protected virtual void OnDisable()
{ {
EditorApplication.update -= OnEditorUpdate; EditorApplication.update -= OnEditorUpdate;
Undo.undoRedoPerformed -= Undo_ForceRepaint; Undo.undoRedoPerformed -= Undo_ForceRepaint;
#if UNITY_2017_4_OR_NEWER
EditorApplication.playModeStateChanged -= EditorApplication_playModeStateChanged;
#endif
}
#if UNITY_2017_4_OR_NEWER
private void EditorApplication_playModeStateChanged(PlayModeStateChange obj)
{
//force null so it can refresh context on the other side of the context
flowchart = null;
prevFlowchart = null;
blockInspector = null;
} }
#endif
protected void Undo_ForceRepaint() protected void Undo_ForceRepaint()
{ {
@ -336,6 +353,7 @@ namespace Fungus.EditorUtils
if (flowchart == null) if (flowchart == null)
{ {
blocks = new Block[0]; blocks = new Block[0];
filteredBlocks = new Block[0];
} }
else else
{ {
@ -347,6 +365,8 @@ namespace Fungus.EditorUtils
protected virtual void OnInspectorUpdate() protected virtual void OnInspectorUpdate()
{ {
if (HandleFlowchartSelectionChange()) return;
// Ensure the Block Inspector is always showing the currently selected block // Ensure the Block Inspector is always showing the currently selected block
var flowchart = GetFlowchart(); var flowchart = GetFlowchart();
if (flowchart == null || AnyNullBLocks()) if (flowchart == null || AnyNullBLocks())
@ -450,13 +470,22 @@ namespace Fungus.EditorUtils
{ {
filterStale = false; filterStale = false;
//reset all //reset all
foreach (var item in filteredBlocks) for (int i = 0; filteredBlocks != null && i < filteredBlocks.Length; i++)
{ {
item.IsFiltered = false; if(filteredBlocks[i] != null)
{
filteredBlocks[i].IsFiltered = false;
}
}
var nullCount = filteredBlocks.Count(x => x == null);
if (nullCount > 0 && nullCount != filteredBlocks.Length)
{
Debug.LogWarning("Null block found in filteredBlocks. May be a symptom of an underlying issue");
} }
//gather new //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 //update filteredness
foreach (var item in filteredBlocks) foreach (var item in filteredBlocks)
@ -573,9 +602,16 @@ namespace Fungus.EditorUtils
{ {
mouseDownSelectionState.AddRange(flowchart.SelectedBlocks); mouseDownSelectionState.AddRange(flowchart.SelectedBlocks);
flowchart.ClearSelectedBlocks(); 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,7 +669,22 @@ namespace Fungus.EditorUtils
blockInspector = null; blockInspector = null;
prevFlowchart = flowchart; prevFlowchart = flowchart;
executingBlocks.ClearAll(); 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(); UpdateBlockCollection();
if(flowchart != null)
flowchart.ReverseUpdateSelectedCache();//becomes reverse restore selected cache
Repaint(); Repaint();
return true; return true;
} }

Loading…
Cancel
Save