Files
2026-02-23 22:01:07 +07:00

139 lines
4.4 KiB
C#

using System.IO;
using UnityEditor;
using UnityEngine;
namespace AllIn13DShader
{
public class PropertiesConfigCreator
{
private const string KEY_PROPERTIES_CONFIG_CREATED_FIRST_TIME = "AllIn13DShader_PropertiesConfigCreatedFirstTime";
private const string ASSET_NAME = "PropertiesConfigCollection.asset";
private static PropertiesConfigCollection propertiesCollection;
private static EffectGroupGlobalConfigCollection effectGroupGlobalConfigCollection;
private static EffectsExtraData effectsExtraData;
public static PropertiesConfigCollection CreateConfig()
{
propertiesCollection = CreatePropertiesCollection();
effectGroupGlobalConfigCollection = GetEffectGroupGlobalConfigCollection();
effectsExtraData = GetEffectsExtraData();
CreatePropertiesConfig(propertiesCollection, Constants.SHADER_NAME_ALLIN13D_OUTLINE);
EditorUtility.SetDirty(propertiesCollection);
AssetDatabase.SaveAssets();
AssetDatabase.Refresh(ImportAssetOptions.ForceSynchronousImport);
Debug.LogWarning("Creating data...");
return propertiesCollection;
}
private static PropertiesConfigCollection CreatePropertiesCollection()
{
PropertiesConfigCollection res = FindPropertiesCollection();
string path = AssetDatabase.GetAssetPath(res);
if (!File.Exists(path))
{
string propertiesCollectionPath = Path.Combine(GlobalConfiguration.instance.GlobalConfigFolderPath, ASSET_NAME);
res = ScriptableObject.CreateInstance<PropertiesConfigCollection>();
AssetDatabase.CreateAsset(res, propertiesCollectionPath);
AssetDatabase.Refresh(ImportAssetOptions.ForceSynchronousImport);
}
return res;
}
private static EffectGroupGlobalConfigCollection GetEffectGroupGlobalConfigCollection()
{
string[] guids = AssetDatabase.FindAssets("t:EffectGroupGlobalConfigCollection");
string path = AssetDatabase.GUIDToAssetPath(guids[0]);
EffectGroupGlobalConfigCollection res = AssetDatabase.LoadAssetAtPath<EffectGroupGlobalConfigCollection>(path);
return res;
}
private static EffectsExtraData GetEffectsExtraData()
{
EffectsExtraData res = null;
res = EditorUtils.FindAsset<EffectsExtraData>("EffectsExtraData");
return res;
}
private static void CreatePropertiesConfig(PropertiesConfigCollection propertiesCollection, string shaderName)
{
string shaderNameWithExtension = shaderName + ".shader";
string assetPath = Path.Combine(Constants.SHADERS_GENERIC_FOLDER_PATH, shaderNameWithExtension);
Shader shader = AssetDatabase.LoadAssetAtPath<Shader>(assetPath);
PropertiesConfig propertiesConfig = new PropertiesConfig();
propertiesConfig.shader = shader;
propertiesConfig.CreateConfig(effectGroupGlobalConfigCollection, effectsExtraData);
propertiesCollection.AddConfig(propertiesConfig);
}
public static PropertiesConfigCollection FindPropertiesCollection()
{
PropertiesConfigCollection res = null;
string[] guids = AssetDatabase.FindAssets("t:PropertiesConfigCollection");
if (guids.Length > 0)
{
string assetPath = AssetDatabase.GUIDToAssetPath(guids[0]);
res = AssetDatabase.LoadAssetAtPath<PropertiesConfigCollection>(assetPath);
}
return res;
}
public static PropertiesConfigCollection InitIfNeeded(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths, bool didDomainReload)
{
PropertiesConfigCollection res = FindPropertiesCollection();
bool assetDeleted = false;
assetDeleted = EditorUtils.ConstainsFileName(deletedAssets, ASSET_NAME);
bool configCreatedFirstTime = SessionState.GetBool(KEY_PROPERTIES_CONFIG_CREATED_FIRST_TIME, false);
if (!configCreatedFirstTime)
{
#if UNITY_WEBGL
URPSettingsController.DisableFeature("ALLIN1_DOTS_INSTANCING_SUPPORT");
#endif
}
#if !ALLIN13DSHADER_DEVELOP
configCreatedFirstTime = true;
#endif
bool shadersDeleted = EditorUtils.ContainsAnyFolowingFileNames(deletedAssets, Constants.SHADERS_NAMES, "shader");
bool shadersImported = false;
if (!shadersDeleted)
{
shadersImported = EditorUtils.ContainsAnyFolowingFileNames(importedAssets, Constants.SHADERS_NAMES, "shader");
}
if (res == null || !configCreatedFirstTime || assetDeleted || shadersDeleted /*|| shadersImported*/)
{
SessionState.SetBool(KEY_PROPERTIES_CONFIG_CREATED_FIRST_TIME, true);
ShadersCreatorTool.BuildShaderFiles();
res = CreateConfig();
}
SessionState.SetBool(KEY_PROPERTIES_CONFIG_CREATED_FIRST_TIME, true);
return res;
}
}
}