123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 |
- using System;
- using System.IO;
- using System.Linq;
- using System.Text;
- using UnityEditor;
- using UnityEditor.SceneManagement;
- using UnityEngine;
- using UnityEngine.UI;
- using Object = UnityEngine.Object;
- namespace MPUIKIT.Editor {
- public static class MPEditorUtility {
- [MenuItem("GameObject/UI/MPImage")]
- public static void AddMPImageObject() {
- GameObject g = new GameObject {name = "MPImage"};
- Transform parent = GetParentTransform();
- g.transform.SetParent(parent, false);
- g.AddComponent<MPImage>();
- Selection.activeGameObject = g;
-
- Undo.RegisterCreatedObjectUndo(g, "MPImage Created");
- EditorUtility.SetDirty(g);
- }
-
- [MenuItem("GameObject/UI/MPImage Basic")]
- public static void AddMPImageBasicObject() {
- GameObject g = new GameObject {name = "MPImageBasic"};
- Transform parent = GetParentTransform();
- g.transform.SetParent(parent, false);
- g.AddComponent<MPImageBasic>();
- Selection.activeGameObject = g;
-
- Undo.RegisterCreatedObjectUndo(g, "MPImage Basic Created");
- EditorUtility.SetDirty(g);
- }
- private static Transform GetParentTransform()
- {
- Transform parent;
- if (Selection.activeGameObject != null &&
- Selection.activeGameObject.GetComponentInParent<Canvas>() != null)
- {
- parent = Selection.activeGameObject.transform;
- }
- else
- {
- Canvas c = GetCanvas();
- AddAdditionalShaderChannelsToCanvas(c);
- parent = c.transform;
- }
- return parent;
- }
- private static Canvas GetCanvas()
- {
- StageHandle handle = StageUtility.GetCurrentStageHandle();
- if (!handle.FindComponentOfType<Canvas>())
- {
- EditorApplication.ExecuteMenuItem("GameObject/UI/Canvas");
- }
- Canvas c = handle.FindComponentOfType<Canvas>();
- return c;
- }
- [MenuItem("CONTEXT/Image/Replace with MPImage")]
- public static void ReplaceWithMPImage(MenuCommand command) {
- if(command.context is MPImage) return;
- if (command.context is MPImageBasic) {
- // Convert MPImageBasic to MPImage
- MPImageBasic img = (MPImageBasic) command.context;
- GameObject obj = img.gameObject;
- Object.DestroyImmediate(img);
- obj.AddComponent<MPImage>();
- EditorUtility.SetDirty(obj);
- }
- else {
- Image img = (Image) command.context;
- GameObject obj = img.gameObject;
- Object.DestroyImmediate(img);
- obj.AddComponent<MPImage>();
- EditorUtility.SetDirty(obj);
- }
-
- }
-
- [MenuItem("CONTEXT/Image/Replace with MPImage Basic")]
- public static void ReplaceWithMPImageBasic(MenuCommand command) {
- if(command.context is MPImageBasic) return;
- if (command.context is MPImage) {
- // Convert MPImage to MPImageBasic
- MPImage img = (MPImage) command.context;
- GameObject obj = img.gameObject;
- Object.DestroyImmediate(img);
- obj.AddComponent<MPImageBasic>();
- EditorUtility.SetDirty(obj);
- }
- else {
- Image img = (Image) command.context;
- GameObject obj = img.gameObject;
- Object.DestroyImmediate(img);
- obj.AddComponent<MPImageBasic>();
- EditorUtility.SetDirty(obj);
- }
- }
- internal static void AddAdditionalShaderChannelsToCanvas(Canvas c) {
- AdditionalCanvasShaderChannels additionalShaderChannels = c.additionalShaderChannels;
- additionalShaderChannels |= AdditionalCanvasShaderChannels.TexCoord1;
- additionalShaderChannels |= AdditionalCanvasShaderChannels.TexCoord2;
- c.additionalShaderChannels = additionalShaderChannels;
- }
- internal static bool HasAdditionalShaderChannels(Canvas c) {
- AdditionalCanvasShaderChannels asc = c.additionalShaderChannels;
- return (asc & AdditionalCanvasShaderChannels.TexCoord1) != 0 &&
- (asc & AdditionalCanvasShaderChannels.TexCoord2) != 0;
- }
-
- public static void CornerRadiusModeGUI(Rect rect, ref SerializedProperty property, string[] toolBarHeading,
- string label = "Corner Radius") {
- bool boolVal = property.boolValue;
- Rect labelRect = new Rect(rect.x, rect.y, EditorGUIUtility.labelWidth, rect.height);
- Rect toolBarRect = new Rect(rect.x + EditorGUIUtility.labelWidth, rect.y,
- rect.width - EditorGUIUtility.labelWidth, rect.height);
- EditorGUI.BeginChangeCheck();
- {
- EditorGUI.showMixedValue = property.hasMultipleDifferentValues;
- EditorGUI.LabelField(labelRect, label);
- boolVal = GUI.Toolbar(toolBarRect, boolVal ? 1 : 0, toolBarHeading) == 1;
- EditorGUI.showMixedValue = false;
- }
- if (EditorGUI.EndChangeCheck()) {
- property.boolValue = boolVal;
- }
- }
-
- private static Sprite _emptySprite;
- internal static Sprite EmptySprite {
- get {
- if (_emptySprite == null) {
- _emptySprite = Resources.Load<Sprite>("mpui_default_empty_sprite");
- }
- return _emptySprite;
- }
- }
-
- internal static string FindMPUIKitRootDirectory()
- {
- string guid = AssetDatabase.FindAssets("MPImage t:Shader").FirstOrDefault();
- string path = AssetDatabase.GUIDToAssetPath(guid);
- if(string.IsNullOrEmpty(path)) return String.Empty;
- string[] directories = path.Split(new[] {Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar});
- StringBuilder sb = new StringBuilder();
- for (int i = 0; i < directories.Length; i++)
- {
- sb.Append(directories[i]);
- sb.Append(Path.DirectorySeparatorChar);
- if(directories[i].Equals("MPUIKit", StringComparison.OrdinalIgnoreCase))
- break;
- }
- return sb.ToString();
- }
- }
- }
|