Editor/ShaderGraphPlus/ShaderGraphPlus.V5Upgrade.cs
using System.Text.Json.Nodes;
namespace ShaderGraphPlus;
public partial class ShaderGraphPlus
{
[SGPJsonUpgrader( typeof( ShaderGraphPlus ), 5 )]
internal static void Upgrader_v5( JsonObject obj )
{
if ( obj[JsonKeys.NodeArray] is not JsonArray oldNodeArray )
return;
//var identifiers = new Dictionary<string, string>();
//foreach ( var node in oldNodeArray )
//{
// if ( node[nameof( BaseNodePlus.Identifier )] is not JsonValue identifierValue )
// continue;
//
// identifiers.Add( identifierValue.GetValue<string>(), $"{identifiers.Count}" );
//}
var newNodeArray = new JsonArray();
foreach ( var jsonNode in oldNodeArray )
{
if ( jsonNode[JsonKeys.Class] is not JsonValue classValue )
continue;
var typeName = classValue.GetValue<string>();
var typeDesc = EditorTypeLibrary.GetType<BaseNodePlus>( typeName );
var type = new ClassNodeType( typeDesc );
if ( ShouldUpgradeParameterNode_v5( typeName ) )
{
var updatedNodeObject = jsonNode.DeepClone().AsObject();
if ( updatedNodeObject.ContainsKey( "BlackboardParameterIdentifier" ) )
{
var parameterIdentifier = updatedNodeObject["BlackboardParameterIdentifier"].Deserialize<Guid>( SerializerOptions() );
updatedNodeObject.Remove( "BlackboardParameterIdentifier" );
updatedNodeObject["ParameterIdentifier"] = parameterIdentifier;
newNodeArray.Add( updatedNodeObject );
}
else
{
throw new Exception( $"Cannot find Json Key with the name : 'BlackboardParameterIdentifier'" );
}
}
else if ( typeName == "SwitchNode" )
{
var updatedNodeObject = jsonNode.DeepClone().AsObject();
updatedNodeObject["_class"] = "BranchNode";
newNodeArray.Add( updatedNodeObject );
}
else
{
newNodeArray.Add( jsonNode.DeepClone() );
}
}
obj.Remove( JsonKeys.NodeArray );
obj.Add( JsonKeys.NodeArray, newNodeArray );
}
private static bool ShouldUpgradeParameterNode_v5( string typeName )
{
if ( typeName == "BoolParameterNode" ||
typeName == "IntParameterNode" ||
typeName == "FloatParameterNode" ||
typeName == "Float2ParameterNode" ||
typeName == "Float3ParameterNode" ||
typeName == "Float4ParameterNode" ||
typeName == "ColorParameterNode" ||
typeName == "Texture2DParameterNode" ||
typeName == "TextureCubeParameterNode" ||
typeName == "TextureCubeParameterNode" ||
typeName == "SubgraphInput" )
{
return true;
}
return false;
}
}