summaryrefslogtreecommitdiffstats
path: root/Scripts/Fold/Editor
diff options
context:
space:
mode:
Diffstat (limited to 'Scripts/Fold/Editor')
-rw-r--r--Scripts/Fold/Editor/FoldGraphView.cs123
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)