public static TilePreviewBoardAsset GetSelectedTileAsset() { try { var test = (SingleBuilderBoardTool)SingletonBehaviour <SingleBuilderBoardTool> .Instance; } catch {} var flags = BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Static; if (SingletonBehaviour <BoardToolManager> .HasInstance && (SingletonBehaviour <BoardToolManager> .Instance.IsCurrentTool <SingleBuilderBoardTool>())) { var btm = (SingleBuilderBoardTool)SingletonBehaviour <SingleBuilderBoardTool> .Instance; TilePreviewBoardAsset selectedAsset = (TilePreviewBoardAsset)btm.GetType().GetField("_selectedTileBoardAsset", flags).GetValue(btm); return(selectedAsset); } else { return(null); } }
private void AssetFlip() { var origCursor = UnityEngine.Cursor.visible; try { var test = (SingleBuilderBoardTool)SingletonBehaviour <SingleBuilderBoardTool> .Instance; } catch { // pass } try { UnityEngine.Cursor.visible = true; OpenFileName ofn = new OpenFileName(); ofn.structSize = Marshal.SizeOf(ofn); ofn.filter = "Obj Files\0*.obj\0\0"; ofn.file = new string(new char[256]); ofn.maxFile = ofn.file.Length; ofn.fileTitle = new string(new char[64]); ofn.maxFileTitle = ofn.fileTitle.Length; ofn.initialDir = UnityEngine.Application.dataPath; ofn.title = "Select OBJ File"; ofn.defExt = "OBJ"; ofn.flags = 0x00080000 | 0x00001000 | 0x00000800 | 0x00000200 | 0x00000008;//OFN_EXPLORER|OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST| OFN_ALLOWMULTISELECT|OFN_NOCHANGEDIR if (DllTest.GetOpenFileName(ofn)) { var catPath = ofn.file; // We have to first grab the CameraController._targetZoomLerpValue to disable the movement when our rotate is happening. This is the only way to prevent zooming while we are rotating var flags = BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Static; if (SingletonBehaviour <BoardToolManager> .HasInstance && (SingletonBehaviour <BoardToolManager> .Instance.IsCurrentTool <SingleBuilderBoardTool>())) { var btm = (SingleBuilderBoardTool)SingletonBehaviour <SingleBuilderBoardTool> .Instance; TilePreviewBoardAsset selectedAsset = (TilePreviewBoardAsset)btm.GetType().GetField("_selectedTileBoardAsset", flags).GetValue(btm); UnityEngine.Debug.Log("Selected Asset: " + selectedAsset); AssetLoader[] assetLoaders = (AssetLoader[])selectedAsset.GetType().GetField("_assetLoaders", flags).GetValue(selectedAsset); UnityEngine.Debug.Log("Asset Loaders: " + assetLoaders); Mesh newMesh = FastObjImporter.Instance.ImportFile(catPath); for (int i = 0; i < assetLoaders.Length; i++) { UnityEngine.Debug.Log("Asset Loader: " + assetLoaders[i].Guid + " : " + assetLoaders[i].assetName + " : " + assetLoaders[i].assetBundlePath); //var w = new WWW("file://Users/Paulo/Desktop/img_2013_008_original.jpg"); UnityEngine.Debug.Log("New Mesh: " + newMesh.name + " : " + newMesh.vertices.Length); //Mesh holderMesh = new Mesh(); //ObjImporter objImport = new ObjImporter(); //holderMesh = objImport.ImportFile("E:\\Projects\\Talespirehax\\TestImport\\12222_Cat_v1_l3.obj"); //Material mat = new Material(Shader.Find("Standard")); GameObject loadedAsset = (GameObject)assetLoaders[i].GetType().GetField("_loadedAsset", flags).GetValue(assetLoaders[i]); //var newMesh = (new OBJLoader().Load(catPath)).GetComponent<MeshFilter>().mesh; UnityEngine.Debug.Log("New Mesh: " + newMesh.name + " : " + newMesh.vertices.Length); loadedAsset.GetComponent <MeshFilter>().mesh = newMesh; } var catMtl = Path.ChangeExtension(ofn.file, ".mtl"); // This is silly, it replaces every single mesh with the new mesh. //MeshFilter[] mfs = FindObjectsOfType<MeshFilter>(); //for (int i = 0; i < mfs.Length; i++) //{ // try // { // mfs[i].mesh = newMesh; // } // catch // { // // // } //} for (int i = 0; i < selectedAsset.Renderers.Length; i++) { try { UnityEngine.Debug.Log("Renderer Name: " + selectedAsset.Renderers[i].name); //Color[] colors = selectedAsset.Renderers[i].material //Dictionary<string, Material> materials = new MTLLoader().Load(catMtl, selectedAsset.Renderers[i].material); //foreach (string key in materials.Keys) //{ // UnityEngine.Debug.Log("Mat: " + key); //} //selectedAsset.Renderers[i].material = materials.GetEnumerator().Current.Value; var catTexturePath = "E:/Projects/Talespirehax/TestImport/Cat_diffuse.jpg"; //selectedAsset.Renderers[i].material.doubleSidedGI = true; //Texture2D catTexture = new MTLLoader().TryLoadTexture(catTexturePath); //Texture2D tex = new Texture2D(16, 16, TextureFormat.PVRTC_RGBA4, false); //byte[] pvrtcBytes = new byte[] //{ // 0x30, 0x32, 0x32, 0x32, 0xe7, 0x30, 0xaa, 0x7f, 0x32, 0x32, 0x32, 0x32, 0xf9, 0x40, 0xbc, 0x7f, // 0x03, 0x03, 0x03, 0x03, 0xf6, 0x30, 0x02, 0x05, 0x03, 0x03, 0x03, 0x03, 0xf4, 0x30, 0x03, 0x06, // 0x32, 0x32, 0x32, 0x32, 0xf7, 0x40, 0xaa, 0x7f, 0x32, 0xf2, 0x02, 0xa8, 0xe7, 0x30, 0xff, 0xff, // 0x03, 0x03, 0x03, 0xff, 0xe6, 0x40, 0x00, 0x0f, 0x00, 0xff, 0x00, 0xaa, 0xe9, 0x40, 0x9f, 0xff, // 0x5b, 0x03, 0x03, 0x03, 0xca, 0x6a, 0x0f, 0x30, 0x03, 0x03, 0x03, 0xff, 0xca, 0x68, 0x0f, 0x30, // 0xaa, 0x94, 0x90, 0x40, 0xba, 0x5b, 0xaf, 0x68, 0x40, 0x00, 0x00, 0xff, 0xca, 0x58, 0x0f, 0x20, // 0x00, 0x00, 0x00, 0xff, 0xe6, 0x40, 0x01, 0x2c, 0x00, 0xff, 0x00, 0xaa, 0xdb, 0x41, 0xff, 0xff, // 0x00, 0x00, 0x00, 0xff, 0xe8, 0x40, 0x01, 0x1c, 0x00, 0xff, 0x00, 0xaa, 0xbb, 0x40, 0xff, 0xff, //}; //// Load data into the texture and upload it to the GPU. //tex.LoadRawTextureData(pvrtcBytes); //tex.Apply(); UnityEngine.Debug.Log("Shader: " + selectedAsset.Renderers[i].material.shader.name); Material newMat = new Material(Shader.Find("Standard")); newMat.CopyPropertiesFromMaterial(selectedAsset.Renderers[i].material); selectedAsset.Renderers[i].material = newMat; Texture2D catTexture = LoadPNG(catTexturePath); selectedAsset.Renderers[i].material.mainTexture = catTexture; var catBumpTexturePath = "E:/Projects/Talespirehax/TestImport/Cat_bump.jpg"; Texture2D catBumpTexture = LoadPNG(catBumpTexturePath); //Texture2D catBumpTexture = new MTLLoader().TryLoadTexture(catBumpTexturePath); selectedAsset.Renderers[i].material.SetTexture("_BumpMap", catBumpTexture); //Color cl = selectedAsset.Renderers[i].material.color; //float scale = selectedAsset.Renderers[i].material.shader = //UnityEngine.Debug.Log("Bump Scale: " + scale); //selectedAsset.Renderers[i].material.SetFloat("_BumpScale", 0f); //selectedAsset.Renderers[i].material.SetColor("_BumpMap", new Color(cl.r, cl.g, cl.b, 0.5f));// .a = 0; } catch { // } // After adjusting don't forget to push it back to TaleSpire so they can keep track of it. // btm.GetType().GetField("_angle", flags).SetValue(btm, angle); } } } } catch (System.Exception ex) { UnityEngine.Debug.Log("Crash in Asset Preview Plugin"); UnityEngine.Debug.Log(ex.Message); UnityEngine.Debug.Log(ex.StackTrace); UnityEngine.Debug.Log(ex.InnerException); UnityEngine.Debug.Log(ex.Source); } UnityEngine.Cursor.visible = origCursor; }