Files
Studio/Assets/Editor/TriLibCore/Scripts/TriLibSettingsProvider.cs
2025-06-11 16:50:56 +09:00

134 lines
6.4 KiB
C#

using System;
using System.Collections.Generic;
using TriLibCore.Mappers;
using UnityEditor;
using UnityEngine;
namespace TriLibCore.Editor
{
public class TriLibSettingsProvider : SettingsProvider
{
private class Styles
{
public static readonly GUIStyle Group = new GUIStyle { padding = new RectOffset(10, 10, 5, 5) };
}
private static string _settingsFilePath;
public TriLibSettingsProvider(string path, SettingsScope scopes = SettingsScope.User, IEnumerable<string> keywords = null) : base(path, scopes, keywords)
{
var settingsAssetGuids = AssetDatabase.FindAssets("TriLibReaders");
if (settingsAssetGuids.Length > 0)
{
_settingsFilePath = AssetDatabase.GUIDToAssetPath(settingsAssetGuids[0]);
}
else
{
throw new Exception("Could not find TriLibReaders.cs file. Please re-import TriLib package.");
}
}
public override void OnGUI(string searchContext)
{
EditorGUILayout.Space();
var contentWidth = GUILayoutUtility.GetLastRect().width * 0.5f;
EditorGUIUtility.labelWidth = contentWidth;
EditorGUIUtility.fieldWidth = contentWidth;
GUILayout.BeginVertical(Styles.Group);
GUILayout.Label("Runtime Importing", EditorStyles.boldLabel);
GUILayout.Label("You can disable runtime file-formats importing here");
EditorGUILayout.Space();
ShowConditionalToggle("Disable runtime FBX importing", "TRILIB_DISABLE_FBX_IMPORT");
ShowConditionalToggle("Disable runtime glTF2 importing", "TRILIB_DISABLE_GLTF_IMPORT");
ShowConditionalToggle("Disable runtime OBJ importing", "TRILIB_DISABLE_OBJ_IMPORT");
ShowConditionalToggle("Disable runtime STL importing", "TRILIB_DISABLE_STL_IMPORT");
ShowConditionalToggle("Disable runtime PLY importing", "TRILIB_DISABLE_PLY_IMPORT");
ShowConditionalToggle("Disable runtime 3MF importing", "TRILIB_DISABLE_3MF_IMPORT");
ShowConditionalToggle("Disable runtime DAE importing", "TRILIB_DISABLE_DAE_IMPORT");
EditorGUILayout.Space();
EditorGUILayout.Space();
GUILayout.Label("Editor Importing", EditorStyles.boldLabel);
EditorPrefs.SetInt("TriLibTimeout", EditorGUILayout.IntField("Loading timeout", EditorPrefs.GetInt("TriLibTimeout", 180)));
GUILayout.Label("You can disable in editor file-formats importing to avoid conflicts with other editor importers");
EditorGUILayout.Space();
ShowConditionalToggle("Disable in editor glTF2 importing", "TRILIB_DISABLE_EDITOR_GLTF_IMPORT");
ShowConditionalToggle("Disable in editor PLY importing", "TRILIB_DISABLE_EDITOR_PLY_IMPORT");
ShowConditionalToggle("Disable in editor 3MF importing", "TRILIB_DISABLE_EDITOR_3MF_IMPORT");
ShowConditionalToggle("Disable in editor STL importing", "TRILIB_DISABLE_EDITOR_STL_IMPORT");
EditorGUILayout.Space();
EditorGUILayout.Space();
GUILayout.Label("Material Mappers", EditorStyles.boldLabel);
GUILayout.Label("Select the material mappers according to your project rendering pipeline");
EditorGUILayout.Space();
for (var i = 0; i < MaterialMapper.RegisteredMappers.Count; i++)
{
var materialMapperName = MaterialMapper.RegisteredMappers[i];
var value = TriLibSettings.GetBool(materialMapperName);
var newValue = EditorGUILayout.Toggle(materialMapperName, value);
if (newValue != value)
{
TriLibSettings.SetBool(materialMapperName, newValue);
}
}
EditorGUILayout.Space();
EditorGUILayout.Space();
GUILayout.Label("Misc Options", EditorStyles.boldLabel);
GUILayout.Label("Advanced and experimental options");
EditorGUILayout.Space();
ShowConditionalToggle("Enable UWP threaded loading (Experimental)", "TRILIB_ENABLE_UWP_THREADS");
ShowConditionalToggle("Enable glTF2 Draco decompression (Experimental)", "TRILIB_DRACO");
ShowConditionalToggle("Force synchronous loading", "TRILIB_FORCE_SYNC");
ShowConditionalToggle("Change thread names (Debug purposes only)", "TRILIB_USE_THREAD_NAMES");
ShowConditionalToggle("Disable asset loader options validations", "TRILIB_DISABLE_VALIDATIONS");
ShowConditionalToggle("Show advanced memory usage (Windows only)", "TRILIB_SHOW_MEMORY_USAGE");
EditorGUILayout.Space();
GUILayout.BeginHorizontal();
GUILayout.FlexibleSpace();
if (GUILayout.Button("Version Notes"))
{
TriLibVersionNotes.ShowWindow();
}
if (GUILayout.Button("API Reference"))
{
Application.OpenURL("https://ricardoreis.net/trilib/trilib2/docs/");
}
if (GUILayout.Button("Wiki"))
{
Application.OpenURL("https://ricardoreis.net/trilibwiki/index.php");
}
if (GUILayout.Button("Discord Server"))
{
Application.OpenURL("https://discord.gg/FV6tqCxY2U");
}
if (GUILayout.Button("Support"))
{
Application.OpenURL("https://ricardoreis.net/contact/");
}
GUILayout.EndHorizontal();
GUILayout.EndVertical();
base.OnGUI(searchContext);
}
private void ShowConditionalToggle(string label, string symbol, Action<bool> onChange = null)
{
var currentValue = TriLibDefineSymbolsHelper.IsSymbolDefined(symbol);
var newValue = EditorGUILayout.Toggle(label, currentValue);
if (newValue != currentValue)
{
TriLibDefineSymbolsHelper.UpdateSymbol(symbol, newValue);
onChange?.Invoke(newValue);
}
}
[SettingsProvider]
public static SettingsProvider TriLib()
{
var provider = new TriLibSettingsProvider("Project/TriLib", SettingsScope.Project)
{
keywords = GetSearchKeywordsFromGUIContentProperties<Styles>()
};
return provider;
}
}
}