Пример #1
0
        public void Export(TextureFormat texture, Metadata.MetadataWriter metadata, string directory, string basename)
        {
            if (texture.GetType() != typeof(T))
            {
                throw new TextureFormatException("Wrong TextureFormat type, expected: " + typeof(T).FullName);
            }

            metadata.BeginSection(MetadataID);
            metadata.PutAttribute("Textures", texture.FramesCount);
            metadata.PutAttribute("Basename", basename);

            metadata.BeginSection("GeneralMetadata");
            OnExportGeneralTextureMetadata((T)texture, metadata);
            metadata.EndSection();

            int oldSelected = texture.SelectedFrame;

            for (int frame = 0; frame < texture.FramesCount; frame++)
            {
                texture.SelectedFrame = frame;

                metadata.BeginSection("FrameMetadata");
                metadata.PutAttribute("PalettesCount", texture.PalettesCount);
                metadata.PutAttribute("MipmapsCount", texture.MipmapsCount);

                OnExportFrameMetadata((T)texture, frame, metadata);
                metadata.EndSection();

                int   i = 0;
                Image referenceImage;
                ICollection <Image> list = ConstructImages(texture, out referenceImage);
                foreach (Image img in list)
                {
                    string fullPath = Path.Combine(directory, basename + "_layer" + frame + "_" + i++ + ".png");
                    if (img != null)
                    {
                        img.Save(fullPath);
                    }
                    else
                    {
                        File.WriteAllText(fullPath, string.Empty);
                    }
                }

                if (referenceImage != null)
                {
                    referenceImage.Save(Path.Combine(directory, basename + "_layer" + frame + "_reference.png"));
                }
            }
            texture.SelectedFrame = oldSelected;

            metadata.EndSection();
        }
Пример #2
0
 public static TexturePropertyGridObject Create(TextureFormat texture)
 {
     if (texture.GetType() == typeof(TIM2Texture))
     {
         return(new TIM2PropertyGridObject((TIM2Texture)texture));
     }
     else if (texture.GetType() == typeof(PE3DATTexture))
     {
         return(new PE3DATPropertyGridObject((PE3DATTexture)texture));
     }
     else if (texture.GetType() == typeof(NamcoTexture))
     {
         return(new NamcoTexturePropertyGridObject((NamcoTexture)texture));
     }
     else if (texture.GetType() == typeof(TPLTexture))
     {
         return(new TPLTexturePropertyGridObject((TPLTexture)texture));
     }
     else
     {
         return(new TexturePropertyGridObject(texture));
     }
 }
Пример #3
0
        public static bool ApplyTexture2DArray(Texture2DArrayManager manager)
        {
            Texture2D[] tex2DArray = Array.FindAll(manager.textureInputArray, tex => tex != null);

            if (tex2DArray.Length <= 0)
            {
                errorBuilder.Remove(0, errorBuilder.Length);
                Array.ForEach(tex2DArray, (tex) => errorBuilder.Append(tex.name).Append(" : ").Append(tex.width).Append(',').Append(tex.height).Append('\n'));

                Debug.LogErrorFormat("Fail to apply.. not exist texture in array.");
                return(false);
            }

            Texture2D firstTex = tex2DArray[0];
            int       width = firstTex.width, height = firstTex.height;

            if (!Array.TrueForAll(tex2DArray, (tex) => tex.width == width && tex.height == height))
            {
                errorBuilder.Remove(0, errorBuilder.Length);
                Array.ForEach(tex2DArray, (tex) => errorBuilder.Append(tex.name).Append(" : ").Append(tex.width).Append(',').Append(tex.height).Append('\n'));

                Debug.LogErrorFormat("Fail to apply.. all texture size must be same.\n{0}", errorBuilder.ToString());
                return(false);
            }

            TextureFormat format = firstTex.format;

            if (!Array.TrueForAll(tex2DArray, (tex) => tex.format == format))
            {
                format = TextureFormat.RGBA32;

                errorBuilder.Remove(0, errorBuilder.Length);
                Array.ForEach(tex2DArray, (tex) => errorBuilder.Append(tex.name).Append(" : ").Append(tex.format).Append('\n'));

                Debug.LogWarningFormat("All texture format is not same. Force {0}.{1} \n{2}", format.GetType().ToString(), format.ToString(), errorBuilder.ToString());
            }

            Texture2DArray realArray = manager.texture2DArray;

            if (IsDifferent(manager))
            {
                DestroyImmediate(manager.texture2DArray, true);

                realArray      = new Texture2DArray(width, height, tex2DArray.Length, format, false);
                realArray.name = "Texture2DArray";

                AssetDatabase.AddObjectToAsset(realArray, manager);

                manager.texture2DArray = realArray;

                Debug.LogWarning("Texture2DArray instance is re-created.");
            }

            for (int i = 0; i < tex2DArray.Length; i++)
            {
                for (int j = 0; j < tex2DArray[i].mipmapCount; j++)
                {
                    Graphics.CopyTexture(tex2DArray[i], 0, j, realArray, i, j);
                }
            }

            realArray.Apply(true);

            AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(manager));
            AssetDatabase.Refresh(ImportAssetOptions.ForceUpdate);

            return(true);
        }