using System; using UnityEngine; using UnityEngine.Events; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using Debug = UnityEngine.Debug; using Object = UnityEngine.Object; public class Bundle : MonoBehaviour { #region public static Bundle Instance; public static bool Complete; public static bool Atlas2Complete; public static AssetBundle Atlas; public static AssetBundle Atlas2; public static AssetBundle UI; public static AssetBundle Effect; public static AssetBundle Audio; public static AssetBundle Scene; public static AssetBundle Config; public static AssetBundle Discard; public List UiList; public List Atlas2List; public List EffectList; public List AudioList; public List SceneList; public List ConfigList; public List DiscardList; #endregion public void Awake() { Instance = this; LoadAll ( () => Complete = true ); } public static T Load(string goName, Folder folder) where T : Object { if (Initializer.Instance.DebugMode) { #region MyRegion if (folder == Folder.UI) { for (int i = 0; i < Instance.UiList.Count; i++) { if (Instance.UiList[i].name == goName) { return (T) Instance.UiList[i]; } } } else if (folder == Folder.Audio) { for (int i = 0; i < Instance.AudioList.Count; i++) { if (Instance.AudioList[i].name == goName) { return (T) Instance.AudioList[i]; } } } else if (folder == Folder.Config) { for (int i = 0; i < Instance.ConfigList.Count; i++) { if (Instance.ConfigList[i].name == goName) { return (T) Instance.ConfigList[i]; } } } else if (folder == Folder.Effect) { for (int i = 0; i < Instance.EffectList.Count; i++) { if (Instance.EffectList[i].name == goName) { return (T) Instance.EffectList[i]; } } } else if (folder == Folder.Scene) { for (int i = 0; i < Instance.SceneList.Count; i++) { if (Instance.SceneList[i].name == goName) { return (T) Instance.SceneList[i]; } } } else if (folder == Folder.Discard) { for (int i = 0; i < Instance.DiscardList.Count; i++) { if (Instance.DiscardList[i].name == goName) { return (T)Instance.DiscardList[i]; } } } else if (folder == Folder.Atlas) { return Atlas.LoadAsset(goName); } #endregion } else { #region MyRegion if (folder == Folder.UI) { return UI.LoadAsset(goName); } else if (folder == Folder.Audio) { return Audio.LoadAsset(goName); } else if (folder == Folder.Config) { return Config.LoadAsset(goName); } else if (folder == Folder.Effect) { return Effect.LoadAsset(goName); } else if (folder == Folder.Scene) { return Scene.LoadAsset(goName); } else if (folder == Folder.Atlas) { return Atlas.LoadAsset(goName); } else if (folder == Folder.Discard) { return Discard.LoadAsset(goName); } #endregion } throw new Exception(); } public static void LoadAtlas2Sprite() { if (Atlas2Complete) { return; } Atlas2Complete = true; if (Initializer.Instance.DebugMode) { for (int i = 0; i < Instance.Atlas2List.Count; i++) { ManaReso.ObjDic.UniqueAdd(Instance.Atlas2List[i].name, Instance.Atlas2List[i]); } } else { #region MyRegion Sprite[] sprites = Atlas2.LoadAllAssets(); for (int i = 0; i < sprites.Length; i++) { ManaReso.ObjDic.UniqueAdd(sprites[i].name, sprites[i]); } #endregion } } public static AssetBundleRequest LoadAsync(string goName, Folder folder) { if (folder == Folder.UI) { return UI.LoadAssetAsync(goName); } else if (folder == Folder.Audio) { return Audio.LoadAssetAsync(goName); } else if (folder == Folder.Config) { return Config.LoadAssetAsync(goName); } else if (folder == Folder.Effect) { return Effect.LoadAssetAsync(goName); } else if (folder == Folder.Scene) { return Scene.LoadAssetAsync(goName); } else if (folder == Folder.Atlas) { return Atlas.LoadAssetAsync(goName); } else if (folder == Folder.Discard) { return Discard.LoadAssetAsync(goName); } else { throw new Exception(); } } public static AssetBundleRequest LoadAllAsync(Folder folder) { if (folder == Folder.Atlas2) { return Atlas2.LoadAllAssetsAsync(); } else { throw new Exception(); } } public static string GetStreamPath() { if (Application.isEditor) // return "file://" + System.Environment.CurrentDirectory.Replace("\\", "/"); // Use the build output folder directly. return "file://" + Application.streamingAssetsPath + "/Bundle/Windows/";//user local stream else if (Application.isWebPlayer) return System.IO.Path.GetDirectoryName(Application.absoluteURL).Replace("\\", "/") + "/StreamingAssets"; else if (Application.platform == RuntimePlatform.IPhonePlayer) return "file://" + Application.streamingAssetsPath + "/Bundle/IOS/"; else if (Application.isMobilePlatform || Application.isConsolePlatform) return Application.streamingAssetsPath + "/Bundle/Android/"; else // For standalone player. return "file://" + Application.streamingAssetsPath; //return "file://" + Application.streamingAssetsPath + "/Bundle/Windows/"; } public void LoadAll(UnityAction callback) { StartCoroutine(ILoadAll(callback)); } public static IEnumerator ILoadAll(UnityAction callback) { yield return LoadConfig(); if (!Logo.Complete && !Initializer.Instance.DebugMode) { ManaReso.AddAsyncLoad("PlayerConfig", Folder.Config, () => { ManaData.PlayerDoc = ManaData.PlayerDoc; }); } else { ManaData.PlayerDoc = ManaData.PlayerDoc; } yield return LoadDiscard(); yield return LoadUI(); if (!Logo.Complete && !Initializer.Instance.DebugMode) { ManaReso.AddAsyncLoad("Canvas", 1, Folder.UI, ObjType.Canvas); ManaReso.AddAsyncLoad("GroupA", 1, Folder.UI, ObjType.GroupA, true); ManaReso.AddAsyncLoad("GroupB", 1, Folder.UI, ObjType.GroupB, true); ManaReso.AddAsyncLoad("GroupC", 1, Folder.UI, ObjType.GroupC, true); ManaReso.AddAsyncLoad("GroupE", 1, Folder.UI, ObjType.GroupE, true); ManaReso.AddAsyncLoad("GroupD", 1, Folder.UI, ObjType.GroupD, true); ManaReso.AddAsyncLoad("EventSystem", 1, Folder.UI, ObjType.EventSystem); ManaReso.AddAsyncLoad("MainCamera", 1, Folder.UI, ObjType.MainCamera); ManaReso.AddAsyncLoad("SkillItem", 31, Folder.UI, ObjType.SkillItem, true); ManaReso.AddAsyncLoad("SignItem", 21, Folder.UI, ObjType.SignItem, true); ManaReso.AddAsyncLoad("FlowerItem", 17, Folder.UI, ObjType.FlowerItem, true); ManaReso.AddAsyncLoad("AchieveItem", 2, Folder.UI, ObjType.AchieveItem, true); } yield return LoadScene(); if (!Logo.Complete && !Initializer.Instance.DebugMode) { ManaReso.AddAsyncLoad("Flower", 9, Folder.Scene, ObjType.Flower); ManaReso.AddAsyncLoad("Page", 2, Folder.Scene, ObjType.Page); ManaReso.AddAsyncLoad("Garden", 1, Folder.Discard, ObjType.Garden); ManaReso.AddAsyncLoad("DressRoom", 1, Folder.Discard, ObjType.DressRoom); } yield return LoadAudio(); if (!Logo.Complete && !Initializer.Instance.DebugMode) { ManaReso.AddAsyncLoad("Music", 1, Folder.Audio, ObjType.Music); } yield return LoadAtlas2(); if (!Logo.Complete && !Initializer.Instance.DebugMode) { ManaReso.AddAsyncLoad("skill_config", Folder.Config); ManaReso.AddAsyncLoad("pack_config", Folder.Config); ManaReso.AddAsyncLoad("ability_config", Folder.Config); ManaReso.AddAsyncLoad("achieve_config", Folder.Config); ManaReso.AddAsyncLoad("visit_config", Folder.Config); ManaReso.AddAsyncLoad("award_config", Folder.Config); ManaReso.AddAsyncLoad("flower_config", Folder.Config); ManaReso.AddAsyncLoad("offline_config", Folder.Config); ManaReso.AddAsyncLoad("signin_config", Folder.Config); ManaReso.AddAsyncLoad("dressRoom_config", Folder.Config); ManaReso.AddAsyncLoad("English", Folder.Config); ManaReso.AddAsyncLoad("ChineseSimplified", Folder.Config); ManaReso.AddAsyncLoad("ChineseTraditional", Folder.Config); ManaReso.AddAsyncLoad("BtnClip", Folder.Audio); ManaReso.AddAsyncLoad("SkillClip", Folder.Audio); ManaReso.AddAsyncLoad("ErrorClip", Folder.Audio); ManaReso.AddAsyncLoad("DropClip", Folder.Audio); ManaReso.AddAsyncLoad("CloseClip", Folder.Audio); ManaReso.AddAsyncLoad("FlowerClip", Folder.Audio); ManaReso.AddAsyncLoad("BubbleClip", Folder.Audio); ManaReso.AddAsyncLoad("CurrentClip", Folder.Audio); ManaReso.AddAsyncLoad("MiniEndClip", Folder.Audio); ManaReso.AddAsyncLoad("stand_tex", Folder.Config); ManaReso.AddAsyncLoad("stand_ske", Folder.Config); ManaReso.AddAsyncLoad("stand_texture", Folder.Scene); ManaReso.AddAsyncLoad("Closet_tex", Folder.Config); ManaReso.AddAsyncLoad("Closet_ske", Folder.Config); ManaReso.AddAsyncLoad("Closet_texture", Folder.Scene); ManaReso.AddAsyncLoadAtlas2(); } yield return LoadAtlas(); yield return LoadEffect(); if (callback != null) { callback.Invoke(); } } public static IEnumerator LoadUI() { WWW www = new WWW(GetStreamPath() + "ui"); yield return www; if (string.IsNullOrEmpty(www.error)) { UI = www.assetBundle; } else { Debug.Log(www.error); } } public static IEnumerator LoadAtlas() { WWW www = new WWW(GetStreamPath() + "atlas"); yield return www; if (string.IsNullOrEmpty(www.error)) { Atlas = www.assetBundle; } else { Debug.Log(www.error); } } public static IEnumerator LoadAtlas2() { WWW www = new WWW(GetStreamPath() + "atlas2"); yield return www; if (string.IsNullOrEmpty(www.error)) { Atlas2 = www.assetBundle; } else { Debug.Log(www.error); } } public static IEnumerator LoadAudio() { WWW www = new WWW(GetStreamPath() + "audio"); yield return www; if (string.IsNullOrEmpty(www.error)) { Audio = www.assetBundle; } else { Debug.Log(www.error); } } public static IEnumerator LoadConfig() { WWW www = new WWW(GetStreamPath() + "config"); yield return www; if (string.IsNullOrEmpty(www.error)) { Config = www.assetBundle; } else { Debug.Log(www.error); } } public static IEnumerator LoadEffect() { WWW www = new WWW(GetStreamPath() + "effect"); yield return www; if (string.IsNullOrEmpty(www.error)) { Effect = www.assetBundle; } else { Debug.Log(www.error); } } public static IEnumerator LoadScene() { WWW www = new WWW(GetStreamPath() + "scene"); yield return www; if (string.IsNullOrEmpty(www.error)) { Scene = www.assetBundle; } else { Debug.Log(www.error); } } public static IEnumerator LoadDiscard() { WWW www = new WWW(GetStreamPath() + "discard"); yield return www; if (string.IsNullOrEmpty(www.error)) { Discard = www.assetBundle; } else { Debug.Log(www.error); } } }