using System; using System.Collections.Generic; using UnityEngine; [Serializable] public class FoldEdge { public string outputNodeGuid, outputPortName, inputNodeGuid, 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 IEnumerable<(string name, Type type)> GetInputPorts(); 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 KeyframeNodeData : FoldNodeData { public override string Title => "Keyframe"; } [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) }; } [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) }; } [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) }; } [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) }; } public class FoldGraph : ScriptableObject { [SerializeReference] public List nodes = new(); public List edges = new(); }