void ExtractArt()
        {
            var      artpak = new PakFile(@"MCG_DATA\ART\ART.PAK");
            MCBitmap atlas;
            Dictionary <string, Rect> dict;

            for (int i = 0; i < artpak.PakInnerFileCount; i++)
            {
                var aux = artpak.GetFileInner(i);

                if (aux != null)
                {
                    if (aux[0] == 71 && aux[1] == 73 && aux[2] == 70)
                    {
                        System.IO.File.WriteAllBytes(@"a\" + i + ".gif", aux);
                    }
                    else
                    {
                        System.IO.File.WriteAllBytes(@"a\" + i + ".shp", aux);

                        try
                        {
                            var shp = new ShpFile(aux);
                            ImageProcessing.CreateAtlas(shp.GetBitMaps(), out atlas, out dict);
                            var MainText = ImageProcessing.MakeTexture2D(atlas, MechCommanderUnity.Instance.ContentReader.ShapesPakFile.Palette);
                            ImageProcessing.SaveTextureAsPng(MainText, @"a\" + i);
                        } catch (Exception)
                        {}
                    }
                }
            }
        }
Beispiel #2
0
        public bool GetAllShapes(int ObjIndex, out List <MCBitmap> lstImgs)
        {
            lstImgs = new List <MCBitmap>();

            if (!isReady)
            {
                return(false);
            }

            // Get block data

            var maxShp = shapesPakFile.PakInnerFileCount;

            bool result = false;

            var pakData = shapesPakFile.GetFileInner(ObjIndex);

            if (pakData == null)
            {
                pakData = shapes90PakFile.GetFileInner(ObjIndex);
            }
            if (pakData != null)
            {
                var pak = new PakFile(pakData);

                for (int i = 0; i < pak.PakInnerFileCount; i++)
                {
                    var shpdata = pak.GetFileInner(i);

                    if (shpdata != null)
                    {
                        result = true;
                        var shp = new ShpFile(shpdata);

                        lstImgs.AddRange(shp.GetBitMaps());
                    }
                }
            }

            return(result);
        }
Beispiel #3
0
        public bool GetShape(int ObjIndex, out List <MCBitmap> lstImgs, int innerShp = -1, int indexImg = -1)
        {
            lstImgs = new List <MCBitmap>();

            if (!isReady)
            {
                return(false);
            }

            // Get block data

            var maxShp = shapesPakFile.PakInnerFileCount;

            bool result = false;

            PakFile pak = null;

            if (!shapePakFiles.ContainsKey(ObjIndex))
            {
                var pakData = shapesPakFile.GetFileInner(ObjIndex);

                if (pakData == null)
                {
                    pakData = shapes90PakFile.GetFileInner(ObjIndex);
                }
                if (pakData != null)
                {
                    pak = new PakFile(pakData);
                    shapePakFiles.Add(ObjIndex, pak);
                }
            }
            else
            {
                pak = shapePakFiles[ObjIndex];
            }


            if (pak != null)
            {
                var shpdata = pak.GetFileInner(innerShp);

                Debug.Log("SHP: " + ObjIndex + " - " + innerShp);

                if (shpdata != null)
                {
                    result = true;

                    var shp = new ShpFile(shpdata);

                    if (indexImg > -1)
                    {
                        lstImgs.Add(shp.GetBitMap(indexImg));
                    }
                    else
                    {
                        lstImgs.AddRange(shp.GetBitMaps());
                    }
                }
            }

            if (!result)
            {
                MechCommanderUnity.LogMessage(string.Format("Unknown Shape '{0}' '{1}' '{2}'.", ObjIndex, innerShp, indexImg), true);
                return(false);
            }

            return(true);
        }
Beispiel #4
0
        public bool GetShapes(int ObjIndex, out List <MCBitmap> lstImgs, List <int> shpIds)
        {
            lstImgs = new List <MCBitmap>();

            if (!isReady)
            {
                return(false);
            }

            // Get block data

            var maxShp = shapesPakFile.PakInnerFileCount;

            bool result = false;

            PakFile pak = null;

            try
            {
                if (!shapePakFiles.ContainsKey(ObjIndex))
                {
                    var pakData = shapesPakFile.GetFileInner(ObjIndex);

                    if (pakData == null)
                    {
                        pakData = shapes90PakFile.GetFileInner(ObjIndex);
                    }
                    if (pakData != null)
                    {
                        pak = new PakFile(pakData);
                        shapePakFiles.Add(ObjIndex, pak);
                    }
                }
                else
                {
                    pak = shapePakFiles[ObjIndex];
                }


                if (pak != null)
                {
                    foreach (var innerShp in shpIds)
                    {
                        var shpdata = pak.GetFileInner(innerShp);

                        if (shpdata != null)
                        {
                            result = true;
                            var shp = new ShpFile(shpdata);

                            var lstBmps = shp.GetBitMaps();
                            for (int i = 0; i < lstBmps.Length; i++)
                            {
                                if (lstBmps[i] == null)
                                {
                                    continue;
                                    Debug.Log("BMP Vacio exportando: " + ObjIndex + " - " + innerShp + " : " + i);
                                    lstBmps[i] = new MCBitmap(1, 1);
                                }
                                lstBmps[i].Name = innerShp + "-" + i;
                            }
                            lstImgs.AddRange(lstBmps.Where(x => x != null).ToArray());
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                return(false);
            }

            if (!result)
            {
                MechCommanderUnity.LogMessage(string.Format("Unknown Shape '{0}' '{1}' t:{2}.", ObjIndex, string.Join(",", shpIds.Select(x => x.ToString()).ToArray()), pak.PakInnerFileCount), true);
                return(false);
            }

            return(true);
        }
    static IEnumerator CreateMaterialLibrary()
    {
        Debug.Log("Coruotine: ");

        var pal = new MCPalette(@"HB.pal");

        var pak = new PakFile(@"04-Cougar.PAK");

        //   AssetDatabase.StartAssetEditing();

        float progressBar = 0.0f;

        EditorUtility.DisplayProgressBar("Creating Textures",
                                         "Working...",
                                         progressBar);

        for (int index = 65; index < 400; index++)
        {
            try
            {
                //var index = 65;


                var shpdata = pak.GetFileInner(index);

                if (shpdata == null)
                {
                    continue;
                }

                var shp = new ShpFile(shpdata);

                var bitmaps = shp.GetBitMaps();
                if (bitmaps.Length == 0)
                {
                    continue;
                }

                List <Texture2D> lstTextures = new List <Texture2D>();

                foreach (var bmp in bitmaps)
                {
                    MCSize    sz;
                    Color32[] albedoColors = MCBitmap.GetColor32(bmp, pal, 0, 0, out sz);

                    // Debug.Log(bitmaps.Length);

                    Texture2D albedoMap = null;
                    albedoMap = new Texture2D(sz.Width, sz.Height, TextureFormat.RGBA32, false);
                    albedoMap.SetPixels32(albedoColors);
                    albedoMap.alphaIsTransparency = true;
                    albedoMap.Apply(true, false);

                    lstTextures.Add(albedoMap);
                }

                Texture2D atlas = new Texture2D(1, 1, TextureFormat.ARGB32, false);

                var rects = atlas.PackTextures(lstTextures.ToArray(), 0);
                atlas.alphaIsTransparency = true;
                atlas.filterMode          = FilterMode.Point;
                atlas.wrapMode            = TextureWrapMode.Clamp;

                atlas.Apply();
                byte[] bytes = (atlas as Texture2D).EncodeToPNG();

                // For testing purposes, also write to a file in the project folder
                File.WriteAllBytes(Application.dataPath + "./Sprites/Tests/" + "04-Cougar.PAK-" + index + ".png", bytes);

                Shader   shader   = Shader.Find("Sprites/Default");
                Material material = new Material(shader);

                //material.SetFloat("_Mode", (int)0);
                //material.SetFloat("_SmoothnessTextureChannel", (int)1);
                //material.SetFloat("_Metallic", 0);
                //material.SetFloat("_Glossiness", 1);
                //material.SetOverrideTag("RenderType", "TransparentCutout");
                //material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);
                //material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero);
                //material.SetInt("_ZWrite", 1);
                //material.EnableKeyword("_ALPHATEST_ON");
                //material.DisableKeyword("_ALPHABLEND_ON");
                //material.DisableKeyword("_ALPHAPREMULTIPLY_ON");
                //material.renderQueue = (int)UnityEngine.Rendering.RenderQueue.AlphaTest;


                material.name        = "testmaterial";
                material.mainTexture = atlas;

                material.mainTexture.filterMode = FilterMode.Point;
                //material.mainTextureOffset = new Vector2(rects[0].x, rects[0].y);
                //material.mainTextureScale = new Vector2(rects[0].width, rects[0].height);


                var go         = new GameObject();
                var rend       = go.AddComponent <MeshRenderer>();
                var meshFilter = go.AddComponent <MeshFilter>();
                rend.material             = material;
                rend.sharedMaterial       = material;
                rend.shadowCastingMode    = UnityEngine.Rendering.ShadowCastingMode.Off;
                rend.receiveShadows       = false;
                rend.lightProbeUsage      = UnityEngine.Rendering.LightProbeUsage.Off;
                rend.reflectionProbeUsage = UnityEngine.Rendering.ReflectionProbeUsage.Off;

                // Vertices for a 1x1 unit quad
                // This is scaled to correct size depending on facing and orientation
                float     hx = 0.5f, hy = 0.5f;
                Vector3[] vertices = new Vector3[4];

                vertices[0] = new Vector3(-hx, hy, 0);
                vertices[1] = new Vector3(hx, hy, 0);
                vertices[2] = new Vector3(-hx, -hy, 0);
                vertices[3] = new Vector3(hx, -hy, 0);

                // Indices
                int[] triangles = new int[6]
                {
                    0, 1, 2,
                    3, 2, 1,
                };

                // Normals
                Vector3   normal  = Vector3.Normalize(Vector3.up + Vector3.forward);
                Vector3[] normals = new Vector3[4];
                normals[0] = normal;
                normals[1] = normal;
                normals[2] = normal;
                normals[3] = normal;

                // Create mesh
                Mesh mesh = new Mesh();
                mesh.name      = string.Format("MobileEnemyMesh");
                mesh.vertices  = vertices;
                mesh.triangles = triangles;
                mesh.normals   = normals;

                Vector2[] uvs  = new Vector2[4];
                var       rect = rects[0];
                uvs[0] = new Vector2(rect.x, rect.yMax);
                uvs[1] = new Vector2(rect.xMax, rect.yMax);
                uvs[2] = new Vector2(rect.x, rect.y);
                uvs[3] = new Vector2(rect.xMax, rect.y);

                // Assign mesh
                meshFilter.sharedMesh    = mesh;
                meshFilter.sharedMesh.uv = uvs;
                //  AssetDatabase.CreateAsset(material, "Assets/Sprites/Tests/" + "04-Cougar.PAK-" + index + ".mat");
                //AssetDatabase.SaveAssets();
                //AssetDatabase.Refresh();
                //  DestroyImmediate(atlas);
                //foreach (var text in lstTextures)
                //{
                //    DestroyImmediate(text);
                //}
            } catch (System.Exception e)
            {
                Debug.Log(e.Message);
                EditorUtility.ClearProgressBar();
                throw;
            }

            progressBar = (float)(index / 4f);

            Debug.Log(progressBar);
            if ((index % 12f) == 0)
            {
                Debug.Log("Update ->" + progressBar);
                EditorUtility.DisplayProgressBar("Creating Textures",
                                                 "Working...",
                                                 progressBar);
            }



            yield return(true);

            break;
        }

        //   AssetDatabase.SaveAssets();
        //  AssetDatabase.Refresh();

        EditorUtility.ClearProgressBar();
        yield return(true);

        Debug.Log("Coruotine2: ");
        yield return(null);
    }