using System; using UnityEngine; using UnityEngine.Events; using System.Collections; using System.Collections.Generic; using System.Diagnostics; #if UNITY_EDITOR using UnityEditor; #endif using Debug = UnityEngine.Debug; using Object = UnityEngine.Object; public class Bundle : MonoBehaviour { #region public static Bundle Instance; public static bool Complete; 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 static AssetBundle PlazaRoom; public Texture2D AtlasTexture; public Texture2D ExpressionTexture; public List UiList; public List AtlasList; public List Atlas2List; public List EffectList; public List AudioList; public List SceneList; public List ConfigList; public List DiscardList; public List PlazaRoomList; #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) { if (goName == "Expression") { return (T)(Object)Sprite.Create(Instance.ExpressionTexture, new Rect(0, 0, Instance.AtlasTexture.width, Instance.AtlasTexture.height), new Vector2(0.5f, 0.5f)); } 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) { if (goName == "Atlas") { return (T) (Object) Sprite.Create(Instance.AtlasTexture, new Rect(0, 0, Instance.AtlasTexture.width, Instance.AtlasTexture.height), new Vector2(0.5f, 0.5f)); } for (int i = 0; i < Instance.AtlasList.Count; i++) { if (Instance.AtlasList[i].name == goName) { return (T)Instance.AtlasList[i]; } } } else if (folder == Folder.PlazaRoom) { for (int i = 0; i < Instance.PlazaRoomList.Count; i++) { if (Instance.PlazaRoomList[i].name == goName) { return (T)Instance.PlazaRoomList[i]; } } } #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); } else if (folder == Folder.PlazaRoom) { return PlazaRoom.LoadAsset(goName); } #endregion } DebugManager.Log(goName + " " + folder); throw new Exception(goName + " " + folder); } public static void LoadAtlasSprites() { if (Initializer.Instance.DebugMode) { for (int i = 0; i < Instance.Atlas2List.Count; i++) { ResourceManager.ObjectDictionary.UniqueAdd(Instance.Atlas2List[i].name, Instance.Atlas2List[i]); } #if UNITY_EDITOR string assetPath = AssetDatabase.GetAssetPath(ResourceManager.Load("stand_texture", Folder.Scene)); Object[] objects = AssetDatabase.LoadAllAssetsAtPath(assetPath); for (int i = 0; i < objects.Length; i++) { Sprite sprite = objects[i] as Sprite; if (sprite != null) { PlayerManager.CloseSpriteDictionary.Add(sprite.name, sprite); ResourceManager.ObjectDictionary.UniqueAdd(sprite.name, sprite); } } #endif } else { #region MyRegion Sprite[] sprites = Atlas2.LoadAllAssets(); for (int i = 0; i < sprites.Length; i++) { ResourceManager.ObjectDictionary.UniqueAdd(sprites[i].name, sprites[i]); } sprites = Atlas.LoadAllAssets(); for (int i = 0; i < sprites.Length; i++) { ResourceManager.ObjectDictionary.UniqueAdd(sprites[i].name, sprites[i]); } sprites = Scene.LoadAssetWithSubAssets("FlowerItemAtlas1"); for (int i = 0; i < sprites.Length; i++) { ResourceManager.ObjectDictionary.UniqueAdd(sprites[i].name, sprites[i]); } Object[] objects = Scene.LoadAssetWithSubAssets("stand_texture", typeof(Sprite)); for (int i = 0; i < objects.Length; i++) { Sprite sprite = (Sprite)objects[i]; PlayerManager.CloseSpriteDictionary.Add(sprite.name, sprite); ResourceManager.SpriteDictionary.UniqueAdd(sprite.name, sprite); } #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) { ResourceManager.AddAsyncLoad(ResourceLabel.PlayerConfig, Folder.Config, () => { ConfigManager.ConfigDocument = ConfigManager.ConfigDocument; HttpManager.GetBuyPackLimitFlag(); }); } else { ConfigManager.ConfigDocument = ConfigManager.ConfigDocument; HttpManager.GetBuyPackLimitFlag(); } //yield return LoadDiscard(); yield return LoadUI(); if (!Logo.Complete && !Initializer.Instance.DebugMode) { ResourceManager.AddAsyncLoad(ResourceLabel.Canvas, 1, Folder.UI, ObjType.Canvas); //ResourceManager.AddAsyncLoad(ResourceLabel.GroupA, 1, Folder.UI, ObjType.GroupA, true); //ResourceManager.AddAsyncLoad(ResourceLabel.GroupB, 1, Folder.UI, ObjType.GroupB, true); //ResourceManager.AddAsyncLoad(ResourceLabel.GroupC, 1, Folder.UI, ObjType.GroupC, true); //ResourceManager.AddAsyncLoad(ResourceLabel.GroupE, 1, Folder.UI, ObjType.GroupE, true); //ResourceManager.AddAsyncLoad(ResourceLabel.GroupD, 1, Folder.UI, ObjType.GroupD, true); ResourceManager.AddAsyncLoad(ResourceLabel.EventSystem, 1, Folder.UI, ObjType.EventSystem); ResourceManager.AddAsyncLoad(ResourceLabel.MainCamera, 1, Folder.UI, ObjType.MainCamera); //ResourceManager.AddAsyncLoad("SkillItem", 31, Folder.UI, ObjType.SkillItem, true); //ResourceManager.AddAsyncLoad("SignItem", 21, Folder.UI, ObjType.SignItem, true); //ResourceManager.AddAsyncLoad("FlowerItem", 17, Folder.UI, ObjType.FlowerItem, true); //ResourceManager.AddAsyncLoad("AchieveItem", 2, Folder.UI, ObjType.AchieveItem, true); } yield return LoadScene(); if (!Logo.Complete && !Initializer.Instance.DebugMode) { ResourceManager.AddAsyncLoad(ResourceLabel.Flower, 9, Folder.Scene, ObjType.Flower); ResourceManager.AddAsyncLoad(ResourceLabel.Page, 2, Folder.Scene, ObjType.SlotPage); ResourceManager.AddAsyncLoad(ResourceLabel.Garden, 1, Folder.Scene, ObjType.Garden); ResourceManager.AddAsyncLoad(ResourceLabel.DressRoom, 1, Folder.UI, ObjType.DressRoom); } yield return LoadAudio(); if (!Logo.Complete && !Initializer.Instance.DebugMode) { ResourceManager.AddAsyncLoad(ResourceLabel.Music, 1, Folder.Audio, ObjType.Music); } yield return LoadAtlas2(); if (!Logo.Complete && !Initializer.Instance.DebugMode) { ResourceManager.AddAsyncLoad(ResourceLabel.SkillConfig, Folder.Config); ResourceManager.AddAsyncLoad(ResourceLabel.PackConfig, Folder.Config); ResourceManager.AddAsyncLoad(ResourceLabel.AbilityConfig, Folder.Config); ResourceManager.AddAsyncLoad(ResourceLabel.AchieveConfig, Folder.Config); ResourceManager.AddAsyncLoad(ResourceLabel.VisitConfig, Folder.Config); ResourceManager.AddAsyncLoad(ResourceLabel.AwardConfig, Folder.Config); ResourceManager.AddAsyncLoad(ResourceLabel.FlowerConfig, Folder.Config); ResourceManager.AddAsyncLoad(ResourceLabel.OfflineConfig, Folder.Config); ResourceManager.AddAsyncLoad(ResourceLabel.SigninConfig, Folder.Config); ResourceManager.AddAsyncLoad(ResourceLabel.DressroomConfig, Folder.Config); ResourceManager.AddAsyncLoad(ResourceLabel.English, Folder.Config); ResourceManager.AddAsyncLoad(ResourceLabel.ChineseSimplified, Folder.Config); ResourceManager.AddAsyncLoad(ResourceLabel.ChineseTraditional, Folder.Config); ResourceManager.AddAsyncLoad(ResourceLabel.BtnClip, Folder.Audio); ResourceManager.AddAsyncLoad(ResourceLabel.SkillClip, Folder.Audio); ResourceManager.AddAsyncLoad(ResourceLabel.ErrorClip, Folder.Audio); ResourceManager.AddAsyncLoad(ResourceLabel.DropClip, Folder.Audio); ResourceManager.AddAsyncLoad(ResourceLabel.CloseClip, Folder.Audio); ResourceManager.AddAsyncLoad(ResourceLabel.FlowerClip, Folder.Audio); ResourceManager.AddAsyncLoad(ResourceLabel.BubbleClip, Folder.Audio); ResourceManager.AddAsyncLoad(ResourceLabel.CurrentClip, Folder.Audio); ResourceManager.AddAsyncLoad(ResourceLabel.MiniEndClip, Folder.Audio); ResourceManager.AddAsyncLoad(ResourceLabel.StandTex, Folder.Config); ResourceManager.AddAsyncLoad(ResourceLabel.StandSke, Folder.Config); ResourceManager.AddAsyncLoad(ResourceLabel.StandTexture, Folder.Scene); } yield return LoadAtlas(); yield return LoadEffect(); //yield return LoadPlazaRoom(); SpriteAsset.AddAllBundleSpriteInfo(); 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); } } public static IEnumerator LoadPlazaRoom() { WWW www = new WWW(GetStreamPath() + "plazaroom"); yield return www; if (string.IsNullOrEmpty(www.error)) { PlazaRoom = www.assetBundle; } else { Debug.Log(www.error); } } }