using System.Collections; using System.Collections.Generic; using System.IO; using System.Security.Cryptography; using UnityEngine; using Raumgleiter.BaseRGDK; using Raumgleiter.BaseRGDK.JSON; using Raumgleiter.BaseRGDK.Interface; using Raumgleiter.BaseRGDK.Development; public class ProcessingJSON : MonoBehaviour { //Connections //[Header("Connections")] //public GameObject LoadingScreen; // public GameObject iUniformSettings; //Resources //[Header("Resources")] //Attributes //[Header("Attributes")] public JSONNode Data; //Stats //[Header("Stats")] //Getter //Delegates //------------------------------------------------------------------------------------------------------------------ //awake protected void Awake() { } //------------------------------------------------------------------------------------------------------------------ //start protected void Start() { } //------------------------------------------------------------------------------------------------------------------ //setup public void SetUp() { Debug.Log("Processing::SetUp: Loaded JSON: " + Data.ToString()); } //------------------------------------------------------------------------------------------------------------------ //destroy //*********************************************************************************************************************** //update //*********************************************************************************************************************** //refresh //------------------------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------------------------ //*********************************************************************************************************************** //events //------------------------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------------------------ //*********************************************************************************************************************** //private, protected private IEnumerator ProcessTextures() { LoadingScreen.WorldReference.AddPhase("load metadata.json"); //Prepare Directory if (Directory.Exists(PathsLocal.GetOUT())) { Directory.Delete(PathsLocal.GetOUT(), true); } Directory.CreateDirectory(PathsLocal.GetOUT()); //if(!Directory.Exists(PathsLocal.GetOUT())) //{ // Directory.CreateDirectory(PathsLocal.GetOUT()); //} //Get Data JsonLoader.WorldReference.LoadJSON(); ProductManager[] ProcessedProductManagers = JsonLoader.WorldReference.GetProductManagers(); //Process Files while generating Data LoadingScreen.WorldReference.AddPhase("start processing files"); for (int i = 0; i < ProcessedProductManagers.Length; i++) { yield return StartCoroutine( ProcessProduct(ProcessedProductManagers[i])); } //Save to JSON JsonLoader.WorldReference.SaveJSON(); //Return to StartScreen AppManager.WorldReference.OnProcessingComplete(); yield break; } //------------------------------------------------------------------------------------------------------------------ private IEnumerator ProcessProduct(ProductManager product) { //Update LoadingScreen LoadingScreen.WorldReference.AddPhase(product.ProductID); //Go through Media for (int i = 0; i < product.Medias.Length; i++) { yield return StartCoroutine( ProcessMedia(product.Medias[i])); } //Wait yield return new WaitForSeconds(0f); } //------------------------------------------------------------------------------------------------------------------ private IEnumerator ProcessMedia(MediasManager media) { //Update LoadingScreen LoadingScreen.WorldReference.AddPhase(media.Title); //Check if file exists string MediaPath = FileSelection.WorldReference.GetSelectedPath() + "/" + media.Path; if(!File.Exists(MediaPath)) { ErrorPopup.WorldReference.AddMessage("File missing: " + media.Path); } //Create Textures media.Textures.Clear(); media.Textures.Add(CreateTexture(media, "Diffuse", "_rg_DIFF")); media.Textures.Add(CreateTexture(media, "Glossiness", "_rg_GLOSS")); media.Textures.Add(CreateTexture(media, "Bump", "_rg_BUMP")); media.Textures.Add(CreateTexture(media, "Physical", "_rg_PHYS")); media.Textures.Add(CreateTexture(media, "Normal", "_rg_NOR")); //Wait yield return new WaitForSeconds(0f); } //------------------------------------------------------------------------------------------------------------------ public TextureManager CreateTexture(MediasManager media, string type, string extension) { TextureManager ReturnedTextureData = new TextureManager(); //Fill in Data ReturnedTextureData.Title = media.Title; ReturnedTextureData.Type = type; //Get Paths string InputTexturePath = FileSelection.WorldReference.GetSelectedPath() + "/" + media.Path; FileInfo InputFileInfo = new FileInfo(InputTexturePath); string OutputTextureName = Path.GetFileNameWithoutExtension(InputTexturePath) + extension + InputFileInfo.Extension; string OutputTexturePath = PathsLocal.GetOUT() + "/" + OutputTextureName; //Save Path ReturnedTextureData.Path = OutputTextureName; //Copy Texture if (!File.Exists(OutputTexturePath)) { File.Copy(InputTexturePath, OutputTexturePath); } //Calculate Checksum ReturnedTextureData.Checksum = CreateMD5FromFile(OutputTexturePath); return ReturnedTextureData; } //------------------------------------------------------------------------------------------------------------------ public static string CreateMD5FromFile(string filePath) { //Prepare Variables MD5 Hash = MD5.Create(); //Start reading File FileStream Stream = File.OpenRead(filePath); if (Stream == null) { DBug.Log( "File is busy: " + filePath, "Processing::CreateTexture", VerbosityLevel._03_Critical); } //Create Hash byte[] ByteHash = Hash.ComputeHash(Stream); //Convert Base64 to HEX string StringHash = System.BitConverter.ToString(ByteHash).Replace("-", ""); StringHash = StringHash.ToLower(); //Stop reading File Stream.Close(); return StringHash; } //------------------------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------------------------ //*********************************************************************************************************************** //internal //------------------------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------------------------ //*********************************************************************************************************************** //public static //------------------------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------------------------ //*********************************************************************************************************************** //public //------------------------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------------------------ //*********************************************************************************************************************** //getter, setter //------------------------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------------------------ }