|
|
- using UnityEngine;
- using UnityEditor;
- using System.Collections;
-
-
- namespace TMPro.EditorUtilities
- {
-
- [CustomPropertyDrawer(typeof(TMP_Sprite))]
- public class SpriteInfoDrawer : PropertyDrawer
- {
- public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
- {
- //SerializedProperty prop_fileID = property.FindPropertyRelative("fileID");
- SerializedProperty prop_id = property.FindPropertyRelative("id");
- SerializedProperty prop_name = property.FindPropertyRelative("name");
- SerializedProperty prop_hashCode = property.FindPropertyRelative("hashCode");
- SerializedProperty prop_unicode = property.FindPropertyRelative("unicode");
- SerializedProperty prop_x = property.FindPropertyRelative("x");
- SerializedProperty prop_y = property.FindPropertyRelative("y");
- SerializedProperty prop_width = property.FindPropertyRelative("width");
- SerializedProperty prop_height = property.FindPropertyRelative("height");
- SerializedProperty prop_xOffset = property.FindPropertyRelative("xOffset");
- SerializedProperty prop_yOffset = property.FindPropertyRelative("yOffset");
- SerializedProperty prop_xAdvance = property.FindPropertyRelative("xAdvance");
- SerializedProperty prop_scale = property.FindPropertyRelative("scale");
- SerializedProperty prop_sprite = property.FindPropertyRelative("sprite");
-
- // Get a reference to the sprite texture
- Texture tex = (property.serializedObject.targetObject as TMP_SpriteAsset).spriteSheet;
-
- // Return if we don't have a texture assigned to the sprite asset.
- if (tex == null)
- {
- Debug.LogWarning("Please assign a valid Sprite Atlas texture to the [" + property.serializedObject.targetObject.name + "] Sprite Asset.", property.serializedObject.targetObject);
- return;
- }
-
- Vector2 spriteTexPosition = new Vector2(position.x, position.y);
- Vector2 spriteSize = new Vector2(65, 65);
- if (prop_width.floatValue >= prop_height.floatValue)
- {
- spriteSize.y = prop_height.floatValue * spriteSize.x / prop_width.floatValue;
- spriteTexPosition.y += (spriteSize.x - spriteSize.y) / 2;
- }
- else
- {
- spriteSize.x = prop_width.floatValue * spriteSize.y / prop_height.floatValue;
- spriteTexPosition.x += (spriteSize.y - spriteSize.x) / 2;
- }
-
- // Compute the normalized texture coordinates
- Rect texCoords = new Rect(prop_x.floatValue / tex.width, prop_y.floatValue / tex.height, prop_width.floatValue / tex.width, prop_height.floatValue / tex.height);
- GUI.DrawTextureWithTexCoords(new Rect(spriteTexPosition.x + 5, spriteTexPosition.y + 2.5f, spriteSize.x, spriteSize.y), tex, texCoords, true);
-
- // We get Rect since a valid position may not be provided by the caller.
- Rect rect = new Rect(position.x, position.y, position.width, 49);
- rect.x += 70;
-
- bool isEnabled = GUI.enabled;
- GUI.enabled = true;
- EditorGUIUtility.labelWidth = 30f;
- EditorGUI.LabelField(new Rect(rect.x + 5f, rect.y, 65f, 18), new GUIContent("ID:"), new GUIContent(prop_id.intValue.ToString()));
-
- GUI.enabled = isEnabled;
- EditorGUI.BeginChangeCheck();
- EditorGUIUtility.labelWidth = 55f;
- GUI.SetNextControlName("Unicode Input");
- string unicode = EditorGUI.TextField(new Rect(rect.x + 75f, rect.y, 105, 18), "Unicode:", prop_unicode.intValue.ToString("X"));
-
- if (GUI.GetNameOfFocusedControl() == "Unicode Input")
- {
- //Filter out unwanted characters.
- char chr = Event.current.character;
- if ((chr < '0' || chr > '9') && (chr < 'a' || chr > 'f') && (chr < 'A' || chr > 'F'))
- {
- Event.current.character = '\0';
- }
-
- if (EditorGUI.EndChangeCheck())
- {
- prop_unicode.intValue = TMP_TextUtilities.StringToInt(unicode);
-
- property.serializedObject.ApplyModifiedProperties();
-
- TMP_SpriteAsset spriteAsset = property.serializedObject.targetObject as TMP_SpriteAsset;
- spriteAsset.UpdateLookupTables();
- }
- }
-
-
- EditorGUIUtility.labelWidth = 45f;
- EditorGUI.BeginChangeCheck();
- EditorGUI.PropertyField(new Rect(rect.x + 185f, rect.y, rect.width - 260, 18), prop_name, new GUIContent("Name: " + prop_name.stringValue));
- if (EditorGUI.EndChangeCheck())
- {
- Sprite sprite = prop_sprite.objectReferenceValue as Sprite;
- if (sprite != null)
- sprite.name = prop_name.stringValue;
-
- // Recompute hashCode for new name
- prop_hashCode.intValue = TMP_TextUtilities.GetSimpleHashCode(prop_name.stringValue);
- // Check to make sure for duplicates
- property.serializedObject.ApplyModifiedProperties();
- // Dictionary needs to be updated since HashCode has changed.
- //TMP_StyleSheet.Instance.LoadStyleDictionary();
- }
-
- EditorGUIUtility.labelWidth = 30f;
- EditorGUIUtility.fieldWidth = 10f;
-
- //GUI.enabled = false;
- float width = (rect.width - 75f) / 4;
- EditorGUI.PropertyField(new Rect(rect.x + 5f + width * 0, rect.y + 22, width - 5f, 18), prop_x, new GUIContent("X:"));
- EditorGUI.PropertyField(new Rect(rect.x + 5f + width * 1, rect.y + 22, width - 5f, 18), prop_y, new GUIContent("Y:"));
- EditorGUI.PropertyField(new Rect(rect.x + 5f + width * 2, rect.y + 22, width - 5f, 18), prop_width, new GUIContent("W:"));
- EditorGUI.PropertyField(new Rect(rect.x + 5f + width * 3, rect.y + 22, width - 5f, 18), prop_height, new GUIContent("H:"));
-
- //GUI.enabled = true;
-
- EditorGUI.BeginChangeCheck();
- EditorGUI.PropertyField(new Rect(rect.x + 5f + width * 0, rect.y + 44, width - 5f, 18), prop_xOffset, new GUIContent("OX:"));
- EditorGUI.PropertyField(new Rect(rect.x + 5f + width * 1, rect.y + 44, width - 5f, 18), prop_yOffset, new GUIContent("OY:"));
- EditorGUI.PropertyField(new Rect(rect.x + 5f + width * 2, rect.y + 44, width - 5f, 18), prop_xAdvance, new GUIContent("Adv."));
- EditorGUI.PropertyField(new Rect(rect.x + 5f + width * 3, rect.y + 44, width - 5f, 18), prop_scale, new GUIContent("SF."));
- if (EditorGUI.EndChangeCheck())
- {
- //Sprite sprite = prop_sprite.objectReferenceValue as Sprite;
- //sprite = Sprite.Create(sprite.texture, sprite.rect, new Vector2(0.1f, 0.8f));
- //prop_sprite.objectReferenceValue = sprite;
- //Debug.Log(sprite.bounds);
- }
- }
-
-
- //public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
- //{
- // return 40f;
- //}
-
-
- }
- }
|