- using System.IO;
- using UnityEditor;
- using UnityEngine;
- namespace Ink.UnityIntegration {
- [InitializeOnLoad]
- public class InkBrowserIcons {
- private static bool isRetina {
- get {
- float unityVersion = float.Parse(Application.unityVersion.Substring (0, 3));
- return Application.platform == RuntimePlatform.OSXEditor && unityVersion >= 5.4f;
- }
- }
- private const float largeIconSize = 64f;
- private static Texture2D _inkFileIcon;
- public static Texture2D inkFileIcon {
- get {
- if(_inkFileIcon == null) {
- if(isRetina) {
- _inkFileIcon = Resources.Load<Texture2D>("InkFileIcon-retina");
- } else {
- _inkFileIcon = Resources.Load<Texture2D>("InkFileIcon");
- }
- }
- return _inkFileIcon;
- }
- }
- private static Texture2D _inkFileIconLarge;
- public static Texture2D inkFileIconLarge {
- get {
- if(_inkFileIconLarge == null) {
- _inkFileIconLarge = Resources.Load<Texture2D>("InkFileIcon-large");
- }
- return _inkFileIconLarge;
- }
- }
- private static Texture2D _errorIcon;
- public static Texture2D errorIcon {
- get {
- if(_errorIcon == null) {
- _errorIcon = Resources.Load<Texture2D>("InkErrorIcon");
- }
- return _errorIcon;
- }
- }
- private static Texture2D _warningIcon;
- public static Texture2D warningIcon {
- get {
- if(_warningIcon == null) {
- _warningIcon = Resources.Load<Texture2D>("InkWarningIcon");
- }
- return _warningIcon;
- }
- }
- private static Texture2D _todoIcon;
- public static Texture2D todoIcon {
- get {
- if(_todoIcon == null) {
- _todoIcon = Resources.Load<Texture2D>("InkTodoIcon");
- }
- return _todoIcon;
- }
- }
- private static Texture2D _manualIcon;
- public static Texture2D manualIcon {
- get {
- if(_manualIcon == null) {
- _manualIcon = Resources.Load<Texture2D>("InkCompileManualIcon");
- }
- return _manualIcon;
- }
- }
- private static Texture2D _childIcon;
- public static Texture2D childIcon {
- get {
- if(_childIcon == null) {
- _childIcon = Resources.Load<Texture2D>("InkChildIcon");
- }
- return _childIcon;
- }
- }
- private static Texture2D _childIconLarge;
- public static Texture2D childIconLarge {
- get {
- if(_childIconLarge == null) {
- _childIconLarge = Resources.Load<Texture2D>("InkChildIcon-Large");
- }
- return _childIconLarge;
- }
- }
- private static Texture2D _unknownFileIcon;
- public static Texture2D unknownFileIcon {
- get {
- if(_unknownFileIcon == null) {
- _unknownFileIcon = Resources.Load<Texture2D>("InkUnknownFileIcon");
- }
- return _unknownFileIcon;
- }
- }
- static InkBrowserIcons() {
- EditorApplication.projectWindowItemOnGUI += OnDrawProjectWindowItem;
- }
- static void OnDrawProjectWindowItem(string guid, Rect rect) {
- string path = AssetDatabase.GUIDToAssetPath(guid);
- if (InkEditorUtils.IsInkFile(path)) {
- DefaultAsset asset = AssetDatabase.LoadAssetAtPath<DefaultAsset>(path);
- DrawInkFile(InkLibrary.GetInkFileWithFile(asset), rect);
- }
- }
- static void DrawInkFile (InkFile inkFile, Rect rect) {
- bool isSmall = rect.width > rect.height;
- if (isSmall) {
- rect.width = rect.height;
- } else {
- rect.height = rect.width;
- }
- if (rect.width >= largeIconSize) {
- DrawLarge(inkFile, rect);
- } else {
- DrawSmall(inkFile, rect);
- }
- }
- static void DrawLarge (InkFile inkFile, Rect rect) {
- var offset = (rect.width - largeIconSize) * 0.5f;
- rect = new Rect(rect.x + offset, rect.y + offset, largeIconSize, largeIconSize);
- if(inkFileIconLarge != null)
- GUI.DrawTexture(rect, inkFileIconLarge);
- Rect miniRect = new Rect(rect.center, rect.size * 0.5f);
- if(inkFile == null) {
- if(unknownFileIcon != null) {
- GUI.DrawTexture(miniRect, unknownFileIcon);
- }
- } else {
- if(inkFile.hasErrors && errorIcon != null) {
- GUI.DrawTexture(miniRect, errorIcon);
- } else if(inkFile.hasWarnings && warningIcon != null) {
- GUI.DrawTexture(miniRect, warningIcon);
- } else if(inkFile.hasTodos && todoIcon != null) {
- GUI.DrawTexture(miniRect, todoIcon);
- }
- if(inkFile.isIncludeFile && childIcon != null) {
- GUI.DrawTexture(new Rect(rect.x, rect.y, rect.width * 0.5f, rect.height * 0.5f), childIconLarge);
- }
- }
- }
- static void DrawSmall (InkFile inkFile, Rect rect) {
- if(inkFileIcon != null)
- GUI.DrawTexture(rect, inkFileIcon);
- if(inkFile == null) {
- if(unknownFileIcon != null) {
- GUI.DrawTexture(new Rect(rect.x, rect.y, unknownFileIcon.width, unknownFileIcon.height), unknownFileIcon);
- }
- } else {
- if (inkFile.isMaster) {
- if (!InkSettings.instance.ShouldCompileInkFileAutomatically(inkFile)) {
- GUI.DrawTexture(new Rect(rect.x, rect.y + rect.size.y * 0.5f, rect.size.x * 0.5f, rect.size.y * 0.5f), manualIcon);
-
- }
-
- Rect miniRect = new Rect(rect.center, rect.size * 0.5f);
- if(inkFile.hasErrors && errorIcon != null) {
- GUI.DrawTexture(miniRect, errorIcon);
- } else if(inkFile.hasWarnings && warningIcon != null) {
- GUI.DrawTexture(miniRect, warningIcon);
- } else if(inkFile.hasTodos && todoIcon != null) {
- GUI.DrawTexture(miniRect, todoIcon);
- }
- }
- if(inkFile.isIncludeFile && childIcon != null) {
- GUI.DrawTexture(new Rect(rect.x, rect.y, childIcon.width, childIcon.height), childIcon);
- }
- }
- }
- }
- }