183 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			183 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			C#
		
	
	
	
| // Curved World <http://u3d.as/1W8h>
 | |
| // Copyright (c) Amazing Assets <https://amazingassets.world>
 | |
|  
 | |
| using UnityEngine;
 | |
| using UnityEditor;
 | |
| 
 | |
| 
 | |
| namespace AmazingAssets.CurvedWorld.Editor.Manual
 | |
| {
 | |
|     [CustomEditor(typeof(Manual))]
 | |
|     [InitializeOnLoad]
 | |
|     public class ManualEditor : UnityEditor.Editor
 | |
|     {
 | |
|         const float k_Space = 16f;
 | |
| 
 | |
| 
 | |
|         protected override void OnHeaderGUI()
 | |
|         {
 | |
|             var manual = (Manual)target;
 | |
|             Init();
 | |
| 
 | |
|             var iconWidth = Mathf.Min(EditorGUIUtility.currentViewWidth / 3f - 20f, 128f);
 | |
| 
 | |
|             GUILayout.BeginHorizontal("In BigTitle");
 | |
|             {
 | |
|                 if (manual.icon != null)
 | |
|                 {
 | |
|                     GUILayout.Space(k_Space);
 | |
|                     GUILayout.Label(manual.icon, GUILayout.Width(iconWidth), GUILayout.Height(iconWidth));
 | |
|                 }
 | |
|                 GUILayout.Space(k_Space);
 | |
|                 GUILayout.BeginVertical();
 | |
|                 {
 | |
| 
 | |
|                     GUILayout.FlexibleSpace();
 | |
|                     GUILayout.Label(AssetInfo.assetName, TitleStyle);
 | |
|                     GUILayout.Label("Version " + AssetInfo.assetVersion, EditorStyles.centeredGreyMiniLabel);
 | |
|                     GUILayout.FlexibleSpace();
 | |
|                 }
 | |
|                 
 | |
| 
 | |
|                 GUILayout.EndVertical();
 | |
|                 GUILayout.FlexibleSpace();
 | |
|             }
 | |
|             GUILayout.EndHorizontal();
 | |
|         }
 | |
| 
 | |
|         public override void OnInspectorGUI()
 | |
|         {
 | |
|             var manual = (Manual)target;
 | |
|             Init();
 | |
|              
 | |
|             if(manual.sections == null || manual.sections.Length != 4)
 | |
|             {
 | |
|                 manual.sections = new Manual.Section[] { new Manual.Section(), 
 | |
|                                                          new Manual.Section("Documentation", string.Empty, "Open online documentation", AssetInfo.assetManualLocation), 
 | |
|                                                          new Manual.Section("Forum", string.Empty, "Get answers", AssetInfo.assetForumPath), 
 | |
|                                                          new Manual.Section("Support and bug report", string.Empty, "Submit a report", AssetInfo.assetSupportMail, Manual.URLType.MailTo) };
 | |
|             }
 | |
| 
 | |
|             foreach (var section in manual.sections)
 | |
|             {
 | |
|                 if (!string.IsNullOrEmpty(section.heading))
 | |
|                 {
 | |
|                     GUILayout.Label(section.heading, HeadingStyle);
 | |
|                 }
 | |
| 
 | |
|                 if (!string.IsNullOrEmpty(section.text))
 | |
|                 {
 | |
|                     GUILayout.Label(section.text, BodyStyle);
 | |
|                 }
 | |
| 
 | |
|                 if (!string.IsNullOrEmpty(section.linkText))
 | |
|                 {
 | |
|                     if (LinkLabel(new GUIContent(section.linkText)))
 | |
|                     {
 | |
|                         switch (section.urlType)
 | |
|                         {
 | |
|                             case Manual.URLType.OpenPage:
 | |
|                                 Application.OpenURL(section.url);
 | |
|                                 break;
 | |
|                             case Manual.URLType.MailTo:
 | |
|                                 Application.OpenURL("mailto:" + section.url);
 | |
|                                 break;
 | |
|                             default:
 | |
|                                 break;
 | |
|                         }                            
 | |
|                     }
 | |
|                 }
 | |
| 
 | |
|                 GUILayout.Space(k_Space);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         bool m_Initialized;
 | |
| 
 | |
|         GUIStyle LinkStyle
 | |
|         {
 | |
|             get { return m_LinkStyle; }
 | |
|         }
 | |
| 
 | |
|         [SerializeField]
 | |
|         GUIStyle m_LinkStyle;
 | |
| 
 | |
|         GUIStyle TitleStyle
 | |
|         {
 | |
|             get { return m_TitleStyle; }
 | |
|         }
 | |
| 
 | |
|         [SerializeField]
 | |
|         GUIStyle m_TitleStyle;
 | |
| 
 | |
|         GUIStyle HeadingStyle
 | |
|         {
 | |
|             get { return m_HeadingStyle; }
 | |
|         }
 | |
| 
 | |
|         [SerializeField]
 | |
|         GUIStyle m_HeadingStyle;
 | |
| 
 | |
|         GUIStyle BodyStyle
 | |
|         {
 | |
|             get { return m_BodyStyle; }
 | |
|         }
 | |
| 
 | |
|         [SerializeField]
 | |
|         GUIStyle m_BodyStyle;
 | |
| 
 | |
|         GUIStyle ButtonStyle
 | |
|         {
 | |
|             get { return m_ButtonStyle; }
 | |
|         }
 | |
| 
 | |
|         [SerializeField]
 | |
|         GUIStyle m_ButtonStyle;
 | |
| 
 | |
|         void Init()
 | |
|         {
 | |
|             if (m_Initialized)
 | |
|                 return;
 | |
|             m_BodyStyle = new GUIStyle(EditorStyles.label);
 | |
|             m_BodyStyle.wordWrap = true;
 | |
|             m_BodyStyle.fontSize = 14;
 | |
|             m_BodyStyle.richText = true;
 | |
| 
 | |
|             m_TitleStyle = new GUIStyle(m_BodyStyle);
 | |
|             m_TitleStyle.fontSize = 26;
 | |
|             m_TitleStyle.alignment = TextAnchor.MiddleCenter;
 | |
| 
 | |
|             m_HeadingStyle = new GUIStyle(m_BodyStyle);
 | |
|             m_HeadingStyle.fontStyle = FontStyle.Bold;
 | |
|             m_HeadingStyle.fontSize = 18;
 | |
| 
 | |
|             m_LinkStyle = new GUIStyle(m_BodyStyle);
 | |
|             m_LinkStyle.wordWrap = false;
 | |
| 
 | |
|             // Match selection color which works nicely for both light and dark skins
 | |
|             m_LinkStyle.normal.textColor = new Color(0x00 / 255f, 0x78 / 255f, 0xDA / 255f, 1f);
 | |
|             m_LinkStyle.stretchWidth = false;
 | |
| 
 | |
|             m_ButtonStyle = new GUIStyle(EditorStyles.miniButton);
 | |
|             m_ButtonStyle.fontStyle = FontStyle.Bold;
 | |
| 
 | |
|             m_Initialized = true;
 | |
|         }
 | |
| 
 | |
|         bool LinkLabel(GUIContent label, params GUILayoutOption[] options)
 | |
|         {
 | |
|             var position = GUILayoutUtility.GetRect(label, LinkStyle, options);
 | |
| 
 | |
|             Handles.BeginGUI();
 | |
|             Handles.color = LinkStyle.normal.textColor;
 | |
|             Handles.DrawLine(new Vector3(position.xMin, position.yMax), new Vector3(position.xMax, position.yMax));
 | |
|             Handles.color = Color.white;
 | |
|             Handles.EndGUI();
 | |
| 
 | |
|             EditorGUIUtility.AddCursorRect(position, MouseCursor.Link);
 | |
| 
 | |
|             return GUI.Button(position, label, LinkStyle);
 | |
|         }
 | |
|     }
 | |
| }
 |