// Amplify Shader Editor - Visual Shader Editing Tool
|
|
// Copyright (c) Amplify Creations, Lda <info@amplify.pt>
|
|
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
namespace AmplifyShaderEditor
|
|
{
|
|
public enum TemplateDataType
|
|
{
|
|
LegacySinglePass,
|
|
MultiPass
|
|
}
|
|
|
|
[Serializable]
|
|
public class TemplateIncludePragmaContainter
|
|
{
|
|
[SerializeField]
|
|
private int m_nativeTopIndex = -1;
|
|
|
|
[SerializeField]
|
|
private List<string> m_nativeDirectivesList = new List<string>();
|
|
|
|
[SerializeField]
|
|
private List<string> m_includesList = new List<string>();
|
|
private Dictionary<string,string> m_includesDict = new Dictionary<string,string>();
|
|
|
|
[SerializeField]
|
|
private List<string> m_pragmasList = new List<string>();
|
|
private Dictionary<string, string> m_pragmasDict = new Dictionary<string, string>();
|
|
|
|
[SerializeField]
|
|
private List<string> m_definesList = new List<string>();
|
|
private Dictionary<string, string> m_definesDict = new Dictionary<string, string>();
|
|
|
|
public void RefreshIncludesList()
|
|
{
|
|
if ( m_includesDict.Count != m_includesList.Count )
|
|
{
|
|
m_includesDict.Clear();
|
|
int count = m_includesList.Count;
|
|
for ( int i = 0; i < count; i++ )
|
|
{
|
|
m_includesDict.Add( m_includesList[ i ], m_includesList[ i ] );
|
|
}
|
|
}
|
|
}
|
|
|
|
public void RefreshPragmasList()
|
|
{
|
|
if ( m_pragmasDict.Count != m_pragmasList.Count )
|
|
{
|
|
m_pragmasDict.Clear();
|
|
int count = m_pragmasList.Count;
|
|
for ( int i = 0; i < count; i++ )
|
|
{
|
|
m_pragmasDict.Add( m_pragmasList[ i ], m_pragmasList[ i ] );
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
public void RefreshDefinesList()
|
|
{
|
|
if ( m_definesDict.Count != m_definesList.Count )
|
|
{
|
|
m_definesDict.Clear();
|
|
int count = m_definesList.Count;
|
|
for ( int i = 0; i < count; i++ )
|
|
{
|
|
m_definesDict.Add( m_definesList[ i ], m_definesList[ i ] );
|
|
}
|
|
}
|
|
}
|
|
|
|
public bool HasInclude( string include )
|
|
{
|
|
RefreshIncludesList();
|
|
return m_includesDict.ContainsKey( include );
|
|
}
|
|
|
|
public bool HasPragma( string pragma )
|
|
{
|
|
RefreshPragmasList();
|
|
return m_pragmasDict.ContainsKey( pragma );
|
|
}
|
|
|
|
public bool HasDefine( string pragma )
|
|
{
|
|
RefreshDefinesList();
|
|
return m_definesDict.ContainsKey( pragma );
|
|
}
|
|
|
|
public void AddInclude( string include )
|
|
{
|
|
RefreshIncludesList();
|
|
if ( !m_includesDict.ContainsKey( include ) )
|
|
{
|
|
m_includesList.Add( include );
|
|
m_includesDict.Add( include, include );
|
|
}
|
|
}
|
|
|
|
public void AddPragma( string pragma )
|
|
{
|
|
RefreshPragmasList();
|
|
if ( !m_pragmasDict.ContainsKey( pragma ) )
|
|
{
|
|
m_pragmasList.Add( pragma );
|
|
m_pragmasDict.Add( pragma, pragma );
|
|
}
|
|
}
|
|
|
|
public void AddDefine( string define )
|
|
{
|
|
RefreshDefinesList();
|
|
if ( !m_definesDict.ContainsKey( define ) )
|
|
{
|
|
m_definesList.Add( define );
|
|
m_definesDict.Add( define, define );
|
|
}
|
|
}
|
|
|
|
public void AddNativeDirective( string native, int topIndex )
|
|
{
|
|
m_nativeTopIndex = topIndex;
|
|
m_nativeDirectivesList.Add( native );
|
|
}
|
|
|
|
public void Destroy()
|
|
{
|
|
m_nativeDirectivesList.Clear();
|
|
m_nativeDirectivesList = null;
|
|
|
|
|
|
m_includesList.Clear();
|
|
m_includesDict.Clear();
|
|
m_includesList = null;
|
|
m_includesDict = null;
|
|
|
|
m_pragmasList.Clear();
|
|
m_pragmasDict.Clear();
|
|
m_pragmasList = null;
|
|
m_pragmasDict = null;
|
|
|
|
m_definesList.Clear();
|
|
m_definesDict.Clear();
|
|
m_definesList = null;
|
|
m_definesDict = null;
|
|
}
|
|
|
|
public List<string> IncludesList { get { return m_includesList; } }
|
|
public List<string> PragmasList { get { return m_pragmasList; } }
|
|
public List<string> DefinesList { get { return m_definesList; } }
|
|
public List<string> NativeDirectivesList { get { return m_nativeDirectivesList; } }
|
|
public int NativeTopIndex { get { return m_nativeTopIndex; } }
|
|
|
|
}
|
|
|
|
[Serializable]
|
|
public class TemplateInfoContainer
|
|
{
|
|
public string Id = string.Empty;
|
|
public string Data = string.Empty;
|
|
public int Index = -1;
|
|
public bool IsValid { get { return Index > -1; } }
|
|
public void Reset()
|
|
{
|
|
Id = string.Empty;
|
|
Data = string.Empty;
|
|
Index = -1;
|
|
}
|
|
}
|
|
|
|
[Serializable]
|
|
public class TemplateDataParent : ScriptableObject
|
|
{
|
|
[SerializeField]
|
|
protected TemplateDataType m_templateType;
|
|
|
|
[SerializeField]
|
|
protected string m_name;
|
|
|
|
[SerializeField]
|
|
protected string m_guid;
|
|
|
|
[SerializeField]
|
|
protected int m_orderId;
|
|
|
|
[SerializeField]
|
|
protected string m_defaultShaderName = string.Empty;
|
|
|
|
[SerializeField]
|
|
protected bool m_isValid = true;
|
|
|
|
[SerializeField]
|
|
protected bool m_communityTemplate = false;
|
|
|
|
public virtual void Destroy() { }
|
|
public virtual bool Reload() { return true; }
|
|
public string Name
|
|
{
|
|
get { return m_name; }
|
|
set
|
|
{
|
|
m_name = value.StartsWith( "Hidden/" ) ? value.Replace( "Hidden/", string.Empty ) : value;
|
|
}
|
|
}
|
|
public string GUID { get { return m_guid; } set { m_guid = value; } }
|
|
public int OrderId { get { return m_orderId; } set { m_orderId = value; } }
|
|
public string DefaultShaderName { get { return m_defaultShaderName; } set { m_defaultShaderName = value; } }
|
|
public bool IsValid { get { return m_isValid; } }
|
|
public TemplateDataType TemplateType { get { return m_templateType; } }
|
|
public virtual void Init( string name, string guid, bool isCommunity ) { m_communityTemplate = isCommunity; }
|
|
}
|
|
}
|