Exemple #1
0
    public static void BuildCollection(tmTextureCollection collection)
    {
        if (collection != null)
        {
            collection.textureDefenitions.RemoveAll(f => !collection.Textures.Contains(f.texture));
            foreach (Texture2D texture in collection.Textures)
            {
                if (texture != null)
                {
                    tmTextureDefenition textureRef = collection.textureDefenitions.Find(f => f.texture == texture);
                    if (textureRef == null)
                    {
                        textureRef             = new tmTextureDefenition();
                        textureRef.texture     = texture;
                        textureRef.textureName = tmUtility.PlatformlessPath(texture.name);                         // should attach to name ? or guid better

                        textureRef.textureGuid = tmEditorUtility.AssetToGUID(texture);
                        textureRef.assetGuid   = tmEditorUtility.AssetToGUID(texture);

                        collection.textureDefenitions.Add(textureRef);
                    }
                }
            }

            EditorUtility.SetDirty(collection);
            AssetDatabase.SaveAssets();
            AssetDatabase.Refresh();

            BuildPlatformCollections(collection);

            collection = tmEditorUtility.GUIDToAsset(collection.assetGuid, typeof(tmTextureCollection)) as tmTextureCollection;
            tmIndex.Instance.RegisterCollection(collection);
        }
    }
Exemple #2
0
    public static void UpdatePlatformCollection(tmTextureCollectionPlatform collectionPlatform, List <Texture2D> originalTextures)
    {
        collectionPlatform.Textures.Clear();
        collectionPlatform.textureDefenitions.RemoveAll(def => !originalTextures.Contains(def.texture));
        foreach (var texture in originalTextures)
        {
            if (texture != null)
            {
                tmTextureDefenition textureRef = collectionPlatform.textureDefenitions.Find(f => f.texture == texture);
                if (textureRef == null)
                {
                    textureRef             = new tmTextureDefenition();
                    textureRef.texture     = texture;
                    textureRef.textureName = tmUtility.PlatformlessPath(texture.name);
                    textureRef.textureGuid = tmEditorUtility.AssetToGUID(texture);
                    textureRef.assetGuid   = tmEditorUtility.AssetToGUID(texture);
                    collectionPlatform.textureDefenitions.Add(textureRef);
                }

                string originalPath = AssetDatabase.GetAssetPath(texture);
                ConfigureSpriteTextureImporter(originalPath);

                bool  rebuild           = false;
                ulong originalTimestamp = tmEditorUtility.Hash(texture);
                rebuild |= (originalTimestamp != textureRef.originalTimestamp);
                if (textureRef.platformTexture != null)
                {
                    ulong platformTimestamp = tmEditorUtility.Hash(textureRef.platformTexture);
                    rebuild |= (platformTimestamp != textureRef.platformTimestamp);
                }

                Texture2D asset = PlatformSpecifiedTexture(textureRef.texture, collectionPlatform.platform, rebuild);
                if (asset != null)
                {
                    string platformTexturePath = AssetDatabase.GetAssetPath(asset);
                    ConfigureSpriteTextureImporter(platformTexturePath);

                    textureRef.platformTexture   = asset;
                    textureRef.textureName       = tmUtility.PlatformlessPath(textureRef.platformTexture.name);
                    textureRef.assetGuid         = tmEditorUtility.AssetToGUID(textureRef.platformTexture);
                    textureRef.platformTimestamp = tmEditorUtility.Hash(textureRef.platformTexture);
                    textureRef.originalTimestamp = originalTimestamp;
                }
            }
        }

        collectionPlatform.textureDefenitions.Sort((a, b) => (string.Compare(a.textureName, b.textureName, System.StringComparison.OrdinalIgnoreCase)));

        EditorUtility.SetDirty(collectionPlatform);
        AssetDatabase.SaveAssets();
        AssetDatabase.Refresh();

        tmCollectionBuilder.BuildAtlas(collectionPlatform);

        CreatePlatformResourceLink(collectionPlatform);

        collectionPlatform = tmEditorUtility.GUIDToAsset(collectionPlatform.assetGuid, typeof(tmTextureCollectionPlatform)) as tmTextureCollectionPlatform;
        tmIndex.Instance.RegisterPlatformCollection(collectionPlatform);
    }
Exemple #3
0
    public void RemapUV(ref Mesh mesh, tmTextureDefenition mainTextureDefenition, tmTextureDefenition lightmapTextureDefenition)
    {
        if (!tmSettings.Instance.rebuildMesh)
        {
            return;
        }

        //============================ recalculate uv ============================
        Vector2[] oldUVs = mesh.uv;
        if (oldUVs != null && oldUVs.Length > 0)
        {
            Vector2 oldUV, newUV;

            Rect uvRect = mainTextureDefenition.uv;
            Rect offset = mainTextureDefenition.offset;
            uvRect.center += offset.center;
            uvRect.size   += offset.size;

            int vertexCount = oldUVs.Length;
            for (int i = 0; i < vertexCount; i++)
            {
                oldUV = oldUVs[i];
                newUV = new Vector2(
                    uvRect.x + uvRect.width * oldUV.x,
                    uvRect.y + uvRect.height * oldUV.y
                    );
                oldUVs[i] = newUV;
            }

            mesh.uv = oldUVs;
        }

        //==========================recalculate uv2===============================
        if (lightmapTextureDefenition != null)
        {
            Vector2[] oldUVs2 = mesh.uv2;

            if (oldUVs2 != null && oldUVs2.Length > 0)
            {
                Rect uvRect = lightmapTextureDefenition.uv;
                Rect offset = lightmapTextureDefenition.offset;
                uvRect.center += offset.center;
                uvRect.size   += offset.size;

                int vertexCount = oldUVs2.Length;
                for (int i = 0; i < vertexCount; i++)
                {
                    Vector2 oldUV2 = oldUVs2[i];
                    Vector2 newUV2 = new Vector2(
                        uvRect.x + uvRect.width * oldUV2.x,
                        uvRect.y + uvRect.height * oldUV2.y
                        );
                    oldUVs2[i] = newUV2;
                }

                mesh.uv2 = oldUVs2;
            }
        }
    }
    static bool TexturePopup(string label, tmTextureCollectionBase collection, ref string texureID)
    {
        int           entryIndex  = 0;
        List <string> texureNames = new List <string>();

        texureNames.Add("-");

        if (collection != null)
        {
            for (int i = 0; i < collection.textureDefenitions.Count; i++)
            {
                tmTextureDefenition def = collection.textureDefenitions[i];
                texureNames.Add(def.textureName);

                if (def.textureGuid.Equals(texureID))
                {
                    entryIndex = i + 1;
                }
            }
        }

        int lastIndex = entryIndex;

        entryIndex = EditorGUILayout.Popup(label, entryIndex, texureNames.ToArray());

        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.PrefixLabel(" ");
        Rect rect = EditorGUILayout.GetControlRect(GUILayout.Width(100), GUILayout.Height(100));

        EditorGUI.DrawRect(rect, Color.black);
        if (entryIndex != -1)
        {
            if (entryIndex == 0)
            {
                texureID = "";
            }
            else
            {
                tmTextureDefenition def = collection.textureDefenitions[entryIndex - 1];
                EditorGUI.DrawTextureTransparent(rect, def.texture, ScaleMode.ScaleToFit, def.texture == null ? 1f : (def.texture.width * 1f / def.texture.height));
                texureID = def.textureGuid;

                if (rect.Contains(Event.current.mousePosition))
                {
                    if (Event.current.clickCount == 1)
                    {
                        if (def.texture)
                        {
                            EditorGUIUtility.PingObject(def.texture);
                        }
                        Event.current.Use();
                    }
                }
            }
        }
        EditorGUILayout.EndHorizontal();

        return(lastIndex != entryIndex);
    }
Exemple #5
0
    public tmTextureDefenition Copy()
    {
        tmTextureDefenition tr = new tmTextureDefenition();

                #if UNITY_EDITOR
        tr.texture         = texture;
        tr.platformTexture = platformTexture;
                #endif
        tr.textureName       = textureName;
        tr.textureGuid       = textureGuid;
        tr.assetGuid         = assetGuid;
        tr.originalTimestamp = originalTimestamp;
        tr.platformTimestamp = platformTimestamp;
        tr.offset            = offset;

        return(tr);
    }
Exemple #6
0
    protected virtual void BuildMesh()
    {
        if (Mesh != null && !string.IsNullOrEmpty(MainTextureID) && MainTexCollection != null)
        {
            tmTextureDefenition mainTextureDefenition = MainTextureDefenition;

            if (mainTextureDefenition != null)
            {
                tmTextureDefenition lightmapTextureDefenition = LightmapTextureDefenition;

                if ((ModifiedFlag & (ModifiedFlags.ModifiedMesh | ModifiedFlags.ModifiedUV1 | ModifiedFlags.ModifiedUV2)) != 0)
                {
                    tmManager.Instance.MeshInstance(Mesh, out sharedMesh, mainTextureDefenition, lightmapTextureDefenition, false);
                    RenderSharedMesh = sharedMesh;
                }
            }
        }

        ModifiedFlag &= ~(ModifiedFlags.ModifiedMesh | ModifiedFlags.ModifiedUV1 | ModifiedFlags.ModifiedUV2);
    }
    public override void OnInspectorGUI()
    {
//		EyeDropper.GetPickedColor();
//		System.Type eyeDropperType = GetType("EyeDropper");
//		MethodInfo mi = eyeDropperType.GetMethod("GetPickedColor", BindingFlags.Public | BindingFlags.Static | BindingFlags.DeclaredOnly);
//		FieldInfo fi = eyeDropperType.GetField("s_PickCoordinates", BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.DeclaredOnly);
//		Vector2 a = GUIUtility.GUIToScreenPoint(Event.current.mousePosition);
//		fi.SetValue(null, a);
//		Debug.Log(fi);
//		Debug.Log(mi);
//		Color c = (Color)mi.Invoke(null, null);
//
//
//		EditorGUILayout.ColorField(Color.white);
//		Debug.Log(
//			"r:" + ((int)(c.r * 256)) +
//			" g:" + ((int)(c.g * 256)) +
//			" b:" + ((int)(c.b * 256)) +
//			" a:" + ((int)(c.a * 256))
//		);
        baseEditor.OnInspectorGUI();

        GUILayout.Space(20);

        TextureImporter textureImporter = (TextureImporter)target;

        tmTextureCollectionIndex currentCollectionIndex = tmIndex.Instance.CollectionIndexForTexturePath(textureImporter.assetPath);

        string[] names = new string[tmIndex.Instance.TextureCollections.Count];

        int index = -1;

        for (int i = 0; i < tmIndex.Instance.TextureCollections.Count; i++)
        {
            tmTextureCollectionIndex collectionIndex = tmIndex.Instance.TextureCollections[i];
            names[i] = collectionIndex.name;

            if (collectionIndex.Equals(currentCollectionIndex))
            {
                index = i;
            }
        }

        if (newIndex < -1)
        {
            newIndex = index;
        }
        newIndex = EditorGUILayout.Popup("Texture Atlas", newIndex, names);

        if (newIndex > 0)
        {
            tmTextureCollectionIndex collectionIndex = tmIndex.Instance.TextureCollections[newIndex];
            string collectionGUID                  = collectionIndex.textureCollectionGUID;
            string collectionGuidPath              = tmUtility.PathForPlatform(collectionGUID, tmSettings.Instance.CurrentPlatform);
            tmResourceCollectionLink    link       = tmUtility.ResourceLinkByGUID(collectionGuidPath);
            tmTextureCollectionPlatform collection = link.collectionInEditor;
            collection.LoadTexture();
            Texture2D atlas = collection.Atlas;

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.PrefixLabel(" ");
            Rect rect = EditorGUILayout.GetControlRect(GUILayout.Width(150f * atlas.width / atlas.height), GUILayout.Height(150f));
            EditorGUI.DrawRect(rect, Color.black);
            EditorGUI.DrawTextureTransparent(rect, atlas, ScaleMode.ScaleToFit);
            EditorGUILayout.EndHorizontal();

            Object asset = tmEditorUtility.GUIDToAsset(collection.AtlasAssetGUID, typeof(Object));
            if (rect.Contains(Event.current.mousePosition))
            {
                if (Event.current.clickCount == 1)
                {
                    if (asset)
                    {
                        EditorGUIUtility.PingObject(asset);
                    }
                    Event.current.Use();
                }
            }
        }

        GUILayout.BeginHorizontal();
        {
            if (currentCollectionIndex != null)
            {
                EditorGUILayout.PrefixLabel(" ");

                if (GUILayout.Button("Remove from atlas"))
                {
                    newIndex = -1;
                }
            }

            GUILayout.FlexibleSpace();

            bool enabled = GUI.enabled;
            GUI.enabled = index != newIndex;

            if (GUILayout.Button("Revert"))
            {
                newIndex = -2;
            }
            if (GUILayout.Button("Apply"))
            {
                if (currentCollectionIndex != null)
                {
                    tmTextureCollection collection = tmEditorUtility.GUIDToAsset(currentCollectionIndex.assetGUID, typeof(tmTextureCollection)) as tmTextureCollection;
                    Debug.Log(collection);
                    if (collection)
                    {
                        tmTextureDefenition def = collection.GetTextureDefenitionByID(AssetDatabase.AssetPathToGUID(textureImporter.assetPath));
                        if (def != null)
                        {
                            Debug.Log(def.texture);

                            collection.textureDefenitions.Remove(def);
                            collection.Textures.Remove(def.texture);
                            EditorUtility.SetDirty(collection);

                            tmCollectionBuilder.BuildCollection(collection);
                        }
                    }
                }

                if (newIndex > 0)
                {
                    tmTextureCollectionIndex newCollectionIndex = tmIndex.Instance.TextureCollections[newIndex];
                    tmTextureCollection      collection         = tmEditorUtility.GUIDToAsset(newCollectionIndex.assetGUID, typeof(tmTextureCollection)) as tmTextureCollection;
                    collection.Textures.Add(AssetDatabase.LoadAssetAtPath(textureImporter.assetPath, typeof(Texture2D)) as Texture2D);
                    EditorUtility.SetDirty(collection);

                    tmCollectionBuilder.BuildCollection(collection);
                }

                AssetDatabase.SaveAssets();
                AssetDatabase.Refresh();
            }

            GUI.enabled = enabled;
        }
        GUILayout.EndHorizontal();

        GUILayout.FlexibleSpace();

        GUILayout.Label("Description");
        GUILayout.BeginHorizontal("Box");
        {
            textureImporter.userData = GUILayout.TextField(textureImporter.userData, GUI.skin.label);
        }
        GUILayout.EndHorizontal();

//		EditorGUILayout.LabelField("test label");
    }
Exemple #8
0
    public void MeshInstance(Mesh original, out Mesh sharedMesh, tmTextureDefenition mainTextureDef, tmTextureDefenition lightmapTextureDef, bool makeNoLongerReadable)
    {
        string key =
            "mesh" +
            original.GetHashCode() +
            (mainTextureDef != null ? mainTextureDef.textureGuid : "") +
            (lightmapTextureDef != null ? lightmapTextureDef.textureGuid : "");

        string keys =
            "" +
            (mainTextureDef != null ? mainTextureDef.textureName : "") +
            (lightmapTextureDef != null ? lightmapTextureDef.textureName : "");

        sharedMesh = null;
        WeakReference meshRef        = null;
        int           originalMeshID = original.GetInstanceID();

        if (meshMap.TryGetValue(key, out meshRef))
        {
            if (meshRef.IsAlive && !meshRef.Target.IsNull())
            {
                sharedMesh = meshRef.Target as Mesh;
            }
            else
            {
                meshMap.Remove(key);
                destroyedMeshes.Remove(originalMeshID);
            }
        }

        if (sharedMesh == null)
        {
            if (Application.isPlaying && destroyedMeshes.ContainsKey(originalMeshID))
            {
                CustomDebug.LogError("duplicate : " + original.name + "  " + keys + " vs " + destroyedMeshes[originalMeshID]);
            }

            if (!original.isReadable)
            {
                CustomDebug.LogError("NOT READABLE = " + original.name);
            }

            sharedMesh =
                #if UNITY_EDITOR
                Instantiate(original) as Mesh;
                #else
                keepImMemoryMeshes.Contains(original) ? (Instantiate(original) as Mesh) : original;
                #endif

            #if UNITY_EDITOR
            sharedMesh.hideFlags = HideFlags.HideAndDontSave;
            #endif

            sharedMesh.name = original.name + "_" + mainTextureDef.textureName;
            meshRef         = new WeakReference(sharedMesh);
            meshMap.Add(key, meshRef);

            if (!keepImMemoryMeshes.Contains(original))
            {
                if (!destroyedMeshes.ContainsKey(originalMeshID))
                {
                    destroyedMeshes.Add(originalMeshID, keys);
                }
            }

            RemapUV(ref sharedMesh, mainTextureDef, lightmapTextureDef);
            if (makeNoLongerReadable)
            {
                sharedMesh.UploadMeshData(true);
            }
        }
    }