//Sends request to database to get an image public IEnumerator GetImage(int id, string dest) { RetinaImage retinaImage = new RetinaImage(); WWWForm form = new WWWForm(); form.AddField("id", id); form.AddField("clientType", "app"); using (UnityWebRequest www = UnityWebRequest.Post("http://ec2-13-58-160-235.us-east-2.compute.amazonaws.com/request.php", form)) { yield return(www.SendWebRequest()); if (www.isNetworkError || www.isHttpError) { Debug.Log(www.error); } else { Debug.Log("Webserver request complete"); string phrase = www.downloadHandler.text; retinaImage = JsonUtility.FromJson <RetinaImage>(phrase); Debug.Log("Retina image object updated."); SaveToFile(retinaImage, dest); runs--; } } }
//Gets all image files from folder to create buttons private IEnumerator findImages() { DirectoryInfo dir = new DirectoryInfo(folder); FileInfo[] info = dir.GetFiles(); FileStream f; foreach (FileInfo file in info) { RetinaImage retinaImage = new RetinaImage(); if (file.Extension.Contains("dat")) { yield return(f = File.OpenRead(file.FullName)); BinaryFormatter bf = new BinaryFormatter(); RetinaImage tempRetinaImage = (RetinaImage)bf.Deserialize(f); retinaImage.id = tempRetinaImage.id; retinaImage.name = tempRetinaImage.name; retinaImage.xSize = tempRetinaImage.xSize; retinaImage.ySize = tempRetinaImage.ySize; retinaImage.filetype = tempRetinaImage.filetype; retinaImage.official = tempRetinaImage.official; retinaImage.uploaded = tempRetinaImage.uploaded; retinaImage.image = tempRetinaImage.image; retinaImage.labels = tempRetinaImage.labels; f.Close(); StartCoroutine(makeButton(retinaImage)); } } }
//Saves image file from database public void SaveToFile(RetinaImage retinaImage, string dest) { FileStream file; file = File.Create(dest); BinaryFormatter bf = new BinaryFormatter(); bf.Serialize(file, retinaImage); file.Close(); StartCoroutine(makeButton(retinaImage)); }
//Creates a button with image private IEnumerator makeButton(RetinaImage retinaImage) { //Gets image bytes from file and creates texture to place on button byte[] imageBytes = Convert.FromBase64String(retinaImage.image); Texture2D texture = new Texture2D(retinaImage.xSize, retinaImage.ySize); yield return(texture.LoadImage(imageBytes)); GameObject newButton = Instantiate(button) as GameObject; newButton.transform.SetParent(buttonholder.transform, false); newButton.GetComponent <RawImage>().texture = texture; newButton.GetComponent <changeImage>().texture = texture; newButton.GetComponent <changeImage>().labels = retinaImage.labels; //Adds collider to button that spans the size of the cell of the grid layout group //The collider is only needed for VR BoxCollider collider = newButton.gameObject.AddComponent <BoxCollider>(); collider.size = new Vector3(buttonholder.GetComponent <GridLayoutGroup>().cellSize.x, buttonholder.GetComponent <GridLayoutGroup>().cellSize.y); }