using System; using System.Collections; using System.Collections.Generic; using System.IO; using UnityEngine; using UnityEngine.UI; using UnityEngine.Video; public class GamesResourcesFinder : MonoBehaviour { public static GamesResourcesFinder instance; public string resourcePath; public bool gameReady = false; [System.Serializable] public class ArchiveDownload { public string resource; public bool isImg; } [System.Serializable] public class ImageArchive { public string resource; public Sprite img; } [System.Serializable] public class VideoArchive { public string resource, fullPath; } [System.Serializable] public class SongArchive { public string resource; public AudioClip clip; } public List downloads; public List images; public List videos; public List audios; public bool waitToCallDownload = false; int extraDownloads = 0; private void Awake() { instance = this; if (!waitToCallDownload) { Debug.Log("Por aqui em cima"); StartCoroutine(DownloadEverything()); } } public void AddObjectsOnFirstDownload(List archives) { downloads.AddRange(archives); } public void CallFirstDownload() { Debug.Log("Por aqui em baixo"); StartCoroutine(DownloadEverything()); } public Sprite AskForImage(string name) { foreach (ImageArchive item in images) { if (item.resource == name) { return item.img; } } return null; } public string AskForVideo(string name) { foreach (VideoArchive item in videos) { if (item.resource == name) { return item.fullPath; } } return ""; } public AudioClip AskForAudio(string name) { Debug.Log("Qntdade de audios = " + audios.Count); foreach (SongArchive item in audios) { Debug.Log(item.resource + ", " + name); if (item.resource == name) { return item.clip; } } return null; } public void AddObjNDownload(List res) { downloads.AddRange(res); StartCoroutine(DownloadEverything(false)); } IEnumerator DownloadEverything(bool isFirstDownload = true) { Debug.Log("Baixar recursos do jogo, isFirstDownload = " + isFirstDownload); GameObject objLoad = Instantiate(Resources.Load("Load Game")); if (!isFirstDownload) { Destroy(objLoad); } foreach (ArchiveDownload item in downloads) { if (item.isImg) { yield return StartCoroutine(DownloadPhoto(item.resource)); } else { if (item.resource.EndsWith(".wav") || item.resource.EndsWith(".mp3")) { yield return StartCoroutine(DownloadAudioFile(item.resource)); } else { yield return StartCoroutine(DownloadVideoFile(item.resource)); } } yield return new WaitForEndOfFrame(); } if (isFirstDownload) { Destroy(objLoad); gameReady = true; Debug.LogWarning("Downloaded Everything"); } else { extraDownloads++; } } IEnumerator DownloadAudioFile(string fileName) { string path = "http://" + ReadingFile.iploc + "/zoeGamesResources/" + fileName; Debug.Log("Baixando audio de: " + path); var www = new WWW(path); Debug.Log("Downloading " + fileName + "!"); yield return www.GetAudioClip(); string pathToArchive = Application.persistentDataPath + "/" + fileName; SongArchive songArchive = new SongArchive(); songArchive.resource = fileName; songArchive.clip = www.GetAudioClip(); audios.Add(songArchive); yield break; } IEnumerator DownloadVideoFile(string fileName) { string path = "http://" + ReadingFile.iploc + "/zoeGamesResources/" + fileName; Debug.Log("Baixando video de: " + path); var www = new WWW(path); Debug.Log("Downloading " + fileName + "!"); yield return www; string pathToArchive = Application.persistentDataPath + "/" + fileName; if (File.Exists(pathToArchive)) { File.Delete(pathToArchive); } File.WriteAllBytes(pathToArchive, www.bytes); VideoArchive videoArchive = new VideoArchive(); videoArchive.fullPath = pathToArchive; videoArchive.resource = fileName; videos.Add(videoArchive); yield break; } IEnumerator DownloadPhoto(string photoPath) { string url = "http://" + ReadingFile.iploc + "/zoeGamesResources/" + photoPath; Debug.Log("Baixando imagem de: " + url); using (WWW www = new WWW(url)) { yield return www; ImageArchive img = new ImageArchive(); img.resource = photoPath; img.img = Sprite.Create(www.texture, new Rect(0, 0, www.texture.width, www.texture.height), new Vector2(0, 0)); images.Add(img); } } public void CallEndGame() { StartCoroutine(EndGame(true)); } public IEnumerator EndGame(bool won, bool jusClosing = false) { yield return new WaitForSecondsRealtime(1); GameObject obj = Instantiate(Resources.Load("End Game")); foreach (ImageArchive item in images) { item.img = null; yield return new WaitForEndOfFrame(); } foreach (VideoArchive item in videos) { File.Delete(item.fullPath); yield return new WaitForEndOfFrame(); } Resources.UnloadUnusedAssets(); GameControl jooj = GameObject.Find("GameControl").GetComponent(); if (!jusClosing) { yield return new WaitForSecondsRealtime(1); Destroy(obj); jooj.ended = false; if (won) { jooj.finishedGame = true; } else { jooj.failedGame = true; } } } }