Files
project-reset/Assets/Plugins/HTraceSSGI/Scripts/Editor/HTraceSSGIEditor.cs
2026-01-02 23:27:08 -05:00

141 lines
4.4 KiB
C#

//pipelinedefine
#define H_URP
#if UNITY_EDITOR
using System.IO;
using HTraceSSGI.Scripts.Data.Private;
using HTraceSSGI.Scripts.Data.Public;
using UnityEditor;
using UnityEngine;
using HTraceSSGI.Scripts.Infrastructure.URP;
namespace HTraceSSGI.Scripts.Editor
{
public enum HTraceSSGIPreset
{
Performance = 1,
Optimized = 2,
Balanced = 3,
Quality = 4,
}
[CustomEditor(typeof(HTraceSSGI))]
public class HTraceSSGIEditor : UnityEditor.Editor
{
private SerializedProperty _profile;
HTraceSSGIProfile _cachedProfile;
UnityEditor.Editor _cachedProfileEditor;
static GUIStyle _boxStyle;
private void OnEnable()
{
_profile = serializedObject.FindProperty("Profile");
}
public override void OnInspectorGUI()
{
if (_boxStyle == null)
{
_boxStyle = new GUIStyle(GUI.skin.box);
_boxStyle.padding = new RectOffset(15, 10, 5, 5);
}
if (HTraceSSGIRendererFeature.IsUseVolumes == true)
{
EditorGUILayout.HelpBox("\"Use Volumes\" checkbox in the HTrace SSGI Renderer feature is enabled, use the HTraceSSGI volume override in your scenes.", MessageType.Warning, wide: true);
return;
}
EditorGUILayout.PropertyField(_profile);
EditorGUILayout.Space(5);
if (_profile.objectReferenceValue != null)
{
if (_cachedProfile != _profile.objectReferenceValue)
{
_cachedProfile = null;
}
if (_cachedProfile == null)
{
_cachedProfile = (HTraceSSGIProfile)_profile.objectReferenceValue;
_cachedProfileEditor = CreateEditor(_profile.objectReferenceValue);
}
EditorGUILayout.BeginVertical();
_cachedProfileEditor.OnInspectorGUI();
EditorGUILayout.Separator();
if (GUILayout.Button("Save As New Profile"))
{
ExportProfile();
}
EditorGUILayout.EndVertical();
}
else
{
EditorGUILayout.HelpBox("Create or assign a profile.", MessageType.Info);
if (GUILayout.Button("New Profile"))
{
CreateProfile();
}
}
serializedObject.ApplyModifiedProperties();
}
void CreateProfile() {
var fp = CreateInstance<HTraceSSGIProfile>();
fp.name = "New HTrace SSGI Profile";
string path = "Assets";
foreach (Object obj in Selection.GetFiltered(typeof(Object), SelectionMode.Assets)) {
path = AssetDatabase.GetAssetPath(obj);
if (File.Exists(path)) {
path = Path.GetDirectoryName(path);
}
break;
}
string fullPath = path + "/" + fp.name + ".asset";
fullPath = AssetDatabase.GenerateUniqueAssetPath(fullPath);
AssetDatabase.CreateAsset(fp, fullPath);
AssetDatabase.SaveAssets();
_profile.objectReferenceValue = fp;
EditorGUIUtility.PingObject(fp);
}
void ExportProfile() {
var fp = (HTraceSSGIProfile)_profile.objectReferenceValue;
var newProfile = Instantiate(fp);
string path = AssetDatabase.GetAssetPath(fp);
string fullPath = path;
if (string.IsNullOrEmpty(path)) {
path = "Assets";
foreach (Object obj in Selection.GetFiltered(typeof(Object), SelectionMode.Assets)) {
path = AssetDatabase.GetAssetPath(obj);
if (File.Exists(path)) {
path = Path.GetDirectoryName(path);
}
break;
}
fullPath = path + "/" + fp.name + ".asset";
}
fullPath = AssetDatabase.GenerateUniqueAssetPath(fullPath);
AssetDatabase.CreateAsset(newProfile, fullPath);
AssetDatabase.SaveAssets();
_profile.objectReferenceValue = newProfile;
EditorGUIUtility.PingObject(fp);
}
}
}
#endif