123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481 |
- //
- // ShaderGraphEssentials for Unity
- // (c) 2019 PH Graphics
- // Source code may be used and modified for personal or commercial projects.
- // Source code may NOT be redistributed or sold.
- //
- // *** A NOTE ABOUT PIRACY ***
- //
- // If you got this asset from a pirate site, please consider buying it from the Unity asset store. This asset is only legally available from the Unity Asset Store.
- //
- // I'm a single indie dev supporting my family by spending hundreds and thousands of hours on this and other assets. It's very offensive, rude and just plain evil to steal when I (and many others) put so much hard work into the software.
- //
- // Thank you.
- //
- // *** END NOTE ABOUT PIRACY ***
- //
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.IO;
- using UnityEditor;
- using UnityEditor.SceneManagement;
- using UnityEngine;
- using UnityEngine.WSA;
- using Application = UnityEngine.Application;
- namespace ShaderGraphEssentials
- {
- [InitializeOnLoad]
- public class GettingStartedWindowShow
- {
- private const string SettingsPath = "Assets/Plugins/ShaderGraphEssentials/Settings.asset";
- static GettingStartedWindowShow()
- {
- var settings = AssetDatabase.LoadAssetAtPath(SettingsPath, typeof(SGESettings)) as SGESettings;
- bool showWindow = !(settings && !settings.OpenGettingStartedWindow);
- if (showWindow)
- {
- EditorApplication.update += OnUpdate;
- }
- }
- private static void OnUpdate()
- {
- EditorApplication.update -= OnUpdate;
-
- SGESettings newSettings = ScriptableObject.CreateInstance<SGESettings>();
- AssetDatabase.CreateAsset(newSettings, SettingsPath);
- AssetDatabase.SaveAssets();
- AssetDatabase.Refresh();
- GettingStartedWindow window = (GettingStartedWindow)EditorWindow.GetWindow(typeof(GettingStartedWindow));
- window.Show();
- }
- }
-
-
- public class GettingStartedWindow : EditorWindow
- {
- private const string SGEVersion = "1.1.17";
-
- private const string SGEPath = "Assets/Plugins/ShaderGraphEssentials";
- private const string SGELogoFileName = "Plugin/Editor/GettingStarted/Data/SGE_key_128x128.png";
- private const string ManualFileName = "ShaderGraphEssentials_Documentation.pdf";
- private const string ChangeLogName = "ChangeLog.txt";
- private const string NoiseScene = BaseDemoPath + "/Scenes/ShaderGraphEssentials_Demo.unity";
- private const string SimpleLitScene = URPDemoPath + "/Scenes/ShaderGraphEssentials_Showcase_SimpleLit.unity";
- private const string ToonLitScene = URPDemoPath + "/Scenes/ShaderGraphEssentials_Showcase_ToonLit.unity";
- private const string WaterScene = URPDemoPath + "/Scenes/ShaderGraphEssentials_Showcase_Water.unity";
- private const string DemoFolderPath = "DemoScenes";
- private const string BaseDemoPath = "DemoScenes/Demo_Base";
- private const string URPDemoPath = "DemoScenes/Demo_URP";
- private const string BasePluginPath = "Plugin/Editor/Plugin_Base";
- private const string URPPluginPath = "Plugin/Editor/Plugin_URP";
- private const string URPPluginPackagePath = "Packages/SGE_URP.unitypackage";
- private const string URPDemoPackagePath = "Packages/SGE_URP_Demo.unitypackage";
- private const string HDRPPluginPackagePath = "Packages/SGE_HDRP.unitypackage";
- private const string HDRPDemoPackagePath = "Packages/SGE_HDRP_Demo.unitypackage";
- private GUIStyle _wrapLabelStyle;
- private Texture2D _logoTexture;
- private bool _hasError;
-
- // various sizes
- private const int LogoTextureSize = 128;
- private const int Margin = 10;
- private const int ButtonHeight = 30;
- private const int ButtonWidth = 120;
- private const int LargeButtonWidth = 160;
-
- private Vector2 _scrollPosition = Vector2.zero;
- private Vector2 _defaultWindowSize = Vector2.zero;
- private bool _initialized = false;
-
- [MenuItem("Tools/ShaderGraph Essentials/Getting Started")]
- static void Init()
- {
- // Get existing open window or if none, make a new one:
- GettingStartedWindow window = (GettingStartedWindow)EditorWindow.GetWindow(typeof(GettingStartedWindow));
- window.Show();
- }
- private bool GetInternalFile(string pathFromSGE, out string fullPath)
- {
- fullPath = Path.Combine(SGEPath, pathFromSGE);
- if (File.Exists(fullPath))
- return true;
-
- Debug.LogError("File " + fullPath + " doesn't exist. Did you move the ShaderGraphEssentials root folder from Assets/ ? Unfortunately this isn't supported yet.");
- _hasError = true;
- return false;
- }
- private void Awake()
- {
- string fullLogoPath;
- if (!GetInternalFile(SGELogoFileName, out fullLogoPath))
- {
- return;
- }
- _logoTexture = AssetDatabase.LoadAssetAtPath<Texture2D>(fullLogoPath);
- }
- private bool OpenFileWithDefaultEditor(string path)
- {
- string fullPath;
- if (!GetInternalFile(path, out fullPath))
- {
- return false;
- }
- fullPath = Path.GetFullPath(fullPath);
- if (!File.Exists(fullPath))
- {
- Debug.LogError("File " + fullPath + " doesn't exist. Did you move the ShaderGraphEssentials root folder from Assets/ ? Unfortunately this isn't supported yet.");
- _hasError = true;
- return false;
- }
-
- #if UNITY_EDITOR_WIN
- System.Diagnostics.Process.Start($@"{fullPath}");
- #elif UNITY_EDITOR_OSX
- EditorUtility.RevealInFinder($@"{fullPath}");
- #endif
- return true;
- }
- private bool CheckForErrors()
- {
- if (_hasError)
- {
- GUILayout.Label(
- "There was an error constructing this window. Please check your console for errors. If you can't fix it, please don't hesitate to ask for support");
- return true;
- }
- return false;
- }
- private void InitializeWindow()
- {
- titleContent.text = "Getting Started";
- minSize = new Vector2(250, 400);
-
- _defaultWindowSize = new Vector2(520, 800);
- Vector2 initialPosition = 0.5f * (new Vector2(Screen.currentResolution.width, Screen.currentResolution.height) - _defaultWindowSize);
- position = new Rect(initialPosition, _defaultWindowSize);
-
- _wrapLabelStyle = new GUIStyle(EditorStyles.label) {wordWrap = true};
- }
- void OnGUI()
- {
- if (!_initialized)
- {
- InitializeWindow();
- _initialized = true;
- }
- if (CheckForErrors()) return;
- _scrollPosition = GUI.BeginScrollView(new Rect(0, 0, position.width, position.height), _scrollPosition,
- new Rect(0, 0, _defaultWindowSize.x - 10, _defaultWindowSize.y - 10), false, false);
- float yOffset = 0;
- float defaultXSize = position.width - Margin - Margin;
-
- // Header
- GUI.BeginGroup(new Rect(Margin, Margin, defaultXSize, LogoTextureSize));
- float xOffset = 0;
- GUI.DrawTexture(new Rect(xOffset, 0, LogoTextureSize, LogoTextureSize), _logoTexture);
- xOffset += LogoTextureSize + Margin;
-
- GUI.Label(new Rect(xOffset, 0, 100, 30), "Version: " + SGEVersion);
- if (GUI.Button(new Rect(xOffset, 30, ButtonWidth, ButtonHeight), "View Changelog"))
- {
- OpenChangelog();
- if (CheckForErrors()) return;
- }
-
- if (GUI.Button(new Rect(xOffset, 30 + ButtonHeight + Margin, ButtonWidth, ButtonHeight), "View Manual"))
- {
- OpenManual();
- if (CheckForErrors()) return;
- }
- xOffset += ButtonWidth + Margin;
-
- if (GUI.Button(new Rect(xOffset, 30, LargeButtonWidth, ButtonHeight), "View Offline Changelog"))
- {
- OpenFileWithDefaultEditor(ChangeLogName);
- if (CheckForErrors()) return;
- }
-
- if (GUI.Button(new Rect(xOffset, 30 + ButtonHeight + Margin, LargeButtonWidth, ButtonHeight), "View Offline Manual"))
- {
- OpenFileWithDefaultEditor(ManualFileName);
- if (CheckForErrors()) return;
- }
-
- GUI.EndGroup();
- yOffset += Margin + LogoTextureSize;
-
- GUI.Label(new Rect(Margin, yOffset + Margin, defaultXSize, 10), "", GUI.skin.horizontalSlider);
- yOffset += Margin + Margin;
-
- // Getting started title
- yOffset += Margin;
- GUI.BeginGroup(new Rect(Margin, yOffset, defaultXSize, 20));
-
- GUI.Label(new Rect(defaultXSize / 2f - 50, 0, 100, 20), "Getting Started", EditorStyles.largeLabel);
-
- GUI.EndGroup();
- yOffset += Margin + 20;
-
- // URP
- GUI.BeginGroup(new Rect(Margin, yOffset, defaultXSize, 260));
-
- GUI.Label(new Rect(0, 0, defaultXSize, 30), "URP", EditorStyles.boldLabel);
- if (GUI.Button(new Rect(0, 30, defaultXSize, ButtonHeight), "Import URP plugin"))
- {
- ImportURPPlugin();
- }
- bool isURPImported = IsURPImported();
- using (new EditorGUI.DisabledScope(!isURPImported))
- {
- if (GUI.Button(new Rect(0, ButtonHeight * 2 + Margin, defaultXSize, ButtonHeight), "Import URP Demo scenes"))
- {
- ImportURPScenes();
- }
- }
-
- bool areURPScenesImported = AreURPScenesImported();
- using (new EditorGUI.DisabledScope(!areURPScenesImported))
- {
- if (GUI.Button(new Rect(0, ButtonHeight * 3 + Margin * 2, defaultXSize, ButtonHeight), "Open noise scene"))
- {
- OpenScene(NoiseScene);
- }
- if (GUI.Button(new Rect(0, ButtonHeight * 4 + Margin * 3, defaultXSize, ButtonHeight), "Open simple lit scene"))
- {
- OpenScene(SimpleLitScene);
- }
- if (GUI.Button(new Rect(0, ButtonHeight * 5 + Margin * 4, defaultXSize, ButtonHeight), "Open toon lit scene"))
- {
- OpenScene(ToonLitScene);
- }
- if (GUI.Button(new Rect(0, ButtonHeight * 6 + Margin * 5, defaultXSize, ButtonHeight), "Open water scene"))
- {
- OpenScene(WaterScene);
- }
- }
- GUI.EndGroup();
- yOffset += 260;
-
- // HDRP
- yOffset += Margin;
-
- GUI.BeginGroup(new Rect(Margin, yOffset, defaultXSize, 140));
-
- GUI.Label(new Rect(0, 0, defaultXSize, 30), "HDRP", EditorStyles.boldLabel);
- if (GUI.Button(new Rect(0, 30, defaultXSize, ButtonHeight), "Import HDRP plugin"))
- {
- ImportHDRPPlugin();
- }
- bool isHDRPImported = IsHDRPImported();
- using (new EditorGUI.DisabledScope(!isHDRPImported))
- {
- if (GUI.Button(new Rect(0, ButtonHeight * 2 + Margin, defaultXSize, ButtonHeight), "Import HDRP Demo scenes"))
- {
- ImportHDRPScenes();
- }
- }
-
- bool areHDRPScenesImported = AreHDRPScenesImported();
- using (new EditorGUI.DisabledScope(!areHDRPScenesImported))
- {
- if (GUI.Button(new Rect(0, ButtonHeight * 3 + Margin * 2, defaultXSize, ButtonHeight), "Open noise scene"))
- {
- OpenScene(NoiseScene);
- }
- }
- GUI.EndGroup();
-
- yOffset += 140;
-
- // switch URP / HDRP
- yOffset += Margin;
-
- GUI.BeginGroup(new Rect(Margin, yOffset, defaultXSize, 90));
-
- GUI.Label(new Rect(0, 0, defaultXSize, 30), "Switch between URP / HDRP", EditorStyles.boldLabel);
-
- GUI.Label(new Rect(0, 30, defaultXSize, 30), "To switch between URP / HDRP, hit the button below and reimport the correct plugin"
- , _wrapLabelStyle);
- if (GUI.Button(new Rect(0, 60, defaultXSize, ButtonHeight), "Remove plugins and demo scenes"))
- {
- CleanEverything();
- }
- GUI.EndGroup();
-
- yOffset += 90;
-
- GUI.Label(new Rect(Margin, yOffset + Margin, defaultXSize, 10), "", GUI.skin.horizontalSlider);
- yOffset += Margin + Margin;
-
- // Help title
- yOffset += Margin;
- GUI.BeginGroup(new Rect(Margin, yOffset, defaultXSize, 30));
-
- GUI.Label(new Rect(defaultXSize / 2f - 15, 0, 100, 20), "Help", EditorStyles.largeLabel);
-
- GUI.EndGroup();
- yOffset += Margin + 20;
-
- // Help
- GUI.BeginGroup(new Rect(Margin, yOffset, defaultXSize, ButtonHeight));
-
- if (GUI.Button(new Rect(0, 0, defaultXSize / 2 - Margin, ButtonHeight), "Discord"))
- {
- OpenDiscordHelp();
- }
-
- if (GUI.Button(new Rect(defaultXSize / 2 + Margin, 0, defaultXSize / 2 - Margin, ButtonHeight), "Email"))
- {
- OpenEmailHelp();
- }
-
-
- GUI.EndGroup();
-
- GUI.EndScrollView();
- }
- private void OpenEmailHelp()
- {
- Application.OpenURL("mailto:ph.graphics.unity@gmail.com");
- }
- private void OpenDiscordHelp()
- {
- Application.OpenURL("https://discord.gg/ksURBah");
- }
- private void OpenManual()
- {
- Application.OpenURL("http://assetstore.phbarralis.com/sge/features.html");
- }
- private void OpenChangelog()
- {
- Application.OpenURL("http://assetstore.phbarralis.com/sge/changelog.html");
- }
- private void ImportHDRPScenes()
- {
- ImportPackage(HDRPDemoPackagePath);
- }
- private bool AreHDRPScenesImported()
- {
- return Directory.Exists(Path.Combine(SGEPath, BaseDemoPath));
- }
- private bool IsHDRPImported()
- {
- return Directory.Exists(Path.Combine(SGEPath, BasePluginPath));
- }
- private void ImportHDRPPlugin()
- {
- ImportPackage(HDRPPluginPackagePath);
- }
- private void OpenScene(string sceneName)
- {
- string fullPath;
- if (!GetInternalFile(sceneName, out fullPath))
- return;
-
- EditorSceneManager.OpenScene(fullPath, OpenSceneMode.Single);
- }
- private bool AreURPScenesImported()
- {
- return Directory.Exists(Path.Combine(SGEPath, URPDemoPath));
- }
- private bool IsURPImported()
- {
- return Directory.Exists(Path.Combine(SGEPath, URPPluginPath));
- }
- private void ImportURPScenes()
- {
- ImportPackage(URPDemoPackagePath);
- }
- private void ImportURPPlugin()
- {
- ImportPackage(URPPluginPackagePath);
- }
- private void ImportPackage(string packagePath)
- {
- string fullPath;
- if (!GetInternalFile(packagePath, out fullPath))
- return;
-
- AssetDatabase.ImportPackage(fullPath, true);
- }
- private void DeleteIfFolderExist(string directoryPath)
- {
- string fullpath = Path.Combine(SGEPath, directoryPath);
- if (Directory.Exists(fullpath))
- FileUtil.DeleteFileOrDirectory(fullpath);
- }
- private void CleanEverything()
- {
- DeleteIfFolderExist(DemoFolderPath);
- DeleteIfFolderExist(BasePluginPath);
- DeleteIfFolderExist(URPPluginPath);
-
- AssetDatabase.Refresh();
- }
- }
- }
|