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();			
		}
		
	}
Пример #2
0
    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);
            }
        }
    }
Пример #3
0
    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;
        }
    }
Пример #4
0
	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;
	}
Пример #5
0
    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();
            }
        }
    }
Пример #6
0
	public void initOnNewParameters ()
	{
		atlasMetadata=null;
		uftAtlas=UFTAtlas.CreateInstance<UFTAtlas>();
		//get free name
		string atlasName=UFTFileUtil.getFileName(ATLAS_FILE_MASK);
		uftAtlas.atlasName=atlasName;		
		readWidthHeightFromEditorPrefs();		
	}
Пример #7
0
    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);
    }
Пример #8
0
    public void initOnNewParameters()
    {
        atlasMetadata = null;
        uftAtlas      = UFTAtlas.CreateInstance <UFTAtlas>();
        //get free name
        string atlasName = UFTFileUtil.getFileName(ATLAS_FILE_MASK);

        uftAtlas.atlasName = atlasName;
        readWidthHeightFromEditorPrefs();
    }
Пример #9
0
 public void onAtlasMetadataObjectChanged(UFTAtlasMetadata atlasMetadata)
 {
     registerAtlasSnapshot();
     initOnNewParameters();
     if (atlasMetadata != null)
     {
         //create UFTAtlas from metadata.
         uftAtlas = UFTAtlas.CreateInstance <UFTAtlas>();
         uftAtlas.readPropertiesFromMetadata(atlasMetadata);
     }
 }
Пример #10
0
    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);
	}
Пример #12
0
	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());
			
		}
		*/		
		
	}
Пример #13
0
    //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);
    }
Пример #14
0
    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;
    }
Пример #15
0
    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);
    }
Пример #16
0
	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;
	}
Пример #17
0
    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 */ }
    }
Пример #18
0
    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();
        }
    }
Пример #19
0
	public void onAtlasMetadataObjectChanged (UFTAtlasMetadata atlasMetadata)
	{		
		registerAtlasSnapshot ();
		initOnNewParameters();
		if (atlasMetadata!=null){
			//create UFTAtlas from metadata.
			uftAtlas=UFTAtlas.CreateInstance<UFTAtlas>();
			uftAtlas.readPropertiesFromMetadata(atlasMetadata);			
		}
		
	}
Пример #20
0
    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();
        }
    }
Пример #21
0
	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();
	    }		
	}
Пример #22
0
	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;
		}
	}
Пример #23
0
    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;
	}