using System; using System.Collections.Generic; using UnityEngine; [Serializable] public class FoldEdge { public string outputNodeGuid; public string outputPortName; public string inputNodeGuid; public string inputPortName; } [Serializable] public abstract class FoldNodeData { public string guid = Guid.NewGuid().ToString(); public Vector2 position; public virtual string Title => GetType().Name; } [Serializable] public abstract class FoldOperationData : FoldNodeData { public abstract FoldNodeSerialized Serialize(FoldGraphView graphView); } [Serializable] public class FloatValueNodeData : FoldNodeData { public float value; public override string Title => "Float"; } [Serializable] public class VectorValueNodeData : FoldNodeData { public Vector4 value; public override string Title => "Vector"; } [Serializable] public class GameObjectNodeData : FoldNodeData { public GameObject output; public override string Title => "GameObject"; } [Serializable] public class AxisAlignNodeData : FoldOperationData { public Vector4 po; public Vector4 pp; public Vector4 r; public float t; public override string Title => "Axis Align"; public override FoldNodeSerialized Serialize(FoldGraphView graphView) { return new FoldNodeSerialized { opcode = 4, float0 = graphView.GetInputValue(guid, "t", t), vec0 = graphView.GetInputValue(guid, "po", po), vec1 = graphView.GetInputValue(guid, "pp", pp), vec2 = graphView.GetInputValue(guid, "r", r), }; } } [Serializable] public class PlaneToTubeNodeData : FoldOperationData { public Vector4 p; public Vector4 r; public Vector4 s; public float t; public override string Title => "Plane to Tube"; public override FoldNodeSerialized Serialize(FoldGraphView graphView) { return new FoldNodeSerialized { opcode = 2, float0 = graphView.GetInputValue(guid, "t", t), vec0 = graphView.GetInputValue(guid, "p", p), vec1 = graphView.GetInputValue(guid, "r", r), vec2 = graphView.GetInputValue(guid, "s", s), }; } } [Serializable] public class PointAlignNodeData : FoldOperationData { public Vector4 po; public Vector4 pp; public Vector4 r; public float t; public override string Title => "Point Align"; public override FoldNodeSerialized Serialize(FoldGraphView graphView) { return new FoldNodeSerialized { opcode = 3, float0 = graphView.GetInputValue(guid, "t", t), vec0 = graphView.GetInputValue(guid, "po", po), vec1 = graphView.GetInputValue(guid, "pp", pp), vec2 = graphView.GetInputValue(guid, "r", r), }; } } [Serializable] public class TubeToPlaneNodeData : FoldOperationData { public Vector4 p; public Vector4 r; public Vector4 s; public float t; public override string Title => "Tube to Plane"; public override FoldNodeSerialized Serialize(FoldGraphView graphView) { return new FoldNodeSerialized { opcode = 1, float0 = graphView.GetInputValue(guid, "t", t), vec0 = graphView.GetInputValue(guid, "p", p), vec1 = graphView.GetInputValue(guid, "r", r), vec2 = graphView.GetInputValue(guid, "s", s), }; } } [Serializable] public class KeyframeNodeData : FoldNodeData { public override string Title => "Keyframe"; } public class FoldGraph : ScriptableObject { [SerializeReference] public List nodes = new(); public List edges = new(); }