You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

56 lines
2.0 KiB

using System;
using UnityEngine;
namespace UnityEditor.ShaderGraph
{
[GenerationAPI]
[Serializable]
internal class IncludeDescriptor : IConditional
{
public IncludeDescriptor(string guid, string path, IncludeLocation location, FieldCondition[] fieldConditions, bool shouldIncludeWithPragmas = false)
{
_guid = guid;
_path = path;
_location = location;
this.fieldConditions = fieldConditions;
_shouldIncludeWithPragmas = shouldIncludeWithPragmas;
}
[SerializeField]
string _guid;
public string guid => _guid;
// NOTE: this path is NOT guaranteed to be correct -- it's only the path that was given to us when this descriptor was constructed.
// if the file was moved, it may not be correct. use the GUID to get the current REAL path via AssetDatabase.GUIDToAssetPath
[SerializeField]
string _path;
public string path => _path;
[SerializeField]
IncludeLocation _location;
public IncludeLocation location => _location;
[SerializeField]
bool _shouldIncludeWithPragmas;
public bool shouldIncludeWithPragmas => _shouldIncludeWithPragmas;
// NOTE: this is not serialized at the moment.. as it's not needed.
// (serialization only used for subgraph includes, coming from nodes, which can't have conditions)
public FieldCondition[] fieldConditions { get; }
public string value
{
get
{
// we must get the path from asset database to ensure it is correct after file moves
var realPath = AssetDatabase.GUIDToAssetPath(guid);
if (string.IsNullOrEmpty(realPath))
return $"// missing include file: {path} ({guid})";
else if (_shouldIncludeWithPragmas)
return $"#include_with_pragmas \"{realPath}\"";
else
return $"#include \"{realPath}\"";
}
}
}
}