diff options
Diffstat (limited to 'Scripts/Fold')
| -rw-r--r-- | Scripts/Fold/Editor/AxisAlignNode.cs | 26 | ||||
| -rw-r--r-- | Scripts/Fold/Editor/BaseFoldNode.cs | 3 | ||||
| -rw-r--r-- | Scripts/Fold/Editor/KeyframeNodeView.cs | 14 | ||||
| -rw-r--r-- | Scripts/Fold/Editor/PlaneToTubeNode.cs | 26 | ||||
| -rw-r--r-- | Scripts/Fold/Editor/PointAlignNode.cs | 15 | ||||
| -rw-r--r-- | Scripts/Fold/Editor/TubeToPlaneNode.cs | 26 |
6 files changed, 103 insertions, 7 deletions
diff --git a/Scripts/Fold/Editor/AxisAlignNode.cs b/Scripts/Fold/Editor/AxisAlignNode.cs new file mode 100644 index 0000000..dc58aec --- /dev/null +++ b/Scripts/Fold/Editor/AxisAlignNode.cs @@ -0,0 +1,26 @@ +using GraphProcessor; +using UnityEngine; + +[System.Serializable, NodeMenuItem("Fold/AxisAlign")] +public class AxisAlignNode : BaseFoldNode +{ + [Input(name = "po"), SerializeField, Tooltip("Origin point.")] + public Vector4 po; + + [Input(name = "pp"), SerializeField, Tooltip("Pivot point.")] + public Vector4 pp; + + [Input(name = "r"), SerializeField, Tooltip("Radial axis. Points along this line are not moved at all.")] + public Vector4 r; + + [Input(name = "t"), SerializeField, Tooltip("Effect strength.")] + public float t; + + public override string name => "Axis Align"; + + public override FoldNodeSerialized Serialize() + { + return new FoldNodeSerialized { opcode = 4, float0 = t, vec0 = po, vec1 = pp, vec2 = r }; + } +} + diff --git a/Scripts/Fold/Editor/BaseFoldNode.cs b/Scripts/Fold/Editor/BaseFoldNode.cs index 203a89a..e8b394e 100644 --- a/Scripts/Fold/Editor/BaseFoldNode.cs +++ b/Scripts/Fold/Editor/BaseFoldNode.cs @@ -5,6 +5,9 @@ public abstract class BaseFoldNode : BaseNode [Input(name = "Input")] public BaseFoldNode input; + [Output(name = "Out")] + public BaseFoldNode output; + // Generate a generic representation of the node. This is used for animation. public abstract FoldNodeSerialized Serialize(); } diff --git a/Scripts/Fold/Editor/KeyframeNodeView.cs b/Scripts/Fold/Editor/KeyframeNodeView.cs index 225b5b6..65d839b 100644 --- a/Scripts/Fold/Editor/KeyframeNodeView.cs +++ b/Scripts/Fold/Editor/KeyframeNodeView.cs @@ -25,6 +25,10 @@ public class KeyframeNodeView : BaseNodeView void OnGenerateClick() { + // Process the graph to propagate values through connections + var processor = new ProcessGraphProcessor(nodeTarget.graph); + processor.Run(); + var go = GetConnectedGameObject(); if (go == null) return; var rend = go.GetComponent<MeshRenderer>(); @@ -45,12 +49,16 @@ public class KeyframeNodeView : BaseNodeView rend.GetPropertyBlock(mpb); // Set material properties for all 16 slots. - for (int i = 0; i < 16; i++) { + const int kNumSlots = 16; + for (int i = 0; i < kNumSlots; i++) { string slotPrefix = $"_Vertex_Deformation_Slot_{i}_"; BaseFoldNode node = (foldNodes.Count > 0) ? foldNodes.Pop() : null; FoldNodeSerialized data = node?.Serialize(); bool active = data != null; + if (active) { + Debug.Log($"Setting opcode {data.opcode}"); + } mpb.SetFloat(slotPrefix + "Enabled", active ? 1.0f : 0.0f); mpb.SetInt(slotPrefix + "Opcode", active ? data.opcode : 0); @@ -60,13 +68,15 @@ public class KeyframeNodeView : BaseNodeView mpb.SetFloat(slotPrefix + "Float_3", active ? data.float3 : 0.0f); mpb.SetVector(slotPrefix + "Vector_0", active ? data.vec0 : Vector4.zero); + if (active) { + Debug.Log($"Setting vec0 {data.vec0}"); + } mpb.SetVector(slotPrefix + "Vector_1", active ? data.vec1 : Vector4.zero); mpb.SetVector(slotPrefix + "Vector_2", active ? data.vec2 : Vector4.zero); mpb.SetVector(slotPrefix + "Vector_3", active ? data.vec3 : Vector4.zero); } rend.SetPropertyBlock(mpb); - Debug.Log($"Generated Keyframe for '{go.name}' with properties applied to all 16 slots."); } BaseFoldNode GetInputFoldNode(BaseFoldNode node) diff --git a/Scripts/Fold/Editor/PlaneToTubeNode.cs b/Scripts/Fold/Editor/PlaneToTubeNode.cs new file mode 100644 index 0000000..b9158bf --- /dev/null +++ b/Scripts/Fold/Editor/PlaneToTubeNode.cs @@ -0,0 +1,26 @@ +using GraphProcessor; +using UnityEngine; + +[System.Serializable, NodeMenuItem("Fold/PlaneToTube")] +public class PlaneToTubeNode : BaseFoldNode +{ + [Input(name = "p"), SerializeField, Tooltip("Origin point.")] + public Vector4 p; + + [Input(name = "r"), SerializeField, Tooltip("Radial axis. Points along this line are not moved at all.")] + public Vector4 r; + + [Input(name = "s"), SerializeField, Tooltip("Tangent axis. This line determines the axis around which the tube is unwrapped.")] + public Vector4 s; + + [Input(name = "t"), SerializeField, Tooltip("Effect strength.")] + public float t; + + public override string name => "Plane to Tube"; + + public override FoldNodeSerialized Serialize() + { + return new FoldNodeSerialized { opcode = 2, float0 = t, vec0 = p, vec1 = r, vec2 = s }; + } +} + diff --git a/Scripts/Fold/Editor/PointAlignNode.cs b/Scripts/Fold/Editor/PointAlignNode.cs index c113928..ddab647 100644 --- a/Scripts/Fold/Editor/PointAlignNode.cs +++ b/Scripts/Fold/Editor/PointAlignNode.cs @@ -4,18 +4,23 @@ using UnityEngine; [System.Serializable, NodeMenuItem("Fold/PointAlign")] public class PointAlignNode : BaseFoldNode { - // Origin point. - [Input(name = "po")] + [Input(name = "po"), SerializeField, Tooltip("Origin point.")] public Vector4 po; - [Output(name = "Out")] - public PointAlignNode output; + [Input(name = "pp"), SerializeField, Tooltip("Pivot point.")] + public Vector4 pp; + + [Input(name = "r"), SerializeField, Tooltip("Radial axis. Points along this line are not moved at all.")] + public Vector4 r; + + [Input(name = "t"), SerializeField, Tooltip("Effect strength.")] + public float t; public override string name => "Point Align"; public override FoldNodeSerialized Serialize() { - return new FoldNodeSerialized { opcode = 0, vec0 = po }; + return new FoldNodeSerialized { opcode = 3, float0 = t, vec0 = po, vec1 = pp, vec2 = r }; } } diff --git a/Scripts/Fold/Editor/TubeToPlaneNode.cs b/Scripts/Fold/Editor/TubeToPlaneNode.cs new file mode 100644 index 0000000..72f1b9d --- /dev/null +++ b/Scripts/Fold/Editor/TubeToPlaneNode.cs @@ -0,0 +1,26 @@ +using GraphProcessor; +using UnityEngine; + +[System.Serializable, NodeMenuItem("Fold/TubeToPlane")] +public class TubeToPlaneNode : BaseFoldNode +{ + [Input(name = "p"), SerializeField, Tooltip("Origin point.")] + public Vector4 p; + + [Input(name = "r"), SerializeField, Tooltip("Radial axis. Points along this line are not moved at all.")] + public Vector4 r; + + [Input(name = "s"), SerializeField, Tooltip("Tangent axis. This line determines the axis around which the tube is unwrapped.")] + public Vector4 s; + + [Input(name = "t"), SerializeField, Tooltip("Effect strength.")] + public float t; + + public override string name => "Tube to Plane"; + + public override FoldNodeSerialized Serialize() + { + return new FoldNodeSerialized { opcode = 1, float0 = t, vec0 = p, vec1 = r, vec2 = s }; + } +} + |
