Files
2025-05-29 22:31:40 +03:00

187 lines
8.9 KiB
C#

// Amplify Impostors
// Copyright (c) Amplify Creations, Lda <info@amplify.pt>
using System.IO;
using UnityEditor;
using UnityEngine;
namespace AmplifyImpostors
{
public class Preferences
{
#if UNITY_EDITOR
public enum ShowOption
{
Always = 0,
OnNewVersion = 1,
Never = 2
}
private static readonly GUIContent StartUp = new GUIContent( "Show start screen on Unity launch", "You can set if you want to see the start screen everytime Unity launches, only just when there's a new version available or never." );
private static readonly GUIContent AutoSRP = new GUIContent( "Auto import SRP shaders", "By default Amplify Impostors checks for your SRP version and automatically imports compatible shaders.\nTurn this OFF if you prefer to import them manually." );
public static readonly string PrefGlobalFolder = "IMPOSTORS_GLOBALFOLDER";
public static readonly string PrefGlobalRelativeFolder = "IMPOSTORS_GLOBALRELATIVEFOLDER";
public static readonly string PrefGlobalDefault = "IMPOSTORS_GLOBALDEFAULT";
public static readonly string PrefGlobalTexImport = "IMPOSTORS_GLOBALTEXIMPORT";
public static readonly string PrefGlobalCreateLodGroup = "IMPOSTORS_GLOBALCREATELODGROUP ";
public static readonly string PrefGlobalGBuffer0Name = "IMPOSTORS_GLOBALGBUFFER0SUFFIX";
public static readonly string PrefGlobalGBuffer1Name = "IMPOSTORS_GLOBALGBUFFER1SUFFIX";
public static readonly string PrefGlobalGBuffer2Name = "IMPOSTORS_GLOBALGBUFFER2SUFFIX";
public static readonly string PrefGlobalGBuffer3Name = "IMPOSTORS_GLOBALGBUFFER3SUFFIX";
public static readonly string PrefGlobalBakingOptions = "IMPOSTORS_GLOBALBakingOptions";
public static readonly string PrefGlobalStartUp = "IMPOSTORS_GLOBALSTARTUP";
public static readonly string PrefGlobalAutoSRP = "IMPOSTORS_GLOBALAUTOSRP";
public static readonly string PrefDataImpType = "IMPOSTORS_DATAIMPTYPE";
public static readonly string PrefDataTexSizeLocked = "IMPOSTORS_DATATEXSIZEXLOCKED";
public static readonly string PrefDataTexSizeSelected = "IMPOSTORS_DATATEXSIZEXSELECTED";
public static readonly string PrefDataTexSizeX = "IMPOSTORS_DATATEXSIZEX";
public static readonly string PrefDataTexSizeY = "IMPOSTORS_DATATEXSIZEY";
public static readonly string PrefDataDecoupledFrames = "IMPOSTORS_DATADECOUPLEDFRAMES";
public static readonly string PrefDataXFrames = "IMPOSTORS_DATAXFRAMES";
public static readonly string PrefDataYFrames = "IMPOSTORS_DATAYFRAMES";
public static readonly string PrefDataPixelBleeding = "IMPOSTORS_DATAPIXELBLEEDING";
public static readonly string PrefDataTolerance = "IMPOSTORS_DATATOLERANCE ";
public static readonly string PrefDataNormalScale = "IMPOSTORS_DATANORMALSCALE";
public static readonly string PrefDataMaxVertices = "IMPOSTORS_DATAMAXVERTICES";
public static bool GlobalDefaultMode = false;
public static string GlobalFolder = string.Empty;
public static string GlobalRelativeFolder = string.Empty;
public static int GlobalTexImport = 0;
public static bool GlobalCreateLodGroup = false;
public static string GlobalAlbedoAlpha = string.Empty;
public static string GlobalSpecularSmoothness = string.Empty;
public static string GlobalNormalDepth = string.Empty;
public static string GlobalEmissionOcclusion = string.Empty;
public static bool GlobalBakingOptions = true;
public static ShowOption GlobalStartUp = 0;
public static bool GlobalAutoSRP = true;
private static readonly GUIContent DefaultSuffixesLabel = new GUIContent( "Default Suffixes", "Default Suffixes for new Bake Presets" );
private static bool PrefsLoaded = false;
private static GUIContent PathButtonContent = new GUIContent();
[SettingsProvider]
public static SettingsProvider ImpostorsSettings()
{
var provider = new SettingsProvider( "Preferences/Amplify Impostors", SettingsScope.User )
{
guiHandler = ( string searchContext ) => {
PreferencesGUI();
}
};
return provider;
}
public static void PreferencesGUI()
{
if ( !PrefsLoaded )
{
LoadDefaults();
PrefsLoaded = true;
}
PathButtonContent.text = string.IsNullOrEmpty( GlobalFolder ) ? "Click to select folder" : GlobalFolder;
EditorGUIUtility.labelWidth = 250;
GlobalStartUp = ( ShowOption )EditorGUILayout.EnumPopup( StartUp, GlobalStartUp );
GlobalAutoSRP = EditorGUILayout.Toggle( AutoSRP, GlobalAutoSRP );
GlobalDefaultMode = ( FolderMode )EditorGUILayout.EnumPopup( "New Impostor Default Path", GlobalDefaultMode ? FolderMode.Global : FolderMode.RelativeToPrefab ) == FolderMode.Global;
EditorGUILayout.BeginHorizontal();
if ( GlobalDefaultMode )
{
EditorGUI.BeginChangeCheck();
GlobalFolder = EditorGUILayout.TextField( "Global Folder", GlobalFolder );
if ( EditorGUI.EndChangeCheck() )
{
GlobalFolder = GlobalFolder.TrimStart( new char[] { '/', '*', '.', ' ' } );
GlobalFolder = "/" + GlobalFolder;
GlobalFolder = GlobalFolder.TrimEnd( new char[] { '/', '*', '.', ' ' } );
EditorPrefs.SetString( PrefGlobalFolder, GlobalFolder );
}
if ( GUILayout.Button( "...", "minibutton", GUILayout.Width( 20 )/*GUILayout.MaxWidth( Screen.width * 0.5f )*/ ) )
{
string oneLevelUp = Application.dataPath + "/../";
string directory = Path.GetFullPath( oneLevelUp ).Replace( "\\", "/" );
string fullpath = directory + GlobalFolder;
string folderpath = EditorUtility.SaveFolderPanel( "Save Impostor to folder", FileUtil.GetProjectRelativePath( fullpath ), null );
folderpath = FileUtil.GetProjectRelativePath( folderpath );
if ( !string.IsNullOrEmpty( folderpath ) )
{
GlobalFolder = folderpath;
GlobalFolder = GlobalFolder.TrimStart( new char[] { '/', '*', '.', ' ' } );
GlobalFolder = "/" + GlobalFolder;
GlobalFolder = GlobalFolder.TrimEnd( new char[] { '/', '*', '.', ' ' } );
EditorPrefs.SetString( PrefGlobalFolder, GlobalFolder );
}
}
}
else
{
EditorGUI.BeginChangeCheck();
GlobalRelativeFolder = EditorGUILayout.TextField( "Relative to Prefab Folder", GlobalRelativeFolder );
if ( EditorGUI.EndChangeCheck() )
{
GlobalRelativeFolder = GlobalRelativeFolder.TrimStart( new char[] { '/', '*', '.', ' ' } );
GlobalRelativeFolder = "/" + GlobalRelativeFolder;
GlobalRelativeFolder = GlobalRelativeFolder.TrimEnd( new char[] { '/', '*', '.', ' ' } );
EditorPrefs.SetString( PrefGlobalRelativeFolder, GlobalRelativeFolder );
}
EditorGUI.BeginDisabledGroup( true );
GUILayout.Button( "...", "minibutton", GUILayout.Width( 20 ) );
EditorGUI.EndDisabledGroup();
}
EditorGUILayout.EndHorizontal();
GlobalTexImport = EditorGUILayout.Popup( "Texture Importer Settings", GlobalTexImport, new string[] { "Ask if resolution is different", "Don't ask, always change", "Don't ask, never change" } );
GlobalCreateLodGroup = EditorGUILayout.Toggle( "Create LODGroup if not present", GlobalCreateLodGroup );
GUILayout.Space( 5 );
GUILayout.Label( DefaultSuffixesLabel, "boldlabel" );
GlobalAlbedoAlpha = EditorGUILayout.TextField( "Albedo & Alpha", GlobalAlbedoAlpha );
GlobalSpecularSmoothness = EditorGUILayout.TextField( "Specular & Smoothness", GlobalSpecularSmoothness );
GlobalNormalDepth = EditorGUILayout.TextField( "Normal & Depth", GlobalNormalDepth );
GlobalEmissionOcclusion = EditorGUILayout.TextField( "Emission & Occlusion", GlobalEmissionOcclusion );
if ( GUI.changed )
{
EditorPrefs.SetInt( PrefGlobalStartUp, ( int )GlobalStartUp );
EditorPrefs.SetBool( PrefGlobalAutoSRP, GlobalAutoSRP );
EditorPrefs.SetBool( PrefGlobalDefault, GlobalDefaultMode );
EditorPrefs.SetInt( PrefGlobalTexImport, GlobalTexImport );
EditorPrefs.SetBool( PrefGlobalCreateLodGroup, GlobalCreateLodGroup );
EditorPrefs.SetString( PrefGlobalGBuffer0Name, GlobalAlbedoAlpha );
EditorPrefs.SetString( PrefGlobalGBuffer1Name, GlobalSpecularSmoothness );
EditorPrefs.SetString( PrefGlobalGBuffer2Name, GlobalNormalDepth );
EditorPrefs.SetString( PrefGlobalGBuffer3Name, GlobalEmissionOcclusion );
}
}
public static void LoadDefaults()
{
GlobalStartUp = ( ShowOption )EditorPrefs.GetInt( PrefGlobalStartUp, 0 );
GlobalAutoSRP = EditorPrefs.GetBool( PrefGlobalAutoSRP, true );
GlobalFolder = EditorPrefs.GetString( PrefGlobalFolder, "" );
GlobalRelativeFolder = EditorPrefs.GetString( PrefGlobalRelativeFolder, "" );
GlobalDefaultMode = EditorPrefs.GetBool( PrefGlobalDefault, false );
GlobalTexImport = EditorPrefs.GetInt( PrefGlobalTexImport, 0 );
GlobalCreateLodGroup = EditorPrefs.GetBool( PrefGlobalCreateLodGroup, false );
GlobalBakingOptions = EditorPrefs.GetBool( PrefGlobalBakingOptions, true );
GlobalAlbedoAlpha = EditorPrefs.GetString( PrefGlobalGBuffer0Name, "_AlbedoAlpha" );
GlobalSpecularSmoothness = EditorPrefs.GetString( PrefGlobalGBuffer1Name, "_SpecularSmoothness" );
GlobalNormalDepth = EditorPrefs.GetString( PrefGlobalGBuffer2Name, "_NormalDepth" );
GlobalEmissionOcclusion = EditorPrefs.GetString( PrefGlobalGBuffer3Name, "_EmissionOcclusion" );
}
#endif
}
}