Skip to content

Commit 37aef99

Browse files
committed
feat: calculate layout on node changed
1 parent c25c3e0 commit 37aef99

5 files changed

Lines changed: 50 additions & 14 deletions

File tree

Editor/Scripts/GraphView/PlayableGraphView.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ private void ClearView()
5656
{
5757
foreach (var playableOutputNode in _rootOutputNodes)
5858
{
59-
playableOutputNode.RemoveFromContainer();
59+
playableOutputNode.RemoveFromView();
6060
}
6161

6262
_rootOutputNodes.Clear();
@@ -88,7 +88,7 @@ private void UpdateView()
8888

8989
// create new node
9090
var playableOutputNode = PlayableOutputNodeFactory.CreateNode(playableOutput);
91-
playableOutputNode.AddToContainer(this);
91+
playableOutputNode.AddToView(this, null);
9292
playableOutputNode.AddFlag(NodeFlag.Active);
9393

9494
_rootOutputNodes.Add(playableOutputNode);
@@ -100,7 +100,7 @@ private void UpdateView()
100100
var rootOutputNode = _rootOutputNodes[i];
101101
if (!rootOutputNode.CheckFlag(NodeFlag.Active))
102102
{
103-
rootOutputNode.RemoveFromContainer();
103+
rootOutputNode.RemoveFromView();
104104

105105
_rootOutputNodes.RemoveAt(i);
106106
continue;

Editor/Scripts/GraphView/PlayableGraphView.cs.meta

Lines changed: 10 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Editor/Scripts/Node/GraphViewNode.cs

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,10 @@ namespace GBG.PlayableGraphMonitor.Editor.Node
1212
public enum NodeFlag : uint
1313
{
1414
None = 0,
15+
1516
Active = 1 << 0,
16-
//Dirty = 1 << 1,
17+
18+
HierarchyDirty = 1 << 1,
1719
}
1820

1921
public readonly struct NodeInput
@@ -52,7 +54,7 @@ public abstract class GraphViewNode : UNode
5254

5355
protected List<NodeInput> InternalInputs { get; } = new List<NodeInput>();
5456

55-
//protected GraphViewNode Parent { get; private set; }
57+
protected GraphViewNode Parent { get; private set; }
5658

5759

5860
public virtual void Update() { }
@@ -90,13 +92,14 @@ public override void BuildContextualMenu(ContextualMenuPopulateEvent evt)
9092

9193
#region Hierarchy
9294

93-
public void AddToContainer(UGraphView container)
95+
public void AddToView(UGraphView container, GraphViewNode parentNode)
9496
{
9597
Container = container;
9698
Container.AddElement(this);
99+
Parent = parentNode;
97100
}
98101

99-
public void RemoveFromContainer()
102+
public void RemoveFromView()
100103
{
101104
// self
102105
Container.RemoveElement(this);
@@ -106,12 +109,13 @@ public void RemoveFromContainer()
106109
{
107110
var input = InternalInputs[i];
108111
Container.RemoveElement(input.Edge);
109-
input.Node.RemoveFromContainer();
112+
input.Node.RemoveFromView();
110113
}
111114

112115
InternalInputs.Clear();
113116

114117
Container = null;
118+
Parent = null;
115119
}
116120

117121

@@ -209,11 +213,25 @@ public bool CheckFlag(NodeFlag flag)
209213
public void AddFlag(NodeFlag flag)
210214
{
211215
_flags |= (uint)flag;
216+
OnFlagsChanged();
212217
}
213218

214219
public void RemoveFlag(NodeFlag flag)
215220
{
216221
_flags &= ~(uint)flag;
222+
OnFlagsChanged();
223+
}
224+
225+
226+
protected virtual void OnFlagsChanged()
227+
{
228+
if (CheckFlag(NodeFlag.HierarchyDirty))
229+
{
230+
_hierarchySize = null;
231+
RemoveFlag(NodeFlag.HierarchyDirty);
232+
233+
Parent?.AddFlag(NodeFlag.HierarchyDirty);
234+
}
217235
}
218236

219237
#endregion

Editor/Scripts/Node/PlayableNode.cs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,14 +62,16 @@ public override void Update()
6262

6363
// create new node
6464
var inputPlayableNode = PlayableNodeFactory.CreateNode(inputPlayable);
65-
inputPlayableNode.AddToContainer(Container);
65+
inputPlayableNode.AddToView(Container, this);
6666
inputPlayableNode.AddFlag(NodeFlag.Active);
6767

6868
var inputPlayableNodeOutputPort = inputPlayableNode.OutputPorts[0];
6969
var selfInputPort = InternalInputPorts[i];
7070
var edge = selfInputPort.ConnectTo(inputPlayableNodeOutputPort);
7171
Container.AddElement(edge);
7272
InternalInputs.Add(new NodeInput(edge, inputPlayableNode, i));
73+
74+
AddFlag(NodeFlag.HierarchyDirty);
7375
}
7476

7577
// check and update children
@@ -81,9 +83,12 @@ public override void Update()
8183
if (!input.Node.CheckFlag(NodeFlag.Active))
8284
{
8385
Container.RemoveElement(input.Edge);
84-
input.Node.RemoveFromContainer();
86+
input.Node.RemoveFromView();
8587

8688
InternalInputs.RemoveAt(i);
89+
90+
AddFlag(NodeFlag.HierarchyDirty);
91+
8792
continue;
8893
}
8994

Editor/Scripts/Node/PlayableOutputNode.cs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,14 +47,16 @@ public override void Update()
4747
{
4848
// create new node
4949
var sourcePlayableNode = PlayableNodeFactory.CreateNode(sourcePlayable);
50-
sourcePlayableNode.AddToContainer(Container);
50+
sourcePlayableNode.AddToView(Container, this);
5151
sourcePlayableNode.AddFlag(NodeFlag.Active);
5252

5353
var sourcePlayableOutputPort = sourcePlayableNode.OutputPorts[0];
5454
var selfSourcePort = InternalInputPorts[0];
5555
var edge = selfSourcePort.ConnectTo(sourcePlayableOutputPort);
5656
Container.AddElement(edge);
5757
InternalInputs.Add(new NodeInput(edge, sourcePlayableNode, 0));
58+
59+
AddFlag(NodeFlag.HierarchyDirty);
5860
}
5961
}
6062

@@ -65,9 +67,12 @@ public override void Update()
6567
if (!input.Node.CheckFlag(NodeFlag.Active))
6668
{
6769
Container.RemoveElement(input.Edge);
68-
input.Node.RemoveFromContainer();
70+
input.Node.RemoveFromView();
6971

7072
InternalInputs.RemoveAt(i);
73+
74+
AddFlag(NodeFlag.HierarchyDirty);
75+
7176
continue;
7277
}
7378

0 commit comments

Comments
 (0)