|
// Amplify Shader Editor - Visual Shader Editing Tool
|
|
// Copyright (c) Amplify Creations, Lda <info@amplify.pt>
|
|
|
|
using System.IO;
|
|
using System.Reflection;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEditor;
|
|
|
|
namespace AmplifyShaderEditor
|
|
{
|
|
[Serializable]
|
|
public class TipsWindow : MenuParent
|
|
{
|
|
private static bool m_showWindow = false;
|
|
private bool m_dontShowAtStart = false;
|
|
|
|
private static List<string> AllTips = new List<string>() {
|
|
"You can press W to toggle between a flat and color coded Wires and ports.",
|
|
"You can press CTRL+W to toggle between multiline or singleline Wire connections.",
|
|
"You can press P to globally open all node Previews.",
|
|
"You can press F to Focus your selection, single tap centers the selection while double tap it to also zooms on in.",
|
|
"You can press CTRL+F to open a search bar and Find a node by it's title",
|
|
"You can press SPACE to open a context menu to add a new node and press TAB or SHIFT+TAB tocycle between the found nodes",
|
|
"You can remove a node without breaking the graph connections by pressing ALT and then dragging the node out",
|
|
"You can switch two input connections holding CTRL while dragging one input connection into the other",
|
|
};
|
|
|
|
int m_currentTip = 0;
|
|
|
|
public TipsWindow( AmplifyShaderEditorWindow parentWindow ) : base( parentWindow, 0, 0, 0, 64, "Tips", MenuAnchor.TOP_LEFT, MenuAutoSize.NONE )
|
|
{
|
|
//m_dontShowAtStart = EditorPrefs.GetBool( "DontShowTipAtStart", false );
|
|
}
|
|
|
|
public override void Draw( Rect parentPosition, Vector2 mousePosition, int mouseButtonId, bool hasKeyboadFocus )
|
|
{
|
|
base.Draw( parentPosition, mousePosition, mouseButtonId, hasKeyboadFocus );
|
|
|
|
DrawWindow( mousePosition );
|
|
}
|
|
|
|
public void DrawWindow( Vector2 mousePosition )
|
|
{
|
|
if( !m_showWindow )
|
|
return;
|
|
|
|
Rect windowRect = new Rect( 0, 0, Screen.width, Screen.height );
|
|
Vector2 center = windowRect.center;
|
|
windowRect.size = new Vector2( 300, 200 );
|
|
windowRect.center = center;
|
|
Color temp = GUI.color;
|
|
GUI.color = Color.white;
|
|
GUI.Label( windowRect, string.Empty, GUI.skin.FindStyle( "flow node 0" ) );
|
|
|
|
if( Event.current.type == EventType.MouseDown && !windowRect.Contains( mousePosition ) )
|
|
m_showWindow = false;
|
|
|
|
Rect titleRect = windowRect;
|
|
titleRect.height = 35;
|
|
GUI.Label( titleRect, "Quick Tip!", GUI.skin.FindStyle( "TL Selection H2" ) );
|
|
Rect button = titleRect;
|
|
button.size = new Vector2( 14, 14 );
|
|
button.y += 2;
|
|
button.x = titleRect.xMax - 16;
|
|
if( GUI.Button( button, string.Empty, GUI.skin.FindStyle( "WinBtnClose" ) ) )
|
|
CloseWindow();
|
|
|
|
button.y += 100;
|
|
if( GUI.Button( button, ">" ) )
|
|
{
|
|
m_currentTip++;
|
|
if( m_currentTip >= AllTips.Count )
|
|
m_currentTip = 0;
|
|
}
|
|
|
|
Rect textRect = windowRect;
|
|
textRect.yMin = titleRect.yMax;
|
|
GUI.Label( textRect, AllTips[ m_currentTip ], GUI.skin.FindStyle( "WordWrappedLabel" ) );
|
|
|
|
Rect footerRect = windowRect;
|
|
footerRect.yMin = footerRect.yMax - 18;
|
|
footerRect.x += 3;
|
|
GUI.Label( footerRect, (m_currentTip + 1) + " of " + AllTips.Count + " tips" );
|
|
footerRect.x += 170;
|
|
EditorGUI.BeginChangeCheck();
|
|
m_dontShowAtStart = GUI.Toggle( footerRect, m_dontShowAtStart, "Don't show at start" );
|
|
if( EditorGUI.EndChangeCheck() )
|
|
{
|
|
EditorPrefs.SetBool( "DontShowTipAtStart", m_dontShowAtStart );
|
|
}
|
|
GUI.color = temp;
|
|
|
|
if( Event.current.type == EventType.MouseDown && windowRect.Contains( mousePosition ) )
|
|
{
|
|
Event.current.Use();
|
|
ParentWindow.MouseInteracted = true;
|
|
}
|
|
}
|
|
|
|
public override void Destroy()
|
|
{
|
|
base.Destroy();
|
|
}
|
|
|
|
public static void ShowWindow( bool toggle = true )
|
|
{
|
|
if( toggle )
|
|
m_showWindow = !m_showWindow;
|
|
else
|
|
m_showWindow = true;
|
|
|
|
//Test();
|
|
//ExportCompiledShaders();
|
|
}
|
|
|
|
//public static void Test()
|
|
//{
|
|
// Shader shader = UIUtils.CurrentWindow.CurrentGraph.CurrentShader;
|
|
// int mode = EditorPrefs.GetInt( "ShaderInspectorPlatformMode", 1 );
|
|
// int mask = EditorPrefs.GetInt( "ShaderInspectorPlatformMask", 524287 );
|
|
// bool strip = EditorPrefs.GetInt( "ShaderInspectorVariantStripping", 1 ) == 0;
|
|
// ShaderUtilEx.OpenCompiledShader( shader, mode, mask, strip );
|
|
//}
|
|
|
|
//public static void ExportCompiledShaders()
|
|
//{
|
|
// Shader shader = UIUtils.CurrentWindow.CurrentGraph.CurrentShader;
|
|
// string shaderPath = AssetDatabase.GetAssetPath( shader );
|
|
// SerializedObject so = new SerializedObject( shader );
|
|
// SerializedProperty prop = so.FindProperty( "m_Script" );
|
|
// var compiledShaderString = prop.stringValue;
|
|
// Directory.CreateDirectory( Application.dataPath + "/../ShaderSource/" );
|
|
// if( compiledShaderString == null )
|
|
// return;
|
|
// var outputPath = Application.dataPath + "/../ShaderSource/" + Path.GetFileNameWithoutExtension( shaderPath ) + "_compiled.shader";
|
|
// var sw = File.CreateText( outputPath );
|
|
// sw.Write( compiledShaderString );
|
|
// sw.Close();
|
|
//}
|
|
|
|
public static void CloseWindow()
|
|
{
|
|
m_showWindow = false;
|
|
}
|
|
}
|
|
}
|