miepzerino
2025-03-30 d2ab30e7a69bfe7efda63ae75812207377917bd3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
using System.Collections.Generic;
using System.IO;
using System.Reflection;
using System.Text.RegularExpressions;
using UnityEngine;
using UnityEditor;
 
namespace Flexalon.Editor
{
    internal static class WindowUtil
    {
        private static readonly string _projectMeta = "5325f2ad02f14e242b86eb4bb0fcb5ee";
 
        private static string _version;
 
        private static Texture2D _flexalonIcon;
        private static Texture2D _proximaIcon;
        private static Texture2D _copilotIcon;
 
        public static void CenterOnEditor(EditorWindow window)
        {
#if UNITY_2020_1_OR_NEWER
            var main = EditorGUIUtility.GetMainWindowPosition();
            var pos = window.position;
            float w = (main.width - pos.width) * 0.5f;
            float h = (main.height - pos.height) * 0.5f;
            pos.x = main.x + w;
            pos.y = main.y + h;
            window.position = pos;
#endif
        }
 
        public static string GetVersion()
        {
            if (_version == null)
            {
                var version = AssetDatabase.GUIDToAssetPath(_projectMeta);
                var lines = File.ReadAllText(version);
                var rx = new Regex("\"version\": \"(.*?)\"");
                _version = rx.Match(lines).Groups[1].Value;
            }
 
            return _version;
        }
 
        public static bool DrawProximaButton(float width, GUIStyle style)
        {
            if (!_proximaIcon)
            {
                var proximaIconPath = AssetDatabase.GUIDToAssetPath("34efc6ae99ff42f438800428a52c50b5");
                _proximaIcon = AssetDatabase.LoadAssetAtPath<Texture2D>(proximaIconPath);
            }
 
            return GUILayout.Button(_proximaIcon, style, GUILayout.Width(width), GUILayout.Height(width * 0.337f));
        }
 
        public static bool DrawCopilotButton(float width, GUIStyle style)
        {
            if (!_copilotIcon)
            {
                var iconPath = AssetDatabase.GUIDToAssetPath("96aaefe6c810ba6469d7e7ce04421e94");
                _copilotIcon = AssetDatabase.LoadAssetAtPath<Texture2D>(iconPath);
            }
 
            return GUILayout.Button(_copilotIcon, style, GUILayout.Width(width), GUILayout.Height(width * 0.4023f));
        }
 
        public static List<string> GetInstalledLayouts()
        {
            var layouts = new List<string>();
            if (Assembly.GetAssembly(typeof(Flexalon)).GetType("Flexalon.FlexalonAlignLayout") != null)
            {
                layouts.Add("align");
            }
 
            if (Assembly.GetAssembly(typeof(Flexalon)).GetType("Flexalon.FlexalonCircleLayout") != null)
            {
                layouts.Add("circle");
            }
 
            if (Assembly.GetAssembly(typeof(Flexalon)).GetType("Flexalon.FlexalonConstraint") != null)
            {
                layouts.Add("constraint");
            }
 
            if (Assembly.GetAssembly(typeof(Flexalon)).GetType("Flexalon.FlexalonCurveLayout") != null)
            {
                layouts.Add("curve");
            }
 
            if (Assembly.GetAssembly(typeof(Flexalon)).GetType("Flexalon.FlexalonFlexibleLayout") != null)
            {
                layouts.Add("flexible");
            }
 
            if (Assembly.GetAssembly(typeof(Flexalon)).GetType("Flexalon.FlexalonGridLayout") != null)
            {
                layouts.Add("grid");
            }
 
            if (Assembly.GetAssembly(typeof(Flexalon)).GetType("Flexalon.FlexalonRandomLayout") != null)
            {
                layouts.Add("random");
            }
 
            if (Assembly.GetAssembly(typeof(Flexalon)).GetType("Flexalon.FlexalonShapeLayout") != null)
            {
                layouts.Add("shape");
            }
 
            return layouts;
        }
 
        public static bool AllLayoutsInstalled()
        {
            return GetInstalledLayouts().Count == 8;
        }
    }
}