summaryrefslogtreecommitdiffstats
path: root/Scripts/Fold/Editor/FoldGraph.cs
blob: 5782dc752dccfba6c25f607e980eb35a86c3db99 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
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<FoldNodeData> nodes = new();
    public List<FoldEdge> edges = new();
}