void fixAtlasFolders(ref retinaProAtlas atlasItem) { for (int i = 0; i < retinaProDataSerialize.sharedInstance.deviceList.Count; i++) { retinaProDevice di = retinaProDataSerialize.sharedInstance.deviceList[i]; if (!di.isDeviceValid()) { continue; } string reqPath = retinaProConfig.atlasTextureFolder + di.name + "/" + atlasItem.atlasName; DirectoryInfo dinfo = new DirectoryInfo(retinaProFileLock.baseDataPath + reqPath); if (dinfo == null || !dinfo.Exists) { dinfo.Create(); } } }
bool showFoldersUI(ref retinaProAtlas atlasItem) { if (atlasItem == null) { return(false); } bool valid = true; for (int i = 0; i < retinaProDataSerialize.sharedInstance.deviceList.Count; i++) { retinaProDevice di = retinaProDataSerialize.sharedInstance.deviceList[i]; if (!di.isDeviceValid()) { continue; } string reqPath = retinaProConfig.atlasTextureFolder + di.name + "/" + atlasItem.atlasName; DirectoryInfo dinfo = new DirectoryInfo(retinaProFileLock.baseDataPath + reqPath); if (dinfo != null && dinfo.Exists) { continue; } valid = false; GUILayout.BeginHorizontal(); GUILayout.Label("", GUILayout.Width(50f)); Color col = GUI.color; GUI.color = new Color(1f, 0.4f, 0.4f, 1f); GUILayout.Label("Add folder: " + reqPath); GUI.color = col; GUILayout.EndHorizontal(); } return(valid); }
bool showFilesUI(ref retinaProAtlas atlasItem) { if (atlasItem.atlasName == null || atlasItem.atlasName.Length == 0) { return(false); } bool valid = true; List <FileInfo> fisLast = null; FileInfo [] fontImageFilesLast = null; FileInfo [] fontTxtFilesLast = null; for (int i = 0; i < retinaProDataSerialize.sharedInstance.deviceList.Count; i++) { retinaProDevice di = retinaProDataSerialize.sharedInstance.deviceList[i]; if (!di.isDeviceValid()) { continue; } string reqPath = retinaProConfig.atlasTextureFolder + di.name + "/" + atlasItem.atlasName; DirectoryInfo dinfo = new DirectoryInfo(retinaProFileLock.baseDataPath + reqPath); if (dinfo == null || !dinfo.Exists) { continue; } if (atlasItem.isFont) { FileInfo [] fontImageFiles = dinfo.GetFiles("*.png"); FileInfo [] fontTxtFiles = dinfo.GetFiles("*.txt"); if (fontImageFiles == null || fontImageFiles.Length == 0) { valid = false; GUILayout.BeginHorizontal(); GUILayout.Label("", GUILayout.Width(50f)); Color col = GUI.color; GUI.color = new Color(1f, 0.4f, 0.4f, 1f); GUI.skin.button.wordWrap = true; GUILayout.Label("Add a single <fontname>.png: " + reqPath); GUI.skin.button.wordWrap = false; GUI.color = col; GUILayout.EndHorizontal(); } if (fontTxtFiles == null || fontTxtFiles.Length == 0) { valid = false; GUILayout.BeginHorizontal(); GUILayout.Label("", GUILayout.Width(50f)); Color col = GUI.color; GUI.color = new Color(1f, 0.4f, 0.4f, 1f); GUI.skin.button.wordWrap = true; GUILayout.Label("Add a single <fontname>.txt: " + reqPath); GUI.skin.button.wordWrap = false; GUI.color = col; GUILayout.EndHorizontal(); } if (!valid) { continue; } if (fontImageFiles.Length > 1) { valid = false; GUILayout.BeginHorizontal(); GUILayout.Label("", GUILayout.Width(50f)); Color col = GUI.color; GUI.color = new Color(1f, 0.4f, 0.4f, 1f); GUI.skin.button.wordWrap = true; GUILayout.Label("Only supports single <font>.png: " + reqPath); GUI.skin.button.wordWrap = false; GUI.color = col; GUILayout.EndHorizontal(); } if (fontTxtFiles.Length > 1) { valid = false; GUILayout.BeginHorizontal(); GUILayout.Label("", GUILayout.Width(50f)); Color col = GUI.color; GUI.color = new Color(1f, 0.4f, 0.4f, 1f); GUI.skin.button.wordWrap = true; GUILayout.Label("Only supports single <font>.txt: " + reqPath); GUI.skin.button.wordWrap = false; GUI.color = col; GUILayout.EndHorizontal(); } if (!valid) { continue; } string fontImageName = Path.GetFileNameWithoutExtension(fontImageFiles[0].Name); string fontTxtName = Path.GetFileNameWithoutExtension(fontTxtFiles[0].Name); if (fontImageName.CompareTo(fontTxtName) != 0) { valid = false; GUILayout.BeginHorizontal(); GUILayout.Label("", GUILayout.Width(50f)); Color col = GUI.color; GUI.color = new Color(1f, 0.4f, 0.4f, 1f); GUI.skin.button.wordWrap = true; GUILayout.Label(".png / .txt filenames need to match: " + reqPath); GUI.skin.button.wordWrap = false; GUI.color = col; GUILayout.EndHorizontal(); } if (!valid) { continue; } if (fontImageFilesLast != null && fontTxtFilesLast != null) { if (fontImageFiles[0].Name.CompareTo(fontImageFilesLast[0].Name) != 0) { // font image names don't match across devices valid = false; GUILayout.BeginHorizontal(); GUILayout.Label("", GUILayout.Width(50f)); Color col = GUI.color; GUI.color = new Color(1f, 0.4f, 0.4f, 1f); GUILayout.Label("<font>.png files mismatch: " + reqPath); GUI.color = col; GUILayout.EndHorizontal(); } if (fontTxtFiles[0].Name.CompareTo(fontTxtFilesLast[0].Name) != 0) { // font txt names don't match across devices valid = false; GUILayout.BeginHorizontal(); GUILayout.Label("", GUILayout.Width(50f)); Color col = GUI.color; GUI.color = new Color(1f, 0.4f, 0.4f, 1f); GUILayout.Label("<font>.txt files mismatch: " + reqPath); GUI.color = col; GUILayout.EndHorizontal(); } if (!valid) { continue; } } fontImageFilesLast = (FileInfo [])fontImageFiles.Clone(); fontTxtFilesLast = (FileInfo [])fontTxtFiles.Clone(); } else { List <FileInfo> fis; retinaProConfig.getValidArtFiles(dinfo, out fis); if (fis == null || fis.Count == 0) { valid = false; GUILayout.BeginHorizontal(); GUILayout.Label("", GUILayout.Width(50f)); Color col = GUI.color; GUI.color = new Color(1f, 0.4f, 0.4f, 1f); GUI.skin.button.wordWrap = true; GUILayout.Label("Add art assets to: " + reqPath); GUI.skin.button.wordWrap = false; GUI.color = col; GUILayout.EndHorizontal(); continue; } if (fisLast != null) { // are they the same length? if (fis.Count != fisLast.Count) { valid = false; GUILayout.BeginHorizontal(); GUILayout.Label("", GUILayout.Width(50f)); Color col = GUI.color; GUI.color = new Color(1f, 0.4f, 0.4f, 1f); GUILayout.Label("Art asset mismatch: " + reqPath); GUI.color = col; GUILayout.EndHorizontal(); continue; } // compare this file list to previous file list // if they don't match, reject it for (int f = 0; f < fis.Count; f++) { if (fis[f].Name.CompareTo(fisLast[f].Name) != 0) { valid = false; GUILayout.BeginHorizontal(); GUILayout.Label("", GUILayout.Width(50f)); Color col = GUI.color; GUI.color = new Color(1f, 0.4f, 0.4f, 1f); GUILayout.Label("Art asset mismatch: " + reqPath); GUI.color = col; GUILayout.EndHorizontal(); continue; } } } if (fis != null) { fisLast = new List <FileInfo>(fis); } if (fis != null) { fis.Clear(); fis = null; } } } if (fisLast != null) { fisLast.Clear(); fisLast = null; } fontImageFilesLast = null; fontTxtFilesLast = null; return(valid); }
void showAtlasUI() { bool save = false; bool refresh = false; EditorGUI.BeginDisabledGroup(retinaProState.state != retinaProState.rpState.kWaiting); EditorGUILayout.Space(); GUILayout.Label("Atlases", EditorStyles.boldLabel); EditorGUILayout.Space(); EditorGUI.EndDisabledGroup(); // begin scrolling section which contains all of our atlas list items float buttonHeight = 22.0f; float numLines = 2.0f; if (retinaProDataSerialize.sharedInstance.atlasList != null) { numLines = (float)retinaProDataSerialize.sharedInstance.atlasList.Count; if (numLines > 12) { numLines = 12; } } float scrollHeight = (numLines * buttonHeight) + (numLines * 3.0f); GUILayout.BeginVertical(GUILayout.Height(scrollHeight)); Vector2 atlasScrollPos = Vector2.zero; atlasScrollPos.x = EditorPrefs.GetFloat("atlasScrollPosX", 0.0f); atlasScrollPos.y = EditorPrefs.GetFloat("atlasScrollPosY", 0.0f); atlasScrollPos = GUILayout.BeginScrollView(atlasScrollPos, false, false); EditorPrefs.SetFloat("atlasScrollPosX", atlasScrollPos.x); EditorPrefs.SetFloat("atlasScrollPosY", atlasScrollPos.y); EditorGUI.BeginDisabledGroup(retinaProState.state != retinaProState.rpState.kWaiting); // show each atlas and it's configuration if (retinaProDataSerialize.sharedInstance.atlasList != null) { for (int i = 0; i < retinaProDataSerialize.sharedInstance.atlasList.Count; i++) { retinaProAtlas rpd = retinaProDataSerialize.sharedInstance.atlasList[i]; GUILayout.BeginHorizontal(); GUILayout.Label("", GUILayout.Width(50f)); if (rpd != null) { bool selected = false; if (editorSelectedAtlasIdx == i) { selected = true; } string str = rpd.atlasName; if (selected) { str = "[X] " + str; } bool selectAtlas = GUILayout.Button(str, GUILayout.Width(250f), GUILayout.Height(buttonHeight)); if (selectAtlas) { editorSelectedAtlasIdx = i; } } GUILayout.EndHorizontal(); } } EditorGUI.EndDisabledGroup(); GUILayout.EndScrollView(); GUILayout.EndVertical(); EditorGUILayout.Space(); EditorGUILayout.Space(); // show the add atlas button EditorGUI.BeginDisabledGroup(retinaProState.state != retinaProState.rpState.kWaiting); { GUILayout.BeginHorizontal(); GUILayout.Label("", GUILayout.Width(50f)); bool pressed = GUILayout.Button("Add Atlas", GUILayout.Width(200f)); if (pressed) { retinaProAtlas newItem = new retinaProAtlas(); retinaProDataSerialize.sharedInstance.atlasList.Add(newItem); editorSelectedAtlasIdx = retinaProDataSerialize.sharedInstance.atlasList.Count - 1; save = true; } GUILayout.EndHorizontal(); } EditorGUI.EndDisabledGroup(); if (editorSelectedAtlasIdx != -1) { retinaProAtlas editorSelectedAtlas = retinaProDataSerialize.sharedInstance.atlasList[editorSelectedAtlasIdx]; EditorGUILayout.Space(); EditorGUILayout.Space(); EditorGUILayout.Space(); GUILayout.Label("Selected Atlas", EditorStyles.boldLabel); EditorGUILayout.Space(); EditorGUI.BeginDisabledGroup(retinaProState.state != retinaProState.rpState.kWaiting); GUILayout.BeginHorizontal(); GUILayout.Label("Name:", GUILayout.Width(50f)); if (editorSelectedAtlas != null) { string n = GUILayout.TextField(editorSelectedAtlas.atlasName, GUILayout.MaxWidth(150f)); if (n.CompareTo(editorSelectedAtlas.atlasName) != 0) { editorSelectedAtlas.atlasName = n; save = true; } } if (editorSelectedAtlas != null) { bool isFont = GUILayout.Toggle(editorSelectedAtlas.isFont, "Font", GUILayout.Width(50f)); if (isFont != editorSelectedAtlas.isFont) { editorSelectedAtlas.isFont = isFont; save = true; } } bool removeDevice = GUILayout.Button("Remove Atlas", GUILayout.Width(100f)); if (removeDevice) { for (int i = 0; i < retinaProDataSerialize.sharedInstance.atlasList.Count; i++) { if (retinaProDataSerialize.sharedInstance.atlasList[i].atlasName.CompareTo(editorSelectedAtlas.atlasName) == 0) { retinaProDataSerialize.sharedInstance.atlasList.RemoveAt(i); break; } } editorSelectedAtlasIdx = -1; editorSelectedAtlas = null; save = true; } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Padding:", GUILayout.Width(50f)); if (editorSelectedAtlas != null) { int p = EditorGUILayout.IntField(editorSelectedAtlas.atlasPadding, GUILayout.Width(100f)); if (p != editorSelectedAtlas.atlasPadding) { editorSelectedAtlas.atlasPadding = p; save = true; } } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Filter:", GUILayout.Width(50f)); if (editorSelectedAtlas != null) { FilterMode f = (FilterMode)EditorGUILayout.EnumPopup(editorSelectedAtlas.atlasFilterMode, GUILayout.Width(100f)); if (f != editorSelectedAtlas.atlasFilterMode) { editorSelectedAtlas.atlasFilterMode = f; save = true; } } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Format:", GUILayout.Width(50f)); if (editorSelectedAtlas != null) { TextureImporterFormat f = (TextureImporterFormat)EditorGUILayout.EnumPopup(editorSelectedAtlas.atlasTextureFormat, GUILayout.Width(200f)); if (f != editorSelectedAtlas.atlasTextureFormat) { editorSelectedAtlas.atlasTextureFormat = f; save = true; } } GUILayout.EndHorizontal(); // display required folders bool foldersValid = showFoldersUI(ref editorSelectedAtlas); if (foldersValid) { // folders exist // validate the files within the folders bool filesValid = showFilesUI(ref editorSelectedAtlas); if (filesValid) { if (editorSelectedAtlas.atlasName != null && editorSelectedAtlas.atlasName.Length > 0) { // allow user to create / refresh the atlas GUILayout.BeginHorizontal(); GUILayout.Label("", GUILayout.Width(50f)); bool refreshAtlas = false; bool atlasExists = isAtlasExist(editorSelectedAtlas.atlasName); if (atlasExists) { refreshAtlas = GUILayout.Button("Refresh", GUILayout.Width(60f)); } else { refreshAtlas = GUILayout.Button("Create", GUILayout.Width(60f)); } if (refreshAtlas) { genAtlasItem = editorSelectedAtlas; EditorUtility.ClearProgressBar(); progressPeriod = 0.0f; progressPortion = 0.0f; progressString = "Preparing..."; retinaProState.state = retinaProState.rpState.kGen; deviceIndex = 0; fileIndex = 0; progressPeriod = 0.0f; } GUILayout.EndHorizontal(); } } else { } } else { // provide option for fixing folders for this atlas GUILayout.BeginHorizontal(); GUILayout.Label("", GUILayout.Width(50f)); bool fixFolders = GUILayout.Button("Fix Folders", GUILayout.Width(100f)); if (fixFolders) { fixAtlasFolders(ref editorSelectedAtlas); } GUILayout.EndHorizontal(); } EditorGUI.EndDisabledGroup(); } { EditorGUILayout.Space(); EditorGUILayout.Space(); EditorGUILayout.Space(); GUILayout.Label("Utilities", EditorStyles.boldLabel); EditorGUILayout.Space(); EditorGUI.BeginDisabledGroup(retinaProState.state != retinaProState.rpState.kWaiting); GUILayout.BeginHorizontal(); GUILayout.Label("", GUILayout.Width(50f)); GUILayout.Label("This will fix all missing folders for all atlases.", GUILayout.Width(260f)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("", GUILayout.Width(50f)); bool fixAllFolders = GUILayout.Button("Fix ALL Folder Issues", GUILayout.Width(200f)); if (fixAllFolders) { for (int i = 0; i < retinaProDataSerialize.sharedInstance.atlasList.Count; i++) { retinaProAtlas rpd = retinaProDataSerialize.sharedInstance.atlasList[i]; bool foldersValid = showFoldersUI(ref rpd); if (!foldersValid) { fixAtlasFolders(ref rpd); } } } GUILayout.EndHorizontal(); EditorGUILayout.Space(); EditorGUILayout.Space(); EditorGUILayout.Space(); EditorGUILayout.Space(); GUILayout.BeginHorizontal(); GUILayout.Label("", GUILayout.Width(50f)); GUILayout.Label("When an atlas is refreshed this setting changes", GUILayout.Width(260f)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("", GUILayout.Width(50f)); GUILayout.Label("the texture import settings on all of the source", GUILayout.Width(260f)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("", GUILayout.Width(50f)); GUILayout.Label("textures. It makes sure they are set to the", GUILayout.Width(260f)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("", GUILayout.Width(50f)); GUILayout.Label("maximum size and not compressed.", GUILayout.Width(260f)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("", GUILayout.Width(50f)); GUILayout.Label("This ensures that the created atlas textures are", GUILayout.Width(260f)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("", GUILayout.Width(50f)); GUILayout.Label("the correct size and quality for being rendered", GUILayout.Width(260f)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("", GUILayout.Width(50f)); GUILayout.Label("pixel perfect.", GUILayout.Width(260f)); GUILayout.EndHorizontal(); EditorGUILayout.Space(); GUILayout.BeginHorizontal(); GUILayout.Label("", GUILayout.Width(50f)); bool refreshSourceTextures = GUILayout.Toggle(retinaProDataSerialize.sharedInstance.getUtilityRefreshSourceTextures(), "Refresh Source Textures (Recommended)", GUILayout.Width(260f)); if (refreshSourceTextures != retinaProDataSerialize.sharedInstance.getUtilityRefreshSourceTextures()) { retinaProDataSerialize.sharedInstance.setUtilityRefreshSourceTextures(refreshSourceTextures); save = true; } GUILayout.EndHorizontal(); EditorGUI.EndDisabledGroup(); } if (save) { retinaProDataSerialize.sharedInstance.saveSettings(); } if (refresh) { int idx = retinaProDataSerialize.sharedInstance.getPreviewDeviceIdx(); retinaProDevice di = retinaProDataSerialize.sharedInstance.deviceList[idx]; if (di.isDeviceValid()) { retinaProNGTools.refreshReferencesForDevice(di, retinaProDataSerialize.sharedInstance.getPreviewScreenIdx(), retinaProDataSerialize.sharedInstance.getPreviewGameViewIdx()); retinaProNGTools.refresh(); } } }