summaryrefslogtreecommitdiffstats
path: root/Scripts/Fold
diff options
context:
space:
mode:
authoryum <yum.food.vr@gmail.com>2026-01-02 17:32:05 -0800
committeryum <yum.food.vr@gmail.com>2026-01-02 17:32:14 -0800
commit9b45bce6d4ca528cf5bbc78aeaa0b6b06e0f1a29 (patch)
tree6fa297bf6c768d3c4552762d572a55e23f2978e8 /Scripts/Fold
parentfcc76b257ef5cfb4514669df3b0144f8e8dd76ef (diff)
Fold: add more nodes
Diffstat (limited to 'Scripts/Fold')
-rw-r--r--Scripts/Fold/Editor/AxisAlignNode.cs26
-rw-r--r--Scripts/Fold/Editor/BaseFoldNode.cs3
-rw-r--r--Scripts/Fold/Editor/KeyframeNodeView.cs14
-rw-r--r--Scripts/Fold/Editor/PlaneToTubeNode.cs26
-rw-r--r--Scripts/Fold/Editor/PointAlignNode.cs15
-rw-r--r--Scripts/Fold/Editor/TubeToPlaneNode.cs26
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 };
+ }
+}
+