Esempio n. 1
0
    public void centerText2(string s)
    {
        m_centerText2.Text = s;
        Animator component = m_centerText2.GetComponent <Animator>();

        component.CrossFade(0, 0);
    }
Esempio n. 2
0
    void OnEnable()
    {
        EasyFontTextMesh customFont = target as EasyFontTextMesh;

        if (customFont.GUIChanged || isFirstTime)
        {
            //customFont.RefreshMeshEditor();
            RefreshAllSceneText();           //Refresh all test to solve the duplicate command issue (Text is not seeing when duplicating). Comment this line an use line above if you have a lot of text
            // and are sufferig slowdonws in the editor when selecting texts
            isFirstTime = false;             //This is a hack because on enable is called a lot of times because of the porpertie font
        }

        sortingLayersNames = GetSortingLayerNames();

        //Initialize shorting layer index
        for (int i = 0; i < sortingLayersNames.Length; i++)
        {
            if (sortingLayersNames[i] == customFont.GetComponent <Renderer>().sortingLayerName)
            {
                popupSortingLayersIndex = i;
            }
        }
    }
Esempio n. 3
0
    public override void OnInspectorGUI()
    {
        serializedObject.Update();


        DrawDefaultInspector();

        EasyFontTextMesh customFont = target as EasyFontTextMesh;


        //SerializedObject serializedObject = new SerializedObject(customFont);


        SerializedProperty serializedText              = serializedObject.FindProperty("_privateProperties.text");
        SerializedProperty serializedFontType          = serializedObject.FindProperty("_privateProperties.font");
        SerializedProperty serializedDetailMaterial    = serializedObject.FindProperty("_privateProperties.customDetailMaterial");
        SerializedProperty serializedFontSize          = serializedObject.FindProperty("_privateProperties.fontSize");
        SerializedProperty serializedCharacterSize     = serializedObject.FindProperty("_privateProperties.size");
        SerializedProperty serializedTextAnchor        = serializedObject.FindProperty("_privateProperties.textAnchor");
        SerializedProperty serializedTextAlignment     = serializedObject.FindProperty("_privateProperties.textAlignment");
        SerializedProperty serializedLineSpacing       = serializedObject.FindProperty("_privateProperties.lineSpacing");
        SerializedProperty serializedFontFillType      = serializedObject.FindProperty("_privateProperties.fillColorStyle");
        SerializedProperty serializedFontColorTop      = serializedObject.FindProperty("_privateProperties.fontColorTop");
        SerializedProperty serializedFontColorBottom   = serializedObject.FindProperty("_privateProperties.fontColorBottom");
        SerializedProperty serializedFillMaterial      = serializedObject.FindProperty("_privateProperties.fillMaterial");
        SerializedProperty serializedEnableShadow      = serializedObject.FindProperty("_privateProperties.enableShadow");
        SerializedProperty serializedShadowColor       = serializedObject.FindProperty("_privateProperties.shadowColor");
        SerializedProperty serializedShadowDistance    = serializedObject.FindProperty("_privateProperties.shadowDistance");
        SerializedProperty serializedEnableOutline     = serializedObject.FindProperty("_privateProperties.enableOutline");
        SerializedProperty serializedOutlineColor      = serializedObject.FindProperty("_privateProperties.outlineColor");
        SerializedProperty serializedOutlineWidth      = serializedObject.FindProperty("_privateProperties.outLineWidth");
        SerializedProperty serializedOutLineQuality    = serializedObject.FindProperty("_privateProperties.outlineQuality");
        SerializedProperty serializedSortingLayerOrder = serializedObject.FindProperty("_privateProperties.sortingLayerOrder");
        SerializedProperty serializedSortingLayerName  = serializedObject.FindProperty("_privateProperties.sortingLayerName");

        SerializedProperty[] allSerializedProperties = new SerializedProperty[21]
        {
            serializedText, serializedFontType, serializedDetailMaterial, serializedFontSize, serializedCharacterSize, serializedTextAnchor, serializedTextAlignment,
            serializedLineSpacing, serializedFontFillType, serializedFontColorTop, serializedFontColorBottom, serializedFillMaterial, serializedEnableShadow, serializedShadowColor, serializedShadowDistance,
            serializedEnableOutline, serializedOutlineColor, serializedOutlineWidth, serializedOutLineQuality, serializedSortingLayerOrder, serializedSortingLayerName
        };

        #region properties

        GUIStyle textColor = new GUIStyle();

        //Render settings
        if (serializedSortingLayerName.isInstantiatedPrefab)
        {
            SetBoldDefaultFont(serializedSortingLayerName.prefabOverride);
        }

        popupSortingLayersIndex = EditorGUILayout.Popup("Sorting Layer", popupSortingLayersIndex, sortingLayersNames);
        serializedSortingLayerName.stringValue = sortingLayersNames[popupSortingLayersIndex];

        if (serializedSortingLayerOrder.isInstantiatedPrefab)
        {
            SetBoldDefaultFont(serializedSortingLayerOrder.prefabOverride);
        }

        EditorGUILayout.PropertyField(serializedSortingLayerOrder, new GUIContent("Order In layer", "Sets the Z shorting index in this layer"));


        //Text
        if (serializedText.isInstantiatedPrefab)
        {
            SetBoldDefaultFont(serializedText.prefabOverride);
        }

        EditorGUILayout.LabelField(new GUIContent("Text", "This is the text that is going to be used"));
        EditorGUILayout.BeginVertical("box");

        serializedText.stringValue = EditorGUILayout.TextArea(serializedText.stringValue);


        EditorGUILayout.EndVertical();

        //Font
        if (serializedFontType.isInstantiatedPrefab)
        {
            SetBoldDefaultFont(serializedFontType.prefabOverride);
        }

        EditorGUILayout.PropertyField(serializedFontType, new GUIContent("Font", "The desired font type"));

        if (customFont.FontType == null)
        {
            customFont.FontType = Resources.GetBuiltinResource(typeof(Font), "Arial.ttf") as Font;
        }

        //Font material
        if (serializedDetailMaterial.isInstantiatedPrefab)
        {
            SetBoldDefaultFont(serializedDetailMaterial.prefabOverride);
        }

        if (customFont.FillColorStyle != EasyFontTextMesh.FILL_COLOR_STYLE.textureGradient)
        {
            EditorGUILayout.PropertyField(serializedDetailMaterial, new GUIContent("Detail Material", "Used for additional FX"));
        }
        else
        {
            textColor.normal.textColor = Color.red;
            EditorGUILayout.BeginHorizontal();
            //EditorGUILayout.LabelField("Detail material is Disabled when TextureGradient Font Color Style is selected", textColor);
            EditorGUILayout.LabelField(new GUIContent("Detail material", "Disabled when TextureGradient Font Color Style is selected"), textColor);
            EditorGUILayout.LabelField(new GUIContent("DISABLED", "Disabled when TextureGradient Font Color Style is selected"), textColor);
            EditorGUILayout.EndHorizontal();
        }

        if (customFont.FontType == null)
        {
            customFont.FontType = Resources.GetBuiltinResource(typeof(Font), "Arial.ttf") as Font;
        }

        //Font Size
        if (serializedFontSize.isInstantiatedPrefab)
        {
            SetBoldDefaultFont(serializedFontSize.prefabOverride);
        }


        EditorGUILayout.PropertyField(serializedFontSize, new GUIContent("Font size", "This is the actual font size. It will set the texture size"));

        //CharacterSize

        if (serializedCharacterSize.isInstantiatedPrefab)
        {
            SetBoldDefaultFont(serializedCharacterSize.prefabOverride);
        }

        //serializedCharacterSize.floatValue = EditorGUILayout.FloatField(new GUIContent("Character size", "How big the characters are going to be renderer"), serializedCharacterSize.floatValue);
        EditorGUILayout.PropertyField(serializedCharacterSize, new GUIContent("Character Size", "How big the characters are going to be renderer"));

        //Text anchor
        if (serializedTextAnchor.isInstantiatedPrefab)
        {
            SetBoldDefaultFont(serializedTextAnchor.prefabOverride);
        }

        EditorGUILayout.PropertyField(serializedTextAnchor, new GUIContent("Text Anchor", "Position of the texts pivot's point"));

        //Text alignment
        if (serializedTextAlignment.isInstantiatedPrefab)
        {
            SetBoldDefaultFont(serializedTextAlignment.prefabOverride);
        }

        EditorGUILayout.PropertyField(serializedTextAlignment, new GUIContent("Text alignment", "Line alignment"));

        //Line spacing
        if (serializedLineSpacing.isInstantiatedPrefab)
        {
            SetBoldDefaultFont(serializedLineSpacing.prefabOverride);
        }

        EditorGUILayout.PropertyField(serializedLineSpacing, new GUIContent("Line spacing", "Distance between lines"));

        // Font color
        if (serializedFontFillType.isInstantiatedPrefab)
        {
            SetBoldDefaultFont(serializedFontFillType.prefabOverride);
        }

        EditorGUILayout.PropertyField(serializedFontFillType, new GUIContent("Font Color Style", "The fill color style"));

        EditorGUILayout.BeginVertical("box");

        switch (customFont.FillColorStyle)
        {
        case EasyFontTextMesh.FILL_COLOR_STYLE.single:

            if (serializedFontColorTop.isInstantiatedPrefab)
            {
                SetBoldDefaultFont(serializedFontColorTop.prefabOverride);
            }

            EditorGUILayout.PropertyField(serializedFontColorTop, new GUIContent("Color", "Color for the top"));

            break;

        case EasyFontTextMesh.FILL_COLOR_STYLE.gradient:

            if (serializedFontColorTop.isInstantiatedPrefab)
            {
                SetBoldDefaultFont(serializedFontColorTop.prefabOverride);
            }

            EditorGUILayout.PropertyField(serializedFontColorTop, new GUIContent("Top Color", "Color for the top"));

            if (serializedFontColorBottom.isInstantiatedPrefab)
            {
                SetBoldDefaultFont(serializedFontColorBottom.prefabOverride);
            }

            EditorGUILayout.PropertyField(serializedFontColorBottom, new GUIContent("Bottom Color", "Color for the bottom"));


            break;

        case EasyFontTextMesh.FILL_COLOR_STYLE.textureGradient:

            if (serializedFillMaterial.isInstantiatedPrefab)
            {
                SetBoldDefaultFont(serializedFillMaterial.prefabOverride);
            }

            EditorGUILayout.PropertyField(serializedFillMaterial, new GUIContent("Fill material", "The desired fill material for the letters. Don't forget to assign the font texture correctly"));

            customFont.CustomDetailMaterial = null;                     //Detail material is not compatible with texture gradient because both uses second uv chanell

            EditorGUILayout.HelpBox("Detail Material is not compatible with TextureGradient fill style. It will be automatically disabled", MessageType.Warning);

            break;
        }

        EditorGUILayout.EndVertical();

        // Shadow
        if (serializedEnableShadow.isInstantiatedPrefab)
        {
            SetBoldDefaultFont(serializedEnableShadow.prefabOverride);
        }

        EditorGUILayout.PropertyField(serializedEnableShadow, new GUIContent("Enable Shadow", "Enable/Disable shadow"));

        if (customFont.EnableShadow)         //Only show the options when enabled
        {
            EditorGUILayout.BeginVertical("box");

            if (serializedShadowColor.isInstantiatedPrefab)
            {
                SetBoldDefaultFont(serializedShadowColor.prefabOverride);
            }

            EditorGUILayout.PropertyField(serializedShadowColor, new GUIContent("Shadow color", "Sets the sahdow's color"));

            if (serializedShadowDistance.isInstantiatedPrefab)
            {
                SetBoldDefaultFont(serializedShadowDistance.prefabOverride);
            }

            serializedShadowDistance.vector3Value = EditorGUILayout.Vector3Field(new GUIContent("Shadow distance", "The distance between the main characters and its shadow"), serializedShadowDistance.vector3Value);

            EditorGUILayout.EndVertical();
        }


        //Outline
        if (serializedEnableOutline.isInstantiatedPrefab)
        {
            SetBoldDefaultFont(serializedEnableOutline.prefabOverride);
        }

        EditorGUILayout.PropertyField(serializedEnableOutline, new GUIContent("Enable Outline", "Enable/Disable the text's outline"));

        if (customFont.EnableOutline)         //Only show the options when enabled
        {
            EditorGUILayout.BeginVertical("box");

            if (serializedOutlineColor.isInstantiatedPrefab)
            {
                SetBoldDefaultFont(serializedOutlineColor.prefabOverride);
            }

            EditorGUILayout.PropertyField(serializedOutlineColor, new GUIContent("Outline color", "Sets the ouline color"));

            if (serializedOutlineWidth.isInstantiatedPrefab)
            {
                SetBoldDefaultFont(serializedOutlineWidth.prefabOverride);
            }

            EditorGUILayout.PropertyField(serializedOutlineWidth, new GUIContent("Outline width", "Sets the outline width"));

            if (serializedOutLineQuality.isInstantiatedPrefab)
            {
                SetBoldDefaultFont(serializedOutLineQuality.prefabOverride);
            }

            EditorGUILayout.PropertyField(serializedOutLineQuality, new GUIContent("High Quality", "Increase the number of vertex but gives better results"));

            EditorGUILayout.EndVertical();
        }

        #endregion

        #region buttons and info

        if (GUILayout.Button("Refresh"))
        {
            Debug.Log("Refreshing Text mesh");
            //customFont.RefreshMeshEditor(); //Because clicking the button produces a GUIChange this is done automaticcaly
        }

        if (GUILayout.Button("Refresh all"))
        {
            RefreshAllSceneText();
            //OnPlayModeChanged();
        }

        GUIStyle buttonStyleRed = new GUIStyle("button");
        buttonStyleRed.normal.textColor = Color.red;

        if (GUILayout.Button("Destroy Text component", buttonStyleRed))
        {
            Renderer   tempRenderer   = customFont.gameObject.GetComponent <Renderer>();
            MeshFilter tempMeshFilter = customFont.GetComponent <MeshFilter>();
            DestroyImmediate(customFont);
            DestroyImmediate(tempRenderer);
            DestroyImmediate(tempMeshFilter.sharedMesh);
            DestroyImmediate(tempMeshFilter);
            return;
        }


        textColor.normal.textColor = Color.green;
        EditorGUILayout.LabelField(string.Format("Vertex count {0}", customFont.GetVertexCount().ToString()), textColor);
        if (customFont.GetComponent <Renderer>().sharedMaterial != null)
        {
            if (customFont.GetComponent <Renderer>().sharedMaterial.mainTexture != null)
            {
                EditorGUILayout.LabelField(string.Format("Font Texture Size {0} x {1}", customFont.GetComponent <Renderer>().sharedMaterial.mainTexture.width.ToString(), customFont.GetComponent <Renderer>().sharedMaterial.mainTexture.height.ToString()), textColor);
            }
            else
            {
                textColor.normal.textColor = Color.red;
                EditorGUILayout.LabelField(string.Format("Font Texture Size {0}", "Texture is Null", textColor));
            }
        }


        #endregion

        #region prefab checks
        //Check if the prefab has changed to refresh the text
        bool checkCurrentPrefabModification = false;

        PropertyModification[] modifiedProperties = PrefabUtility.GetPropertyModifications((UnityEngine.Object)customFont);
        if (modifiedProperties != null && modifiedProperties.Length > 0)
        {
            for (int i = 0; i < modifiedProperties.Length; i++)
            {
                foreach (SerializedProperty serializerPropertyIterator in allSerializedProperties)
                {
                    if (serializerPropertyIterator.propertyPath == modifiedProperties[i].propertyPath)
                    {
                        wasPrefabModified = true;
                        checkCurrentPrefabModification = true;
                    }
                }
            }
        }
        else
        {
            checkCurrentPrefabModification = false;
        }

        if (wasPrefabModified && !checkCurrentPrefabModification)
        {
            RefreshAllSceneText();
            wasPrefabModified = false;
        }

        //Security check. If the mesh is null a prefab revert has been made
        if (customFont.GetComponent <MeshFilter>().sharedMesh == null)
        {
            customFont.RefreshMeshEditor();
        }

        #endregion

        serializedObject.ApplyModifiedProperties();

        //Track changes

        customFont.GUIChanged = GUI.changed;

        if (customFont.GUIChanged)
        {
            RefreshSelectedText();
            EditorUtility.SetDirty(customFont);
        }

        //If you undo with a multiple selection the GuiChange is not called.... So here it s a workaround

        if (Event.current.commandName == "UndoRedoPerformed")
        {
            RefreshSelectedText();
        }
    }
Esempio n. 4
0
    public override void OnInspectorGUI()
    {
        EditorGUIUtility.LookLikeInspector();
        DrawDefaultInspector();

        EasyFontTextMesh customFont = target as EasyFontTextMesh;

        SerializedObject serializedObject = new SerializedObject(customFont);

        SerializedProperty serializedText             = serializedObject.FindProperty("_privateProperties.text");
        SerializedProperty serializedFontType         = serializedObject.FindProperty("_privateProperties.font");
        SerializedProperty serializedFontFillMaterial = serializedObject.FindProperty("_privateProperties.customFillMaterial");
        SerializedProperty serializedFontSize         = serializedObject.FindProperty("_privateProperties.fontSize");
        SerializedProperty serializedCharacterSize    = serializedObject.FindProperty("_privateProperties.size");
        SerializedProperty serializedTextAnchor       = serializedObject.FindProperty("_privateProperties.textAnchor");
        SerializedProperty serializedTextAlignment    = serializedObject.FindProperty("_privateProperties.textAlignment");
        SerializedProperty serializedLineSpacing      = serializedObject.FindProperty("_privateProperties.lineSpacing");
        SerializedProperty serializedFontColorTop     = serializedObject.FindProperty("_privateProperties.fontColorTop");
        SerializedProperty serializedFontColorBottom  = serializedObject.FindProperty("_privateProperties.fontColorBottom");
        SerializedProperty serializedEnableShadow     = serializedObject.FindProperty("_privateProperties.enableShadow");
        SerializedProperty serializedShadowColor      = serializedObject.FindProperty("_privateProperties.shadowColor");
        SerializedProperty serializedShadowDistance   = serializedObject.FindProperty("_privateProperties.shadowDistance");
        SerializedProperty serializedEnableOutline    = serializedObject.FindProperty("_privateProperties.enableOutline");
        SerializedProperty serializedOutlineColor     = serializedObject.FindProperty("_privateProperties.outlineColor");
        SerializedProperty serializedOutlineWidth     = serializedObject.FindProperty("_privateProperties.outLineWidth");
        SerializedProperty serializedHQOutline        = serializedObject.FindProperty("_privateProperties.highQualityOutline");

        SerializedProperty[] allSerializedProperties = new SerializedProperty[17]
        {
            serializedText, serializedFontType, serializedFontFillMaterial, serializedFontSize, serializedCharacterSize, serializedTextAnchor, serializedTextAlignment,
            serializedLineSpacing, serializedFontColorTop, serializedFontColorBottom, serializedEnableShadow, serializedShadowColor, serializedShadowDistance,
            serializedEnableOutline, serializedOutlineColor, serializedOutlineWidth, serializedHQOutline
        };

        #region properties


        //Text
        if (serializedText.isInstantiatedPrefab)
        {
            SetBoldDefaultFont(serializedText.prefabOverride);
        }

        EditorGUILayout.LabelField(new GUIContent("Text", "This is the text that is going to be used"));
        EditorGUILayout.BeginVertical("box");
        customFont.Text = EditorGUILayout.TextArea(customFont.Text);
        //customFont.Text =  EditorGUILayout.TextField("Text", customFont.Text); //Old way of inserting text

        EditorGUILayout.EndVertical();



        //Font

        if (serializedFontType.isInstantiatedPrefab)
        {
            SetBoldDefaultFont(serializedFontType.prefabOverride);
        }


        customFont.FontType = EditorGUILayout.ObjectField(new GUIContent("Font", "The desired font type"), customFont.FontType, typeof(Font), false) as Font;



        if (customFont.FontType == null)
        {
            customFont.FontType = Resources.GetBuiltinResource(typeof(Font), "Arial.ttf") as Font;
        }

        //Font material
        if (serializedFontFillMaterial.isInstantiatedPrefab)
        {
            SetBoldDefaultFont(serializedFontFillMaterial.prefabOverride);
        }

        customFont.CustomFillMaterial = EditorGUILayout.ObjectField(new GUIContent("Custom Fill material", "Use a material different form the one deffined by the font"), customFont.CustomFillMaterial, typeof(Material), false) as Material;

        if (customFont.FontType == null)
        {
            customFont.FontType = Resources.GetBuiltinResource(typeof(Font), "Arial.ttf") as Font;
        }

        //Font Size
        if (serializedFontSize.isInstantiatedPrefab)
        {
            SetBoldDefaultFont(serializedFontSize.prefabOverride);
        }

        customFont.FontSize = EditorGUILayout.IntField(new GUIContent("Font size", "This is the actual font size. It will set the texture size"), customFont.FontSize);

        //CharacterSize
        if (serializedCharacterSize.isInstantiatedPrefab)
        {
            SetBoldDefaultFont(serializedCharacterSize.prefabOverride);
        }

        customFont.Size = EditorGUILayout.FloatField(new GUIContent("Character size", "How big the characters are going to be renderer"), customFont.Size);


        //Text acnhor
        if (serializedTextAnchor.isInstantiatedPrefab)
        {
            SetBoldDefaultFont(serializedTextAnchor.prefabOverride);
        }

        customFont.Textanchor = (EasyFontTextMesh.TEXT_ANCHOR)EditorGUILayout.EnumPopup(new GUIContent("Text Anchor", "Position of the texts pivot's point"), customFont.Textanchor);

        //Text alignment
        if (serializedTextAlignment.isInstantiatedPrefab)
        {
            SetBoldDefaultFont(serializedTextAlignment.prefabOverride);
        }

        customFont.Textalignment = (EasyFontTextMesh.TEXT_ALIGNMENT)EditorGUILayout.EnumPopup(new GUIContent("Text alignment", "Line alignment"), customFont.Textalignment);

        //Line spacing
        if (serializedLineSpacing.isInstantiatedPrefab)
        {
            SetBoldDefaultFont(serializedLineSpacing.prefabOverride);
        }

        customFont.LineSpacing = EditorGUILayout.FloatField(new GUIContent("Line spacing", "Distance between lines"), customFont.LineSpacing);

        // Font color
        if (serializedFontColorTop.isInstantiatedPrefab)
        {
            SetBoldDefaultFont(serializedFontColorTop.prefabOverride);
        }

        customFont.FontColorTop = EditorGUILayout.ColorField(new GUIContent("Top Color", "Color for the top"), customFont.FontColorTop);

        if (serializedFontColorBottom.isInstantiatedPrefab)
        {
            SetBoldDefaultFont(serializedFontColorBottom.prefabOverride);
        }

        customFont.FontColorBottom = EditorGUILayout.ColorField(new GUIContent("Bottom Color", "Color for the bottom"), customFont.FontColorBottom);


        // Shadow
        if (serializedEnableShadow.isInstantiatedPrefab)
        {
            SetBoldDefaultFont(serializedEnableShadow.prefabOverride);
        }

        customFont.EnableShadow = EditorGUILayout.Toggle(new GUIContent("Enable Shadow", "Enable/Disable shadow"), customFont.EnableShadow);

        if (customFont.EnableShadow)         //Only show the options when enabled
        {
            EditorGUILayout.BeginVertical("box");

            if (serializedShadowColor.isInstantiatedPrefab)
            {
                SetBoldDefaultFont(serializedShadowColor.prefabOverride);
            }

            customFont.ShadowColor = EditorGUILayout.ColorField(new GUIContent("Shadow color", "Sets the sahdow's color"), customFont.ShadowColor);

            if (serializedShadowDistance.isInstantiatedPrefab)
            {
                SetBoldDefaultFont(serializedShadowDistance.prefabOverride);
            }

            customFont.ShadowDistance = EditorGUILayout.Vector3Field("Shadow distance", customFont.ShadowDistance);

            EditorGUILayout.EndVertical();
        }


        //Outline
        if (serializedEnableOutline.isInstantiatedPrefab)
        {
            SetBoldDefaultFont(serializedEnableOutline.prefabOverride);
        }

        customFont.EnableOutline = EditorGUILayout.Toggle(new GUIContent("Enable Outline", "Enable/Disable the text's outline"), customFont.EnableOutline);

        if (customFont.EnableOutline)         //Only show the options when enabled
        {
            EditorGUILayout.BeginVertical("box");

            if (serializedOutlineColor.isInstantiatedPrefab)
            {
                SetBoldDefaultFont(serializedOutlineColor.prefabOverride);
            }

            customFont.OutlineColor = EditorGUILayout.ColorField(new GUIContent("Outline color", "Sets the ouline color"), customFont.OutlineColor);

            if (serializedOutlineWidth.isInstantiatedPrefab)
            {
                SetBoldDefaultFont(serializedOutlineWidth.prefabOverride);
            }

            customFont.OutLineWidth = EditorGUILayout.FloatField(new GUIContent("Outline width", "Sets the outline width"), customFont.OutLineWidth);

            if (serializedHQOutline.isInstantiatedPrefab)
            {
                SetBoldDefaultFont(serializedHQOutline.prefabOverride);
            }

            customFont.HighQualityOutline = EditorGUILayout.Toggle(new GUIContent("High Quality", "Increase the number of vertex but gives better results"), customFont.HighQualityOutline);

            EditorGUILayout.EndVertical();
        }

        #endregion

        #region buttons and info

        if (GUILayout.Button("Refresh"))
        {
            Debug.Log("Refreshing Text mesh");
            customFont.RefreshMeshEditor();
        }

        if (GUILayout.Button("Refresh all"))
        {
            RefreshAllSceneText();
            //OnPlayModeChanged();
        }

        GUIStyle buttonStyleRed = new GUIStyle("button");
        buttonStyleRed.normal.textColor = Color.red;

        if (GUILayout.Button("Destroy Text component", buttonStyleRed))
        {
            Renderer   tempRenderer   = customFont.gameObject.renderer;
            MeshFilter tempMeshFilter = customFont.GetComponent <MeshFilter>();
            DestroyImmediate(customFont);
            DestroyImmediate(tempRenderer);
            DestroyImmediate(tempMeshFilter.sharedMesh);
            DestroyImmediate(tempMeshFilter);
            return;
        }

        GUIStyle greenText = new GUIStyle();
        greenText.normal.textColor = Color.green;
        EditorGUILayout.LabelField(string.Format("Vertex count {0}", customFont.GetVertexCount().ToString()), greenText);
        EditorGUILayout.LabelField(string.Format("Font Texture Size {0} x {1}", customFont.renderer.sharedMaterial.mainTexture.width.ToString(), customFont.renderer.sharedMaterial.mainTexture.height.ToString()), greenText);


        #endregion

        #region prefab checks
        //Check if the prefab has changed to refresh the text
        bool checkCurrentPrefabModification = false;

        PropertyModification[] modifiedProperties = PrefabUtility.GetPropertyModifications((Object)customFont);
        if (modifiedProperties != null && modifiedProperties.Length > 0)
        {
            for (int i = 0; i < modifiedProperties.Length; i++)
            {
                foreach (SerializedProperty serializerPropertyIterator in allSerializedProperties)
                {
                    if (serializerPropertyIterator.propertyPath == modifiedProperties[i].propertyPath)
                    {
                        wasPrefabModified = true;
                        checkCurrentPrefabModification = true;
                    }
                }
            }
        }
        else
        {
            checkCurrentPrefabModification = false;
        }

        if (wasPrefabModified && !checkCurrentPrefabModification)
        {
            RefreshAllSceneText();
            wasPrefabModified = false;
        }

        //Security check. If the mesh is null a prefab revert has been made
        if (customFont.GetComponent <MeshFilter>().sharedMesh == null)
        {
            customFont.RefreshMeshEditor();
        }

        #endregion
        customFont.GUIChanged = GUI.changed;
        if (customFont.GUIChanged)
        {
            customFont.RefreshMeshEditor();
            EditorUtility.SetDirty(customFont);
        }
    }
    private void SetCursorPosition()
    {
        if (inputLabel != null)
        {
            float multiplier   = 1;
            float cursorOffset = 0.002f;
            if (inputLabel.anchor == TextAnchor.MiddleLeft || inputLabel.anchor == TextAnchor.LowerLeft || inputLabel.anchor == TextAnchor.UpperLeft)
            {
                multiplier = 2;
            }
            else if (inputLabel.anchor == TextAnchor.MiddleRight || inputLabel.anchor == TextAnchor.LowerRight || inputLabel.anchor == TextAnchor.UpperRight)
            {
                multiplier   = -2;
                cursorOffset = 0.012f;
            }

            if (text.EndsWith(" "))
            {
                tk2dFontChar chr;
                if (inputLabel.font.inst.useDictionary)
                {
                    chr = inputLabel.font.inst.charDict[' '];
                }
                else
                {
                    chr = inputLabel.font.inst.chars[' '];
                }

                cursorOffset += chr.advance * inputLabel.scale.x / 2;
            }
            cursor.transform.localPosition = new Vector3(inputLabel.transform.localPosition.x + (inputLabel.GetComponent <Renderer>().bounds.extents.x + cursorOffset) * multiplier, cursor.transform.localPosition.y, cursor.transform.localPosition.z);
            return;
        }

        if (inputLabel2 != null)
        {
            float multiplier   = 1;
            float cursorOffset = 1f;
            if (inputLabel2.Textanchor == EasyFontTextMesh.TEXT_ANCHOR.MiddleLeft || inputLabel2.Textanchor == EasyFontTextMesh.TEXT_ANCHOR.LowerLeft || inputLabel2.Textanchor == EasyFontTextMesh.TEXT_ANCHOR.UpperLeft)
            {
                multiplier = 2;
            }
            else if (inputLabel2.Textanchor == EasyFontTextMesh.TEXT_ANCHOR.MiddleRight || inputLabel2.Textanchor == EasyFontTextMesh.TEXT_ANCHOR.LowerRight || inputLabel2.Textanchor == EasyFontTextMesh.TEXT_ANCHOR.UpperRight)
            {
                multiplier   = -2;
                cursorOffset = 0.012f;
            }
            cursor.transform.localPosition = new Vector3(inputLabel2.transform.localPosition.x + (inputLabel2.GetComponent <Renderer>().bounds.extents.x + cursorOffset) * multiplier, cursor.transform.localPosition.y, cursor.transform.localPosition.z);
            return;
        }

        tk2dUIBaseItemControl.ChangeGameObjectActiveState(cursor, false);
    }