2021-12-15 16:29:44 +03:00

235 lines
7.0 KiB
C#

//////////////////////////////////////////////////////
// MK Install Wizard Configuration //
// //
// Created by Michael Kremmel //
// www.michaelkremmel.de //
// Copyright © 2021 All rights reserved. //
//////////////////////////////////////////////////////
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
#if UNITY_EDITOR && !UNITY_CLOUD_BUILD
namespace MK.Toon.Editor.InstallWizard
{
//[CreateAssetMenu(fileName = "Configuration", menuName = "MK/Install Wizard/Create Configuration Asset")]
public sealed class Configuration : ScriptableObject
{
internal static bool isReady
{
get
{
if(_instance == null)
TryGetInstance();
return _instance != null;
}
}
[SerializeField]
private RenderPipeline _renderPipeline = RenderPipeline.Built_in;
[SerializeField]
private string _version = "X.Y.Z";
[SerializeField]
internal bool showInstallerOnReload = true;
[SerializeField][Space]
private Texture2D _titleImage = null;
[SerializeField][Space]
private Object _readMe = null;
[SerializeField][Space]
private Object _basePackageBuiltin = null;
[SerializeField]
private Object _basePackageLWRP = null;
[SerializeField]
private Object _basePackageURP = null;
[SerializeField][Space]
private Object _examplesPackageInc = null;
[SerializeField]
private Object _examplesPackageBuiltin = null;
[SerializeField]
private Object _examplesPackageURP = null;
[SerializeField][Space]
private ExampleContainer[] _examples = null;
private static void LogAssetNotFoundError()
{
Debug.LogError("Could not find Install Wizard Configuration Asset, please try to import the package again.");
}
private static Configuration _instance = null;
internal static Configuration TryGetInstance()
{
if(_instance == null)
{
string[] _guids = AssetDatabase.FindAssets("t:" + typeof(Configuration).Namespace + ".Configuration", null);
if(_guids.Length > 0)
{
_instance = AssetDatabase.LoadAssetAtPath(AssetDatabase.GUIDToAssetPath(_guids[0]), typeof(Configuration)) as Configuration;
if(_instance != null)
return _instance;
else
{
LogAssetNotFoundError();
return null;
}
}
else
{
LogAssetNotFoundError();
return null;
}
}
else
return _instance;
}
internal static string TryGetPath()
{
if(_instance != null)
{
return AssetDatabase.GetAssetPath(_instance);
}
else
{
return string.Empty;
}
}
internal static string TryGetVersion()
{
if(_instance != null)
{
return _instance._version;
}
else
{
return string.Empty;
}
}
internal static Texture2D TryGetTitleImage()
{
if(_instance != null)
{
return _instance._titleImage;
}
else
{
return null;
}
}
internal static ExampleContainer[] TryGetExamples()
{
if(_instance != null)
{
return _instance._examples;
}
else
{
return null;
}
}
internal static bool TryGetShowInstallerOnReload()
{
if(_instance != null)
{
return _instance.showInstallerOnReload;
}
else
{
return false;
}
}
internal static void TrySetShowInstallerOnReload(bool v)
{
if(_instance != null)
{
_instance.showInstallerOnReload = v;
}
}
internal static RenderPipeline TryGetRenderPipeline()
{
if(_instance != null)
{
return _instance._renderPipeline;
}
else
{
return RenderPipeline.Built_in;
}
}
internal static void TrySetRenderPipeline(RenderPipeline v)
{
if(_instance != null)
{
_instance._renderPipeline = v;
EditorUtility.SetDirty(_instance);
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();
}
}
internal static void ImportShaders(RenderPipeline renderPipeline)
{
switch(renderPipeline)
{
case RenderPipeline.Built_in:
AssetDatabase.ImportPackage(AssetDatabase.GetAssetPath(_instance._basePackageBuiltin), false);
break;
case RenderPipeline.Lightweight:
AssetDatabase.ImportPackage(AssetDatabase.GetAssetPath(_instance._basePackageLWRP), false);
break;
case RenderPipeline.Universal:
AssetDatabase.ImportPackage(AssetDatabase.GetAssetPath(_instance._basePackageURP), false);
break;
default:
//All cases should be handled
break;
}
_instance.showInstallerOnReload = false;
EditorUtility.SetDirty(_instance);
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();
}
internal static void ImportExamples(RenderPipeline renderPipeline)
{
AssetDatabase.ImportPackage(AssetDatabase.GetAssetPath(_instance._examplesPackageInc), false);
switch(renderPipeline)
{
case RenderPipeline.Built_in:
AssetDatabase.ImportPackage(AssetDatabase.GetAssetPath(_instance._examplesPackageBuiltin), false);
break;
case RenderPipeline.Universal:
AssetDatabase.ImportPackage(AssetDatabase.GetAssetPath(_instance._examplesPackageURP), false);
break;
default:
//All cases should be handled
break;
}
EditorUtility.SetDirty(_instance);
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();
}
internal static void OpenReadMe()
{
AssetDatabase.OpenAsset(_instance._readMe);
}
}
}
#endif