void OnGUI(){ EditorGUILayout.LabelField(HELP_STRING,GUI.skin.GetStyle( "Box" ) ); UFTAtlasMetadata newMeta=(UFTAtlasMetadata) EditorGUILayout.ObjectField("source atlas",atlasMetadataFrom,typeof(UFTAtlasMetadata),false); if (newMeta != atlasMetadataFrom ){ atlasMetadataFrom= newMeta; EditorPrefs.SetString(EDITORPREFS_ATLASMIGRATION_FROM,AssetDatabase.GetAssetPath(atlasMetadataFrom)); updateMaterialTextureList(); } UFTAtlasMetadata newMetaTo=(UFTAtlasMetadata) EditorGUILayout.ObjectField("source atlas",atlasMetadataTo,typeof(UFTAtlasMetadata),false); if (newMetaTo != atlasMetadataTo ){ atlasMetadataTo= newMetaTo; EditorPrefs.SetString(EDITORPREFS_ATLASMIGRATION_TO,AssetDatabase.GetAssetPath(atlasMetadataTo)); if (isAllMetadataObjectsValid ()){ updateObjectList(); } } if (isAllMetadataObjectsValid()){ displayUpdateLinksToTextureMaterial(); displayObjectListIfExist(); if (GUILayout.Button("migrate!")) migrate(); } }
void onClickSave() { string assetPath = "Assets/" + uftAtlas.atlasName; if (atlasMetadata == null || (EditorUtility.DisplayDialog("You are editing atlas", "Do you want to overwrite it?", "Yes", "No"))) { // if we have already metadata, that's mean that we want to override object, so just need to take old path string texturePath = assetPath + ".png"; string metadataPath = assetPath + ".asset"; if (atlasMetadata != null) { texturePath = AssetDatabase.GetAssetPath(atlasMetadata.texture); metadataPath = AssetDatabase.GetAssetPath(atlasMetadata); atlasMetadata = uftAtlas.saveAtlasTextureAndGetMetadata(texturePath, atlasMetadata); EditorUtility.SetDirty(atlasMetadata); AssetDatabase.SaveAssets(); } else { atlasMetadata = uftAtlas.saveAtlasTextureAndGetMetadata(texturePath, null); AssetDatabase.CreateAsset(atlasMetadata, metadataPath); } } }
void onClickSave() { string assetPath = "Assets/" + uftAtlas.atlasName; string fullPath = Application.dataPath + "/" + uftAtlas.atlasName; bool isAnyAssetsExists = (File.Exists(@fullPath + ".asset") || File.Exists(@fullPath + ".png")); if (!isAnyAssetsExists || (EditorUtility.DisplayDialog("Some assets with following name " + uftAtlas.atlasName + " already exists", "Do you want to overwrite it?", "Yes", "No"))) { // if we have already metadata, that's mean that we want to override object, so just need to take old path string texturePath = assetPath + ".png"; string metadataPath = assetPath + ".asset"; if (atlasMetadata != null) { Debug.Log("meta!~=null"); texturePath = AssetDatabase.GetAssetPath(atlasMetadata.texture); metadataPath = AssetDatabase.GetAssetPath(atlasMetadata); } UFTAtlasMetadata metadata = uftAtlas.saveAtlasTextureAndGetMetadata(texturePath); AssetDatabase.CreateAsset(metadata, metadataPath); atlasMetadata = metadata; } }
public static Dictionary<System.Type,List<UFTObjectOnScene>> getObjectOnSceneByAtlas(UFTAtlasMetadata atlasMetadata, System.Type additionalType=null){ Dictionary<System.Type,List<UFTObjectOnScene>> result = new Dictionary<System.Type, List<UFTObjectOnScene>>(); HashSet<System.Type> unwantedTypes=new HashSet<System.Type>(); Object[] objects = GameObject.FindObjectsOfType( typeof( Component ) ); foreach( Component component in objects ) { if (unwantedTypes.Contains(component.GetType())) continue; UFTObjectOnScene objectOnScene=new UFTObjectOnScene(component); foreach (FieldInfo prop in component.GetType().GetFields(BindingFlags.Instance| BindingFlags.Public | BindingFlags.NonPublic)) { if (prop.FieldType == atlasMetadata.GetType() || prop.FieldType == additionalType ){ objectOnScene.addProperty(prop); } } if (objectOnScene.propertyList.Count == 0 ){ unwantedTypes.Add(component.GetType()); } else { List<UFTObjectOnScene> list; if ( !result.ContainsKey(component.GetType())){ list = new List<UFTObjectOnScene>(); result.Add(component.GetType(),list); } else { list = result[component.GetType()]; } list.Add(objectOnScene); } } return result; }
void OnGUI() { EditorGUILayout.LabelField(HELP_STRING, GUI.skin.GetStyle("Box")); UFTAtlasMetadata newMeta = (UFTAtlasMetadata)EditorGUILayout.ObjectField("source atlas", atlasMetadataFrom, typeof(UFTAtlasMetadata), false); if (newMeta != atlasMetadataFrom) { atlasMetadataFrom = newMeta; EditorPrefs.SetString(EDITORPREFS_ATLASMIGRATION_FROM, AssetDatabase.GetAssetPath(atlasMetadataFrom)); updateMaterialTextureList(); } UFTAtlasMetadata newMetaTo = (UFTAtlasMetadata)EditorGUILayout.ObjectField("source atlas", atlasMetadataTo, typeof(UFTAtlasMetadata), false); if (newMetaTo != atlasMetadataTo) { atlasMetadataTo = newMetaTo; EditorPrefs.SetString(EDITORPREFS_ATLASMIGRATION_TO, AssetDatabase.GetAssetPath(atlasMetadataTo)); if (isAllMetadataObjectsValid()) { updateObjectList(); } } if (isAllMetadataObjectsValid()) { displayUpdateLinksToTextureMaterial(); displayObjectListIfExist(); if (GUILayout.Button("migrate!")) { migrate(); } } }
public void initOnNewParameters () { atlasMetadata=null; uftAtlas=UFTAtlas.CreateInstance<UFTAtlas>(); //get free name string atlasName=UFTFileUtil.getFileName(ATLAS_FILE_MASK); uftAtlas.atlasName=atlasName; readWidthHeightFromEditorPrefs(); }
private Dictionary <string, UFTAtlasEntryMetadata> getAtlasByMetaDictionary(UFTAtlasMetadata atlasMetadataTo) { Dictionary <string, UFTAtlasEntryMetadata> result = new Dictionary <string, UFTAtlasEntryMetadata>(); foreach (UFTAtlasEntryMetadata entry in atlasMetadataTo.entries) { result.Add(entry.assetPath, entry); } return(result); }
public void initOnNewParameters() { atlasMetadata = null; uftAtlas = UFTAtlas.CreateInstance <UFTAtlas>(); //get free name string atlasName = UFTFileUtil.getFileName(ATLAS_FILE_MASK); uftAtlas.atlasName = atlasName; readWidthHeightFromEditorPrefs(); }
public void onAtlasMetadataObjectChanged(UFTAtlasMetadata atlasMetadata) { registerAtlasSnapshot(); initOnNewParameters(); if (atlasMetadata != null) { //create UFTAtlas from metadata. uftAtlas = UFTAtlas.CreateInstance <UFTAtlas>(); uftAtlas.readPropertiesFromMetadata(atlasMetadata); } }
public static void migrateAtlasMatchEntriesByName(UFTAtlasMetadata atlasFrom, UFTAtlasMetadata atlasTo) { UFTSelectTextureFromAtlas[] objects = (UFTSelectTextureFromAtlas[])GameObject.FindObjectsOfType(typeof(UFTSelectTextureFromAtlas)); Debug.Log("heheh " + objects[0].name); /* * * Object[] objects = EditorUtility.CollectDependencies( new []{atlasFrom}); * for (int i = 0; i < objects.Length; i++) { * Debug.Log("object "+objects[i].name + " "+ objects[i].GetType()); * * } */ }
void initialize(){ string atlasFrom=EditorPrefs.GetString(EDITORPREFS_ATLASMIGRATION_FROM,null); if (atlasFrom != null){ atlasMetadataFrom = (UFTAtlasMetadata) AssetDatabase.LoadAssetAtPath(atlasFrom,typeof(UFTAtlasMetadata)); if (atlasMetadataFrom !=null){ updateObjectList(); updateMaterialTextureList(); } } string atlasTo=EditorPrefs.GetString(EDITORPREFS_ATLASMIGRATION_TO,null); if (atlasFrom != null) atlasMetadataTo = (UFTAtlasMetadata) AssetDatabase.LoadAssetAtPath(atlasTo,typeof(UFTAtlasMetadata)); updateMaterial = EditorPrefs.GetBool(EDITORPREFS_ATLASMIGRATION_UPDATE_MATERIAL,false); }
public static void migrateAtlasMatchEntriesByName(UFTAtlasMetadata atlasFrom, UFTAtlasMetadata atlasTo){ UFTSelectTextureFromAtlas[] objects=(UFTSelectTextureFromAtlas[]) GameObject.FindObjectsOfType(typeof(UFTSelectTextureFromAtlas)); Debug.Log("heheh "+objects[0].name); /* * Object[] objects = EditorUtility.CollectDependencies( new []{atlasFrom}); for (int i = 0; i < objects.Length; i++) { Debug.Log("object "+objects[i].name + " "+ objects[i].GetType()); } */ }
//this function build atlas texture, create atlas metadata and return it public UFTAtlasMetadata saveAtlasTextureAndGetMetadata(string assetPath) { List <UFTAtlasEntryMetadata> entryMeta = atlasEntries.ConvertAll(new Converter <UFTAtlasEntry, UFTAtlasEntryMetadata>(entryToEntryMetaConverter)); Texture2D texture = buildAtlasTexture2d(); texture = UFTTextureUtil.saveTexture2DToAssets(texture, assetPath); UFTAtlasMetadata atlasMetadata = UFTAtlasMetadata.CreateInstance <UFTAtlasMetadata>(); atlasMetadata.entries = entryMeta.ToArray(); atlasMetadata.texture = texture; atlasMetadata.atlasName = atlasName; return(atlasMetadata); }
public void readPropertiesFromMetadata(UFTAtlasMetadata atlasMetadata) { atlasWidth = (UFTAtlasSize)atlasMetadata.texture.width; atlasHeight = (UFTAtlasSize)atlasMetadata.texture.height; List <UFTAtlasEntry> entries = new List <UFTAtlasEntry>(); foreach (UFTAtlasEntryMetadata meta in atlasMetadata.entries) { UFTAtlasEntry entry = UFTAtlasEntry.CreateInstance <UFTAtlasEntry>(); try{ entry.readPropertiesFromMetadata(meta); entry.uftAtlas = this; entries.Add(entry); }catch (TextureDoesNotExistsException e) { Debug.LogWarning("texture " + e.texturePath + " does not exists exception"); } } this.atlasEntries = entries; this.atlasName = atlasMetadata.atlasName; }
void initialize() { string atlasFrom = EditorPrefs.GetString(EDITORPREFS_ATLASMIGRATION_FROM, null); if (atlasFrom != null) { atlasMetadataFrom = (UFTAtlasMetadata)AssetDatabase.LoadAssetAtPath(atlasFrom, typeof(UFTAtlasMetadata)); if (atlasMetadataFrom != null) { updateObjectList(); updateMaterialTextureList(); } } string atlasTo = EditorPrefs.GetString(EDITORPREFS_ATLASMIGRATION_TO, null); if (atlasFrom != null) { atlasMetadataTo = (UFTAtlasMetadata)AssetDatabase.LoadAssetAtPath(atlasTo, typeof(UFTAtlasMetadata)); } updateMaterial = EditorPrefs.GetBool(EDITORPREFS_ATLASMIGRATION_UPDATE_MATERIAL, false); }
public void readPropertiesFromMetadata(UFTAtlasMetadata atlasMetadata){ atlasWidth=(UFTAtlasSize) atlasMetadata.texture.width; atlasHeight=(UFTAtlasSize) atlasMetadata.texture.height; List<UFTAtlasEntry> entries=new List<UFTAtlasEntry>(); foreach (UFTAtlasEntryMetadata meta in atlasMetadata.entries){ UFTAtlasEntry entry=UFTAtlasEntry.CreateInstance<UFTAtlasEntry>(); try{ entry.readPropertiesFromMetadata(meta); entry.uftAtlas=this; entries.Add(entry); }catch (TextureDoesNotExistsException e){ Debug.LogWarning("texture "+e.texturePath+" does not exists exception"); } } this.atlasEntries=entries; this.atlasName=atlasMetadata.atlasName; }
void OnGUI() { if (curentTerrain == null) { return; } // If its first run or refresh have been requested by pressing button we will fetch atlasses available for us in project // so that the user my chose one of them for foreground if (atlasCollection == null || GUILayout.Button("Find Sprite Atlases")) { List <string> atlasses = new List <string>(); atlasMetadata = new List <UFTAtlasMetadata>(); string[] guids = AssetDatabase.FindAssets("t:UFTAtlasMetadata"); foreach (string guid in guids) { string path = AssetDatabase.GUIDToAssetPath(guid); if (path != null && path.Length > 0) { UFTAtlasMetadata t = AssetDatabase.LoadAssetAtPath(path, typeof(UFTAtlasMetadata)) as UFTAtlasMetadata; if (!atlasMetadata.Contains(t)) { atlasses.Add(t.atlasName); atlasMetadata.Add(t); } } } atlasCollection = atlasses.ToArray(); } if (atlasCollection.Length > 0) { int selected = selectedAtlas == null ? 0 : atlasMetadata.IndexOf(selectedAtlas); if (selected == -1) { selected = 0; } int newSelection = EditorGUILayout.Popup(selected, atlasCollection); if (newSelection != selected || selectedAtlas == null) { selectedAtlas = atlasMetadata[newSelection]; deAtlassedTextures.Clear(); //preparation for reading atlas texture. Its likely that texture is unreadable and compressed. //for this process we will have to change its mode temporarily, and store old setting to reapply them later TextureImporterSettings oldSettings = TextureUtils.ChangeTextureSettings(selectedAtlas.texture, true); if (oldSettings == null) { return; } // Converting part of the atlas texture into separated textures fitting to the scale of the window is done using atlas mipmaps and coordinate scaling foreach (UFTAtlasEntryMetadata m in selectedAtlas.entries) { Rect size = m._pixelRect; int width = Mathf.RoundToInt(size.width); int height = Mathf.RoundToInt(size.height); int minX = Mathf.RoundToInt(size.xMin); int minY = Mathf.RoundToInt(size.yMin); int maxSize = Mathf.Max(width, height); //mipmap levels are x1, x2, x4, x8. to match original texture. //we have to invert this process to find best mipmap level fitting our texture size. // "imageSize +1" ensures that if size is exactly matching we do not need to use smaller mipmap, because division would return less than 1 int mLevel = (int)Mathf.Sqrt(maxSize / (imageSize + 1)); if (selectedAtlas.texture.mipmapCount < mLevel) { mLevel = 0; } //height starts from the bottom of the texture, so we need to find "min" taking into account minY = selectedAtlas.texture.height - minY - height; //scale values using bytewise operations to correct mipmap level width = width >> mLevel; height = height >> mLevel; minX = minX >> mLevel; minY = minY >> mLevel; Texture2D texture = new Texture2D(width, height, TextureFormat.ARGB32, true); Color[] colors = selectedAtlas.texture.GetPixels(minX, minY, width, height, mLevel); texture.SetPixels(colors); texture.Apply(); deAtlassedTextures[m.name] = texture; } //reapplying original atlas texture settings TextureUtils.ChangeTextureSettings(selectedAtlas.texture, oldSettings); } } else { EditorGUILayout.LabelField("No atlased sprites have been found in resource folders!"); return; } if (selectedAtlas == null || window == null) { return; } //find how many items fit in a row Rect r = window.position; int horizontalCount = Mathf.Max(1, (int)r.width / imageSize); //using try ensures no errors thrown by repaint if the structure of the editor gui change. //they are harmless but annoying when they show for single frame. try { scroll = GUILayout.BeginScrollView(scroll); GUILayout.BeginVertical(); GUILayout.BeginHorizontal(); for (int i = 0; i < selectedAtlas.entries.Length; i++) { UFTAtlasEntryMetadata t = selectedAtlas.entries[i]; int index = curentTerrain.source.fgTypes.FindIndex(o => o.name == t.name); if (TextureButton(t, index >= 0)) { if (index >= 0) { curentTerrain.source.fgTypes.RemoveAt(index); MHDatabase.SaveDB <MHTerrain>(); } else { MHSimpleCounter c = new MHSimpleCounter(); c.name = t.name; c.count = 1; curentTerrain.source.fgTypes.Add(c); MHDatabase.SaveDB <MHTerrain>(); } } //end of line if enough elements are in line if (((i + 1) % horizontalCount) == 0) { GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); } } GUILayout.EndHorizontal(); GUILayout.EndVertical(); GUILayout.EndScrollView(); } catch { /* repaint updates sometimes may get interrupted. Nothing to worry about */ } }
void OnGUI() { if (isAtlasDirty) { EditorUtility.SetDirty(uftAtlas); isAtlasDirty = false; } EditorGUILayout.Separator(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.BeginVertical(new GUILayoutOption[] { GUILayout.Width(200f) }); EditorGUILayout.Separator(); EditorGUILayout.LabelField("Atlas:"); string newName = EditorGUILayout.TextField("name", uftAtlas.atlasName); if (newName != uftAtlas.atlasName) { uftAtlas.atlasName = newName; } UFTAtlasMetadata newMeta = (UFTAtlasMetadata)EditorGUILayout.ObjectField((Object)atlasMetadata, typeof(UFTAtlasMetadata), false); if (newMeta != atlasMetadata) { if (uftAtlas.atlasEntries.Count == 0 || (uftAtlas.atlasEntries.Count > 0 && EditorUtility.DisplayDialog("This action will remove all existing textures on your atlas", "Do you want to proceed?", "Proceed", "Cancel"))) { if (UFTAtlasEditorEventManager.onAtlasMetadataObjectChanged != null) { UFTAtlasEditorEventManager.onAtlasMetadataObjectChanged(newMeta); } atlasMetadata = newMeta; } } EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("new")) { if (uftAtlas.atlasEntries.Count == 0 || (uftAtlas.atlasEntries.Count > 0 && EditorUtility.DisplayDialog("This action will remove all existing textures on your atlas", "Do you want to proceed?", "Proceed", "Cancel"))) { onClickNew(); } } if (GUILayout.Button("save")) { onClickSave(); } EditorGUILayout.EndHorizontal(); UFTAtlasSize newWidth = (UFTAtlasSize)EditorGUILayout.EnumPopup("width", uftAtlas.atlasWidth); UFTAtlasSize newHeight = (UFTAtlasSize)EditorGUILayout.EnumPopup("height", uftAtlas.atlasHeight); uftAtlas.currentDragMode = (UFTAtlas.DragMode)EditorGUILayout.EnumPopup(uftAtlas.currentDragMode); EditorGUILayout.Separator(); EditorGUILayout.LabelField("Align:"); uftAtlas.borderSize = Mathf.Max(0, EditorGUILayout.IntField("border size", uftAtlas.borderSize)); bool autoAlign = GUILayout.Button("auto align & size"); bool normalAlign = GUILayout.Button("align"); if ((autoAlign || normalAlign) && uftAtlas != null && uftAtlas.atlasEntries.Count > 0) { bool successful = true; if (normalAlign) { successful = uftAtlas.arrangeEntriesUsingUnityPackager(); } if (autoAlign) { UFTAtlasSize oldWidth = uftAtlas.atlasWidth; UFTAtlasSize oldHeight = uftAtlas.atlasHeight; int w = (int)128; int h = (int)128; while (true) { uftAtlas.atlasHeight = (UFTAtlasSize)(w); uftAtlas.atlasWidth = (UFTAtlasSize)(h); if (uftAtlas.arrangeEntriesUsingUnityPackager()) { break; } if (uftAtlas.atlasWidth == UFTAtlasSize._4096 && uftAtlas.atlasHeight == UFTAtlasSize._4096) { successful = false; break; } uftAtlas.atlasHeight = (UFTAtlasSize)(w * 2); uftAtlas.atlasWidth = (UFTAtlasSize)(h); if (uftAtlas.arrangeEntriesUsingUnityPackager()) { break; } uftAtlas.atlasHeight = (UFTAtlasSize)(w); uftAtlas.atlasWidth = (UFTAtlasSize)(h * 2); if (uftAtlas.arrangeEntriesUsingUnityPackager()) { break; } w *= 2; h *= 2; } if (!successful) { uftAtlas.atlasWidth = oldWidth; uftAtlas.atlasHeight = oldHeight; } else if (uftAtlas.atlasWidth != oldWidth || uftAtlas.atlasHeight != oldHeight) { newWidth = uftAtlas.atlasWidth; newHeight = uftAtlas.atlasHeight; uftAtlas.atlasWidth = oldWidth; uftAtlas.atlasHeight = oldHeight; } } if (successful) { alignSuccesful = "Alignment successful. "; } else { alignSuccesful = "Alignment failed! Try extending atlas size"; } } GUILayout.Label(alignSuccesful); if (newWidth != uftAtlas.atlasWidth || newHeight != uftAtlas.atlasHeight) { uftAtlas.atlasWidth = newWidth; uftAtlas.atlasHeight = newHeight; if (UFTAtlasEditorEventManager.onAtlasSizeChanged != null) { UFTAtlasEditorEventManager.onAtlasSizeChanged((int)newWidth, (int)newHeight); } } EditorGUILayout.Separator(); EditorGUILayout.LabelField("Atlas Textures [" + uftAtlas.atlasEntries.Count + "]:"); atlasTexturesScrollPosition = EditorGUILayout.BeginScrollView(atlasTexturesScrollPosition); if (uftAtlas.atlasEntries.Count > 0) { List <string> names = uftAtlas.atlasEntries.ConvertAll(new System.Converter <UFTAtlasEntry, string>(uftAtlasEntryToString)); names.Sort(); foreach (string name in names) { EditorGUILayout.BeginHorizontal(); GUI.color = Color.red; if (GUILayout.Button("x")) { int index = uftAtlas.atlasEntries.FindIndex(o => o.textureName == name); uftAtlas.atlasEntries.RemoveAt(index); } GUI.color = Color.white; EditorGUILayout.LabelField(name, GUILayout.MaxWidth(220f)); EditorGUILayout.EndHorizontal(); } } EditorGUILayout.EndScrollView(); EditorGUILayout.Separator(); EditorGUILayout.EndVertical(); EditorGUILayout.BeginVertical(); EditorGUILayout.Separator(); EditorGUILayout.BeginHorizontal(); scrollPosition = EditorGUILayout.BeginScrollView(scrollPosition); GUILayoutUtility.GetRect((int)uftAtlas.atlasWidth, (int)uftAtlas.atlasHeight); uftAtlas.OnGUI(); EditorGUILayout.EndScrollView(); EditorGUILayout.Separator(); EditorGUILayout.EndHorizontal(); EditorGUILayout.EndVertical(); EditorGUILayout.EndHorizontal(); EditorGUILayout.Separator(); if (Event.current.type == EventType.DragUpdated || Event.current.type == EventType.DragPerform) { DragAndDrop.visualMode = DragAndDropVisualMode.Copy; // show a drag-add icon on the mouse cursor if (Event.current.type == EventType.dragPerform) { HandleDroppedObjects(DragAndDrop.objectReferences); } DragAndDrop.AcceptDrag(); Event.current.Use(); } }
public void onAtlasMetadataObjectChanged (UFTAtlasMetadata atlasMetadata) { registerAtlasSnapshot (); initOnNewParameters(); if (atlasMetadata!=null){ //create UFTAtlas from metadata. uftAtlas=UFTAtlas.CreateInstance<UFTAtlas>(); uftAtlas.readPropertiesFromMetadata(atlasMetadata); } }
void OnGUI() { if (isAtlasDirty) { EditorUtility.SetDirty(uftAtlas); isAtlasDirty = false; } EditorGUILayout.Separator(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.BeginVertical(new GUILayoutOption[] { GUILayout.Width(200f) }); EditorGUILayout.Separator(); EditorGUILayout.LabelField("Atlas:"); string newName = EditorGUILayout.TextField("name", uftAtlas.atlasName); if (newName != uftAtlas.atlasName) { uftAtlas.atlasName = newName; } UFTAtlasMetadata newMeta = (UFTAtlasMetadata)EditorGUILayout.ObjectField((Object)atlasMetadata, typeof(UFTAtlasMetadata), false); if (newMeta != atlasMetadata) { if (uftAtlas.atlasEntries.Count == 0 || (uftAtlas.atlasEntries.Count > 0 && EditorUtility.DisplayDialog("This action will remove all existing textures on your atlas", "Do you want to proceed?", "Proceed", "Cancel"))) { if (UFTAtlasEditorEventManager.onAtlasMetadataObjectChanged != null) { UFTAtlasEditorEventManager.onAtlasMetadataObjectChanged(newMeta); } atlasMetadata = newMeta; } } EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("new")) { if (uftAtlas.atlasEntries.Count == 0 || (uftAtlas.atlasEntries.Count > 0 && EditorUtility.DisplayDialog("This action will remove all existing textures on your atlas", "Do you want to proceed?", "Proceed", "Cancel"))) { onClickNew(); } } if (GUILayout.Button("save")) { onClickSave(); } EditorGUILayout.EndHorizontal(); UFTAtlasSize newWidth = (UFTAtlasSize)EditorGUILayout.EnumPopup("width", uftAtlas.atlasWidth); UFTAtlasSize newHeight = (UFTAtlasSize)EditorGUILayout.EnumPopup("height", uftAtlas.atlasHeight); EditorGUILayout.Separator(); EditorGUILayout.LabelField("Allign:"); uftAtlas.borderSize = EditorGUILayout.IntField("border size", uftAtlas.borderSize); if (GUILayout.Button("allign") && uftAtlas != null && uftAtlas.atlasEntries.Count > 0) { uftAtlas.arrangeEntriesUsingUnityPackager(); } if (newWidth != uftAtlas.atlasWidth || newHeight != uftAtlas.atlasHeight) { uftAtlas.atlasWidth = newWidth; uftAtlas.atlasHeight = newHeight; if (UFTAtlasEditorEventManager.onAtlasSizeChanged != null) { UFTAtlasEditorEventManager.onAtlasSizeChanged((int)newWidth, (int)newHeight); } } EditorGUILayout.Separator(); EditorGUILayout.LabelField("Atlas Textures [" + uftAtlas.atlasEntries.Count + "]:"); if (uftAtlas.atlasEntries.Count > 0) { if (GUILayout.Button("trim alpha")) { uftAtlas.trimAllEntries(); } } atlasTexturesScrollPosition = EditorGUILayout.BeginScrollView(atlasTexturesScrollPosition); if (uftAtlas.atlasEntries.Count > 0) { List <string> names = uftAtlas.atlasEntries.ConvertAll(new System.Converter <UFTAtlasEntry, string>(uftAtlasEntryToString)); names.Sort(); foreach (string name in names) { EditorGUILayout.LabelField(name, GUILayout.MaxWidth(220f)); } } EditorGUILayout.EndScrollView(); EditorGUILayout.Separator(); EditorGUILayout.EndVertical(); EditorGUILayout.BeginVertical(); EditorGUILayout.Separator(); EditorGUILayout.BeginHorizontal(); scrollPosition = EditorGUILayout.BeginScrollView(scrollPosition); GUILayoutUtility.GetRect((int)uftAtlas.atlasWidth, (int)uftAtlas.atlasHeight); uftAtlas.OnGUI(); EditorGUILayout.EndScrollView(); EditorGUILayout.Separator(); EditorGUILayout.EndHorizontal(); EditorGUILayout.EndVertical(); EditorGUILayout.EndHorizontal(); EditorGUILayout.Separator(); if (Event.current.type == EventType.DragUpdated || Event.current.type == EventType.DragPerform) { DragAndDrop.visualMode = DragAndDropVisualMode.Copy; // show a drag-add icon on the mouse cursor if (Event.current.type == EventType.dragPerform) { HandleDroppedObjects(DragAndDrop.objectReferences); } DragAndDrop.AcceptDrag(); Event.current.Use(); } }
void OnGUI () { if (isAtlasDirty){ EditorUtility.SetDirty(uftAtlas); isAtlasDirty=false; } EditorGUILayout.Separator(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.BeginVertical (new GUILayoutOption[]{GUILayout.Width(200f)}); EditorGUILayout.Separator(); EditorGUILayout.LabelField("Atlas:"); string newName=EditorGUILayout.TextField("name",uftAtlas.atlasName); if (newName!=uftAtlas.atlasName){ uftAtlas.atlasName=newName; } UFTAtlasMetadata newMeta= (UFTAtlasMetadata) EditorGUILayout.ObjectField((Object)atlasMetadata,typeof(UFTAtlasMetadata),false); if (newMeta!=atlasMetadata){ if (uftAtlas.atlasEntries.Count==0 || (uftAtlas.atlasEntries.Count>0 && EditorUtility.DisplayDialog("This action will remove all existing textures on your atlas", "Do you want to proceed?","Proceed","Cancel"))){ if (UFTAtlasEditorEventManager.onAtlasMetadataObjectChanged!=null) UFTAtlasEditorEventManager.onAtlasMetadataObjectChanged(newMeta); atlasMetadata=newMeta; } } EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("new")){ if (uftAtlas.atlasEntries.Count==0 || (uftAtlas.atlasEntries.Count>0 && EditorUtility.DisplayDialog("This action will remove all existing textures on your atlas", "Do you want to proceed?","Proceed","Cancel"))){ onClickNew(); } } if (GUILayout.Button("save")) onClickSave(); EditorGUILayout.EndHorizontal(); UFTAtlasSize newWidth = (UFTAtlasSize) EditorGUILayout.EnumPopup("width",uftAtlas.atlasWidth); UFTAtlasSize newHeight = (UFTAtlasSize) EditorGUILayout.EnumPopup("height",uftAtlas.atlasHeight); EditorGUILayout.Separator(); EditorGUILayout.LabelField("Allign:"); uftAtlas.borderSize=EditorGUILayout.IntField("border size",uftAtlas.borderSize); if (GUILayout.Button("allign") && uftAtlas!=null && uftAtlas.atlasEntries.Count>0) uftAtlas.arrangeEntriesUsingUnityPackager(); if (newWidth!=uftAtlas.atlasWidth || newHeight!=uftAtlas.atlasHeight){ uftAtlas.atlasWidth=newWidth; uftAtlas.atlasHeight=newHeight; if (UFTAtlasEditorEventManager.onAtlasSizeChanged!=null) UFTAtlasEditorEventManager.onAtlasSizeChanged((int)newWidth,(int)newHeight); } EditorGUILayout.Separator(); EditorGUILayout.LabelField("Atlas Textures ["+uftAtlas.atlasEntries.Count+"]:"); if (uftAtlas.atlasEntries.Count>0){ if (GUILayout.Button("trim alpha")){ uftAtlas.trimAllEntries(); } } atlasTexturesScrollPosition = EditorGUILayout.BeginScrollView(atlasTexturesScrollPosition); if (uftAtlas.atlasEntries.Count >0){ List<string> names= uftAtlas.atlasEntries.ConvertAll(new System.Converter<UFTAtlasEntry,string>(uftAtlasEntryToString)); names.Sort(); foreach (string name in names) { EditorGUILayout.LabelField(name,GUILayout.MaxWidth(220f)); } } EditorGUILayout.EndScrollView(); EditorGUILayout.Separator(); EditorGUILayout.EndVertical(); EditorGUILayout.BeginVertical(); EditorGUILayout.Separator(); EditorGUILayout.BeginHorizontal(); scrollPosition = EditorGUILayout.BeginScrollView(scrollPosition); GUILayoutUtility.GetRect((int)uftAtlas.atlasWidth,(int)uftAtlas.atlasHeight); uftAtlas.OnGUI(); EditorGUILayout.EndScrollView(); EditorGUILayout.Separator(); EditorGUILayout.EndHorizontal(); EditorGUILayout.EndVertical(); EditorGUILayout.EndHorizontal(); EditorGUILayout.Separator(); if (Event.current.type == EventType.DragUpdated || Event.current.type == EventType.DragPerform){ DragAndDrop.visualMode = DragAndDropVisualMode.Copy; // show a drag-add icon on the mouse cursor if(Event.current.type==EventType.dragPerform) HandleDroppedObjects(DragAndDrop.objectReferences); DragAndDrop.AcceptDrag(); Event.current.Use(); } }
void onClickSave () { string assetPath="Assets/"+uftAtlas.atlasName; string fullPath=Application.dataPath+"/"+uftAtlas.atlasName; bool isAnyAssetsExists=(File.Exists(@fullPath+".asset") || File.Exists(@fullPath+".png")); if (!isAnyAssetsExists || (EditorUtility.DisplayDialog("Some assets with following name "+uftAtlas.atlasName+" already exists", "Do you want to overwrite it?","Yes","No"))){ // if we have already metadata, that's mean that we want to override object, so just need to take old path string texturePath=assetPath+".png"; string metadataPath=assetPath+".asset"; if (atlasMetadata!=null){ Debug.Log("meta!~=null"); texturePath=AssetDatabase.GetAssetPath(atlasMetadata.texture); metadataPath=AssetDatabase.GetAssetPath(atlasMetadata); } UFTAtlasMetadata metadata=uftAtlas.saveAtlasTextureAndGetMetadata(texturePath); AssetDatabase.CreateAsset(metadata,metadataPath); atlasMetadata=metadata; } }
public static Dictionary <System.Type, List <UFTObjectOnScene> > getObjectOnSceneByAtlas(UFTAtlasMetadata atlasMetadata, System.Type additionalType = null) { Dictionary <System.Type, List <UFTObjectOnScene> > result = new Dictionary <System.Type, List <UFTObjectOnScene> >(); HashSet <System.Type> unwantedTypes = new HashSet <System.Type>(); Object[] objects = GameObject.FindObjectsOfType(typeof(Component)); foreach (Component component in objects) { if (unwantedTypes.Contains(component.GetType())) { continue; } UFTObjectOnScene objectOnScene = new UFTObjectOnScene(component); foreach (FieldInfo prop in component.GetType().GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)) { if (prop.FieldType == atlasMetadata.GetType() || prop.FieldType == additionalType) { objectOnScene.addProperty(prop); } } if (objectOnScene.propertyList.Count == 0) { unwantedTypes.Add(component.GetType()); } else { List <UFTObjectOnScene> list; if (!result.ContainsKey(component.GetType())) { list = new List <UFTObjectOnScene>(); result.Add(component.GetType(), list); } else { list = result[component.GetType()]; } list.Add(objectOnScene); } } return(result); }
private Dictionary<string, UFTAtlasEntryMetadata> getAtlasByMetaDictionary (UFTAtlasMetadata atlasMetadataTo) { Dictionary<string, UFTAtlasEntryMetadata> result= new Dictionary<string, UFTAtlasEntryMetadata>(); foreach(UFTAtlasEntryMetadata entry in atlasMetadataTo.entries){ result.Add(entry.assetPath,entry); } return result; }