summaryrefslogtreecommitdiffstats
path: root/Scripts/Fold/Editor/FoldGraph.cs
diff options
context:
space:
mode:
authoryum <yum.food.vr@gmail.com>2026-01-08 18:39:56 -0800
committeryum <yum.food.vr@gmail.com>2026-01-08 18:39:56 -0800
commit2f52d06c01682fe421af9ffd227aad0080c1f138 (patch)
tree7ea311510349d38460f7c315dd210f71fa3c0d91 /Scripts/Fold/Editor/FoldGraph.cs
parent317f8527bc1c0aedb234ecae331aeec18aeaf9bd (diff)
Fold: fuck
Diffstat (limited to 'Scripts/Fold/Editor/FoldGraph.cs')
-rw-r--r--Scripts/Fold/Editor/FoldGraph.cs107
1 files changed, 93 insertions, 14 deletions
diff --git a/Scripts/Fold/Editor/FoldGraph.cs b/Scripts/Fold/Editor/FoldGraph.cs
index 5782dc7..c0719d9 100644
--- a/Scripts/Fold/Editor/FoldGraph.cs
+++ b/Scripts/Fold/Editor/FoldGraph.cs
@@ -9,6 +9,59 @@ public class FoldEdge
}
[Serializable]
+public readonly struct FoldOperationDefinition
+{
+ public readonly string title;
+ public readonly int opcode;
+ public readonly (string name, Type type)[] inputs;
+
+ public FoldOperationDefinition(string title, int opcode, params (string name, Type type)[] inputs)
+ {
+ this.title = title;
+ this.opcode = opcode;
+ this.inputs = inputs;
+ }
+
+ public FoldNodeSerialized Serialize(FoldGraphView graphView, string guid)
+ {
+ var serialized = new FoldNodeSerialized { opcode = opcode };
+ int floatIndex = 0, vectorIndex = 0;
+
+ foreach (var (name, type) in inputs)
+ {
+ if (type == typeof(float))
+ SetFloat(ref serialized, floatIndex++, graphView.GetInputValue(guid, name, 0f));
+ else if (type == typeof(Vector4))
+ SetVector(ref serialized, vectorIndex++, graphView.GetInputValue(guid, name, Vector4.zero));
+ }
+
+ return serialized;
+ }
+
+ static void SetFloat(ref FoldNodeSerialized node, int index, float value)
+ {
+ switch (index)
+ {
+ case 0: node.float0 = value; break;
+ case 1: node.float1 = value; break;
+ case 2: node.float2 = value; break;
+ case 3: node.float3 = value; break;
+ }
+ }
+
+ static void SetVector(ref FoldNodeSerialized node, int index, Vector4 value)
+ {
+ switch (index)
+ {
+ case 0: node.vec0 = value; break;
+ case 1: node.vec1 = value; break;
+ case 2: node.vec2 = value; break;
+ case 3: node.vec3 = value; break;
+ }
+ }
+}
+
+[Serializable]
public abstract class FoldNodeData
{
public string guid = Guid.NewGuid().ToString();
@@ -19,8 +72,10 @@ public abstract class FoldNodeData
[Serializable]
public abstract class FoldOperationData : FoldNodeData
{
- public abstract IEnumerable<(string name, Type type)> GetInputPorts();
- public abstract FoldNodeSerialized Serialize(FoldGraphView graphView);
+ protected abstract FoldOperationDefinition Definition { get; }
+ public override string Title => Definition.title;
+ public virtual IEnumerable<(string name, Type type)> GetInputPorts() => Definition.inputs;
+ public virtual FoldNodeSerialized Serialize(FoldGraphView graphView) => Definition.Serialize(graphView, guid);
}
[Serializable] public class FloatValueNodeData : FoldNodeData { public float value; public override string Title => "Float"; }
@@ -31,33 +86,57 @@ public abstract class FoldOperationData : FoldNodeData
[Serializable]
public class AxisAlignNodeData : FoldOperationData
{
- public override string Title => "Axis Align";
- public override IEnumerable<(string, Type)> GetInputPorts() { yield return ("po", typeof(Vector4)); yield return ("pp", typeof(Vector4)); yield return ("r", typeof(Vector4)); yield return ("t", typeof(float)); }
- public override FoldNodeSerialized Serialize(FoldGraphView gv) => new() { opcode = 4, float0 = gv.GetInputValue(guid, "t", 0f), vec0 = gv.GetInputValue(guid, "po", Vector4.zero), vec1 = gv.GetInputValue(guid, "pp", Vector4.zero), vec2 = gv.GetInputValue(guid, "r", Vector4.zero) };
+ static readonly FoldOperationDefinition DefinitionInfo = new(
+ "Axis Align",
+ 4,
+ ("po", typeof(Vector4)),
+ ("pp", typeof(Vector4)),
+ ("r", typeof(Vector4)),
+ ("t", typeof(float)));
+
+ protected override FoldOperationDefinition Definition => DefinitionInfo;
}
[Serializable]
public class PlaneToTubeNodeData : FoldOperationData
{
- public override string Title => "Plane to Tube";
- public override IEnumerable<(string, Type)> GetInputPorts() { yield return ("p", typeof(Vector4)); yield return ("r", typeof(Vector4)); yield return ("s", typeof(Vector4)); yield return ("t", typeof(float)); }
- public override FoldNodeSerialized Serialize(FoldGraphView gv) => new() { opcode = 2, float0 = gv.GetInputValue(guid, "t", 0f), vec0 = gv.GetInputValue(guid, "p", Vector4.zero), vec1 = gv.GetInputValue(guid, "r", Vector4.zero), vec2 = gv.GetInputValue(guid, "s", Vector4.zero) };
+ static readonly FoldOperationDefinition DefinitionInfo = new(
+ "Plane to Tube",
+ 2,
+ ("p", typeof(Vector4)),
+ ("r", typeof(Vector4)),
+ ("s", typeof(Vector4)),
+ ("t", typeof(float)));
+
+ protected override FoldOperationDefinition Definition => DefinitionInfo;
}
[Serializable]
public class PointAlignNodeData : FoldOperationData
{
- public override string Title => "Point Align";
- public override IEnumerable<(string, Type)> GetInputPorts() { yield return ("po", typeof(Vector4)); yield return ("pp", typeof(Vector4)); yield return ("r", typeof(Vector4)); yield return ("t", typeof(float)); }
- public override FoldNodeSerialized Serialize(FoldGraphView gv) => new() { opcode = 3, float0 = gv.GetInputValue(guid, "t", 0f), vec0 = gv.GetInputValue(guid, "po", Vector4.zero), vec1 = gv.GetInputValue(guid, "pp", Vector4.zero), vec2 = gv.GetInputValue(guid, "r", Vector4.zero) };
+ static readonly FoldOperationDefinition DefinitionInfo = new(
+ "Point Align",
+ 3,
+ ("po", typeof(Vector4)),
+ ("pp", typeof(Vector4)),
+ ("r", typeof(Vector4)),
+ ("t", typeof(float)));
+
+ protected override FoldOperationDefinition Definition => DefinitionInfo;
}
[Serializable]
public class TubeToPlaneNodeData : FoldOperationData
{
- public override string Title => "Tube to Plane";
- public override IEnumerable<(string, Type)> GetInputPorts() { yield return ("p", typeof(Vector4)); yield return ("r", typeof(Vector4)); yield return ("s", typeof(Vector4)); yield return ("t", typeof(float)); }
- public override FoldNodeSerialized Serialize(FoldGraphView gv) => new() { opcode = 1, float0 = gv.GetInputValue(guid, "t", 0f), vec0 = gv.GetInputValue(guid, "p", Vector4.zero), vec1 = gv.GetInputValue(guid, "r", Vector4.zero), vec2 = gv.GetInputValue(guid, "s", Vector4.zero) };
+ static readonly FoldOperationDefinition DefinitionInfo = new(
+ "Tube to Plane",
+ 1,
+ ("p", typeof(Vector4)),
+ ("r", typeof(Vector4)),
+ ("s", typeof(Vector4)),
+ ("t", typeof(float)));
+
+ protected override FoldOperationDefinition Definition => DefinitionInfo;
}
public class FoldGraph : ScriptableObject