This commit is contained in:
2021-06-13 10:28:03 +02:00
parent eb70603c85
commit df2d24cbd3
7487 changed files with 943244 additions and 0 deletions

View File

@@ -0,0 +1,117 @@
using System;
using UnityEditor.ShaderGraph;
using UnityEditor.ShaderGraph.Serialization;
using UnityEngine;
namespace UnityEditor.Graphing
{
class GraphObject : ScriptableObject, ISerializationCallbackReceiver
{
[SerializeField]
SerializationHelper.JSONSerializedElement m_SerializedGraph;
[SerializeField]
int m_SerializedVersion;
[SerializeField]
bool m_IsDirty;
[SerializeField]
bool m_IsSubGraph;
[SerializeField]
string m_AssetGuid;
[NonSerialized]
GraphData m_Graph;
[NonSerialized]
int m_DeserializedVersion;
public GraphData graph
{
get { return m_Graph; }
set
{
if (m_Graph != null)
m_Graph.owner = null;
m_Graph = value;
if (m_Graph != null)
m_Graph.owner = this;
}
}
// this value stores whether an undo operation has been registered (which indicates a change has been made to the graph)
// and is used to trigger the MaterialGraphEditWindow to update it's title
public bool isDirty
{
get { return m_IsDirty; }
set { m_IsDirty = value; }
}
public virtual void RegisterCompleteObjectUndo(string actionName)
{
Undo.RegisterCompleteObjectUndo(this, actionName);
m_SerializedVersion++;
m_DeserializedVersion++;
m_IsDirty = true;
}
public void OnBeforeSerialize()
{
if (graph != null)
{
var json = MultiJson.Serialize(graph);
m_SerializedGraph = new SerializationHelper.JSONSerializedElement { JSONnodeData = json };
m_IsSubGraph = graph.isSubGraph;
m_AssetGuid = graph.assetGuid;
}
}
public void OnAfterDeserialize()
{
}
public bool wasUndoRedoPerformed => m_DeserializedVersion != m_SerializedVersion;
public void HandleUndoRedo()
{
Debug.Assert(wasUndoRedoPerformed);
var deserializedGraph = DeserializeGraph();
m_Graph.ReplaceWith(deserializedGraph);
}
GraphData DeserializeGraph()
{
var json = m_SerializedGraph.JSONnodeData;
var deserializedGraph = new GraphData {isSubGraph = m_IsSubGraph, assetGuid = m_AssetGuid};
MultiJson.Deserialize(deserializedGraph, json);
m_DeserializedVersion = m_SerializedVersion;
m_SerializedGraph = default;
return deserializedGraph;
}
public void Validate()
{
if (graph != null)
{
graph.OnEnable();
graph.ValidateGraph();
}
}
void OnEnable()
{
if (graph == null && m_SerializedGraph.JSONnodeData != null)
{
graph = DeserializeGraph();
}
Validate();
}
void OnDestroy()
{
graph?.OnDisable();
}
}
}