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

246 lines
5.6 KiB
C#

using System.IO;
using UnityEditor;
using UnityEngine;
namespace AllIn13DShader
{
public class AllIn13DShaderWindow : EditorWindow
{
private static AllIn13DShaderWindow instance;
private Vector2 scrollPosition;
private AssetWindowTabDrawer currentTabDrawer;
private int currTab = 0;
private string[] tabsNames;
private AssetWindowTabDrawer[] tabDrawers;
private CommonStyles commonStyles;
private GlobalConfiguration globalConfiguration;
private Texture imageInspector;
private SavePathsTabDrawer savePathsTabDrawer;
private TextureEditorTabDrawer textureEditorTabDrawer;
private TextureCreatorTabDrawer textureCreatorTabDrawer;
private OverrideMaterialsTabDrawer overrideMaterialsTabDrawer;
private OtherTabDrawer otherTabDrawer;
private EffectsProfileTabDrawer effectsProfileTabDrawer;
private URPSettingsDrawer urpSettingsDrawer;
private bool initialized;
[MenuItem("Tools/AllIn1/3DShaderWindow")]
public static void ShowAllIn13DShaderWindow()
{
if(instance == null)
{
instance = GetWindow<AllIn13DShaderWindow>("All In 1 3DShader Window");
}
}
private void Init()
{
commonStyles = new CommonStyles();
globalConfiguration = EditorUtils.FindAssetByName<GlobalConfiguration>("GlobalConfiguration");
PropertiesConfigCollection propertiesConfigCollection = EditorUtils.FindAsset<ScriptableObject>("PropertiesConfigCollection") as PropertiesConfigCollection;
scrollPosition = Vector2.zero;
savePathsTabDrawer = new SavePathsTabDrawer(commonStyles, this);
textureEditorTabDrawer = new TextureEditorTabDrawer(commonStyles, this);
textureCreatorTabDrawer = new TextureCreatorTabDrawer(commonStyles, this);
overrideMaterialsTabDrawer = new OverrideMaterialsTabDrawer(commonStyles, this);
otherTabDrawer = new OtherTabDrawer(globalConfiguration, commonStyles, this);
effectsProfileTabDrawer = new EffectsProfileTabDrawer(propertiesConfigCollection.propertiesConfig, globalConfiguration, commonStyles, this);
urpSettingsDrawer = new URPSettingsDrawer(commonStyles, this);
#if ALLIN13DSHADER_URP
tabDrawers = new AssetWindowTabDrawer[]
{
savePathsTabDrawer,
textureEditorTabDrawer,
textureCreatorTabDrawer,
overrideMaterialsTabDrawer,
effectsProfileTabDrawer,
urpSettingsDrawer,
otherTabDrawer
};
#else
tabDrawers = new AssetWindowTabDrawer[]
{
savePathsTabDrawer,
textureEditorTabDrawer,
textureCreatorTabDrawer,
overrideMaterialsTabDrawer,
effectsProfileTabDrawer,
otherTabDrawer
};
#endif
tabsNames = new string[tabDrawers.Length];
for(int i = 0; i < tabsNames.Length; i++)
{
tabsNames[i] = tabDrawers[i].GetTabName();
}
if (imageInspector == null)
{
imageInspector = AllIn13DShaderConfig.GetInspectorImage();
}
currentTabDrawer = savePathsTabDrawer;
initialized = true;
}
private void OnEnable()
{
Init();
EditorApplication.playModeStateChanged += PlayModeStateChanged;
currentTabDrawer.OnEnable();
}
private void OnDisable()
{
EditorApplication.playModeStateChanged -= PlayModeStateChanged;
currentTabDrawer.OnDisable();
}
private void OnDestroy()
{
WindowClosed();
}
private void WindowClosed()
{
overrideMaterialsTabDrawer.Close();
Repaint();
}
private void OnGUI()
{
if (!initialized)
{
Init();
}
commonStyles.InitStyles();
#if ALLIN13DSHADER_URP
bool urpCorrectlyConfigured = URPConfigurator.IsURPCorrectlyConfigured();
if (!urpCorrectlyConfigured)
{
Draw_URPError();
}
else
{
Draw();
}
#else
Draw();
#endif
}
private void Draw()
{
DrawEditor();
}
private void DrawEditor()
{
using (var scrollView = new EditorGUILayout.ScrollViewScope(scrollPosition, GUILayout.Width(position.width), GUILayout.Height(position.height)))
{
scrollPosition = scrollView.scrollPosition;
if (imageInspector)
{
Rect rect = EditorGUILayout.GetControlRect(GUILayout.Height(50));
GUI.DrawTexture(rect, imageInspector, ScaleMode.ScaleToFit, true);
}
EditorUtils.DrawThinLine();
if (Application.isPlaying)
{
DrawPlayMode();
}
else
{
int newTab = GUILayout.Toolbar(currTab, tabsNames);
AssetWindowTabDrawer newTabDrawer = tabDrawers[newTab];
if (newTabDrawer != currentTabDrawer)
{
currentTabDrawer.Hide();
newTabDrawer.Show();
this.currTab = newTab;
this.currentTabDrawer = newTabDrawer;
}
EditorUtils.DrawThinLine();
currentTabDrawer.Draw();
}
GUILayout.Space(10);
EditorUtils.DrawThinLine();
GUILayout.Label("Current asset version is " + Constants.VERSION, EditorStyles.boldLabel);
}
}
private void DrawPlayMode()
{
GUILayout.Label("Not available during play mode", commonStyles.bigLabel);
}
private void Draw_URPError()
{
EditorGUILayout.LabelField(CommonMessages.URP_PIPELINE_NOT_ASSIGNED, commonStyles.warningLabel);
EditorUtils.DrawButtonLink(CommonMessages.URP_PIPELINE_NOT_ASSIGNED_DOC_LINK);
}
private void PlayModeStateChanged(PlayModeStateChange state)
{
if(state == PlayModeStateChange.ExitingEditMode)
{
currentTabDrawer.ExitingEditMode();
}
else if(state == PlayModeStateChange.EnteredPlayMode)
{
currentTabDrawer.EnteredPlayMode();
Repaint();
}
else if(state == PlayModeStateChange.ExitingPlayMode)
{
Init();
Repaint();
}
}
public static void AllAssetProcessed()
{
CheckURPCorrectlyConfigured();
}
private static void CheckURPCorrectlyConfigured()
{
#if ALLIN13DSHADER_URP
if (!URPConfigurator.IsURPCorrectlyConfigured())
{
ShowAllIn13DShaderWindow();
}
#endif
}
}
}