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);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |