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) {} } } } }
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); }
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); }
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); }