diff options
Diffstat (limited to 'Scripts/Fold/Editor/FoldGraphView.cs')
| -rw-r--r-- | Scripts/Fold/Editor/FoldGraphView.cs | 123 |
1 files changed, 15 insertions, 108 deletions
diff --git a/Scripts/Fold/Editor/FoldGraphView.cs b/Scripts/Fold/Editor/FoldGraphView.cs index 3b0b295..947e6fa 100644 --- a/Scripts/Fold/Editor/FoldGraphView.cs +++ b/Scripts/Fold/Editor/FoldGraphView.cs @@ -163,39 +163,12 @@ public class AxisAlignNodeView : FoldOperationNodeView ppPort = AddPort(Direction.Input, Port.Capacity.Single, "pp", typeof(Vector4)); rPort = AddPort(Direction.Input, Port.Capacity.Single, "r", typeof(Vector4)); tPort = AddPort(Direction.Input, Port.Capacity.Single, "t", typeof(float)); - - mainContainer.Add(CreateVectorField("Origin", () => DataTyped.po, v => DataTyped.po = v)); - mainContainer.Add(CreateVectorField("Pivot", () => DataTyped.pp, v => DataTyped.pp = v)); - mainContainer.Add(CreateVectorField("Radial Axis", () => DataTyped.r, v => DataTyped.r = v)); - mainContainer.Add(CreateFloatField("Strength", () => DataTyped.t, v => DataTyped.t = v)); } public override FoldNodeSerialized Serialize() { return DataTyped.Serialize(graphView); } - - Vector4Field CreateVectorField(string label, Func<Vector4> getter, Action<Vector4> setter) - { - var field = new Vector4Field(label) { value = getter() }; - field.RegisterValueChangedCallback(evt => - { - setter(evt.newValue); - graphView.MarkDirty(); - }); - return field; - } - - FloatField CreateFloatField(string label, Func<float> getter, Action<float> setter) - { - var field = new FloatField(label) { value = getter() }; - field.RegisterValueChangedCallback(evt => - { - setter(evt.newValue); - graphView.MarkDirty(); - }); - return field; - } } public class PlaneToTubeNodeView : FoldOperationNodeView @@ -210,36 +183,9 @@ public class PlaneToTubeNodeView : FoldOperationNodeView AddPort(Direction.Input, Port.Capacity.Single, "r", typeof(Vector4)); AddPort(Direction.Input, Port.Capacity.Single, "s", typeof(Vector4)); AddPort(Direction.Input, Port.Capacity.Single, "t", typeof(float)); - - mainContainer.Add(CreateVectorField("Origin", () => DataTyped.p, v => DataTyped.p = v)); - mainContainer.Add(CreateVectorField("Radial Axis", () => DataTyped.r, v => DataTyped.r = v)); - mainContainer.Add(CreateVectorField("Tangent Axis", () => DataTyped.s, v => DataTyped.s = v)); - mainContainer.Add(CreateFloatField("Strength", () => DataTyped.t, v => DataTyped.t = v)); } public override FoldNodeSerialized Serialize() => DataTyped.Serialize(graphView); - - Vector4Field CreateVectorField(string label, Func<Vector4> getter, Action<Vector4> setter) - { - var field = new Vector4Field(label) { value = getter() }; - field.RegisterValueChangedCallback(evt => - { - setter(evt.newValue); - graphView.MarkDirty(); - }); - return field; - } - - FloatField CreateFloatField(string label, Func<float> getter, Action<float> setter) - { - var field = new FloatField(label) { value = getter() }; - field.RegisterValueChangedCallback(evt => - { - setter(evt.newValue); - graphView.MarkDirty(); - }); - return field; - } } public class PointAlignNodeView : FoldOperationNodeView @@ -254,36 +200,9 @@ public class PointAlignNodeView : FoldOperationNodeView AddPort(Direction.Input, Port.Capacity.Single, "pp", typeof(Vector4)); AddPort(Direction.Input, Port.Capacity.Single, "r", typeof(Vector4)); AddPort(Direction.Input, Port.Capacity.Single, "t", typeof(float)); - - mainContainer.Add(CreateVectorField("Origin", () => DataTyped.po, v => DataTyped.po = v)); - mainContainer.Add(CreateVectorField("Pivot", () => DataTyped.pp, v => DataTyped.pp = v)); - mainContainer.Add(CreateVectorField("Radial Axis", () => DataTyped.r, v => DataTyped.r = v)); - mainContainer.Add(CreateFloatField("Strength", () => DataTyped.t, v => DataTyped.t = v)); } public override FoldNodeSerialized Serialize() => DataTyped.Serialize(graphView); - - Vector4Field CreateVectorField(string label, Func<Vector4> getter, Action<Vector4> setter) - { - var field = new Vector4Field(label) { value = getter() }; - field.RegisterValueChangedCallback(evt => - { - setter(evt.newValue); - graphView.MarkDirty(); - }); - return field; - } - - FloatField CreateFloatField(string label, Func<float> getter, Action<float> setter) - { - var field = new FloatField(label) { value = getter() }; - field.RegisterValueChangedCallback(evt => - { - setter(evt.newValue); - graphView.MarkDirty(); - }); - return field; - } } public class TubeToPlaneNodeView : FoldOperationNodeView @@ -298,36 +217,9 @@ public class TubeToPlaneNodeView : FoldOperationNodeView AddPort(Direction.Input, Port.Capacity.Single, "r", typeof(Vector4)); AddPort(Direction.Input, Port.Capacity.Single, "s", typeof(Vector4)); AddPort(Direction.Input, Port.Capacity.Single, "t", typeof(float)); - - mainContainer.Add(CreateVectorField("Origin", () => DataTyped.p, v => DataTyped.p = v)); - mainContainer.Add(CreateVectorField("Radial Axis", () => DataTyped.r, v => DataTyped.r = v)); - mainContainer.Add(CreateVectorField("Tangent Axis", () => DataTyped.s, v => DataTyped.s = v)); - mainContainer.Add(CreateFloatField("Strength", () => DataTyped.t, v => DataTyped.t = v)); } public override FoldNodeSerialized Serialize() => DataTyped.Serialize(graphView); - - Vector4Field CreateVectorField(string label, Func<Vector4> getter, Action<Vector4> setter) - { - var field = new Vector4Field(label) { value = getter() }; - field.RegisterValueChangedCallback(evt => - { - setter(evt.newValue); - graphView.MarkDirty(); - }); - return field; - } - - FloatField CreateFloatField(string label, Func<float> getter, Action<float> setter) - { - var field = new FloatField(label) { value = getter() }; - field.RegisterValueChangedCallback(evt => - { - setter(evt.newValue); - graphView.MarkDirty(); - }); - return field; - } } public class KeyframeNodeView : FoldNodeView @@ -461,6 +353,21 @@ public class FoldGraphView : GraphView GridBackground gridBackground; + public override List<Port> GetCompatiblePorts(Port startPort, NodeAdapter nodeAdapter) + { + return ports.ToList().Where(p => + p.node != startPort.node && + p.direction != startPort.direction && + IsTypeCompatible(startPort.portType, p.portType)).ToList(); + } + + bool IsTypeCompatible(Type a, Type b) + { + if (a == null || b == null) + return true; + return a.IsAssignableFrom(b) || b.IsAssignableFrom(a); + } + GraphViewChange OnGraphViewChanged(GraphViewChange change) { if (suppressGraphChanges) |
